From patchwork Thu Sep 7 11:31:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matan Azrad X-Patchwork-Id: 28441 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 3405E199AB; Thu, 7 Sep 2017 13:31:37 +0200 (CEST) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10077.outbound.protection.outlook.com [40.107.1.77]) by dpdk.org (Postfix) with ESMTP id 318E7199A9 for ; Thu, 7 Sep 2017 13:31:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=NFXxuyg9Xj1fptrsQvP3+nHHpNbUzjP5XNf7astm8eQ=; b=TTwkE+uJH96JO8WoNz+9F4eQSyBp5guvAuTYjwmJNUPcWPED+KArqU/b4PMTfz9etUZy3CngP67Pvbw3RjkYDKdhU3dJ/j1ZZKhHiinvRwTbwO/QkPOQa2BoYt3FeMZgNPWicd3FKbEJBwpqa+PHGjcW9GZPJGjhF24OOJ+5bEI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matan@mellanox.com; Received: from mellanox.com (37.142.13.130) by DB6PR0502MB3048.eurprd05.prod.outlook.com (2603:10a6:4:9f::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Thu, 7 Sep 2017 11:31:34 +0000 From: Matan Azrad To: Gaetan Rivet Cc: dev@dpdk.org Date: Thu, 7 Sep 2017 14:31:13 +0300 Message-Id: <1504783873-4211-1-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: DB6PR0202CA0014.eurprd02.prod.outlook.com (2603:10a6:4:29::24) To DB6PR0502MB3048.eurprd05.prod.outlook.com (2603:10a6:4:9f::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3adf10a0-816d-40c6-27ff-08d4f5e3fed8 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DB6PR0502MB3048; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0502MB3048; 3:3WmUi1hY65OehnCApshipsxGceopRIoBLK2H810/vRoEBjCX7CdxfAhC/HJRSjP9m9TSbcpkiHjUmIYAfcSj2g4MLxpBEWTnJdDsv4UmwdWam1hFGAvDOEi1DABb5QqUI8Ct5HLKd1LMzeBHA7MSiootdcN670ldzpGw1S2961lpAnPh9HsKBriAU7F+FN9pShpzu1N1JP3scbmsSqrso4Rriaz1TvB9z9Iwbry/soJkFfpalATICQsuy+fW8Fo/; 25:2Qkx/7Q7dO2EG0EG5sVHldjYJdxvhTxZxQ5f2JMHrnz4Zope3Fa0YtpCGzf8kjqVTOr9dNH1rRG4QSea5jYHA9Drq9w9vKfyjz6qbzeE35NVjiSUqAAUdxt42HOvcHQH+xQU10m9ZwnPk8tL8AN7G36xhhhShTTob7reCZu0NbTGp9+9qQamO4RrQiKMAanxEL8tj3kCFmHyQ5m+yU8h0snil7pn9qaqigt4Ex4KaoSWpK8M7u5/LjcQ7zf4LUV2PZru25Zep5B9ubfjnRMfI+K14QG1zg0sA0v9yM2YxsBr6V1QhncKvktD9nhN/APPe94X9QsQ6UHn8ZF5HavYeQ==; 31:y3Hw02mfaFKnGi9cx497MPmN1ovG1UDk9c7ipnElHFV5nAlMhEyDcrwZZoI+g36PpAD6sCXa7yHhJfy56maylQwsF8Q9BCkcGqHlXTLb2Io9ZkRcp4GB45PPLnEYwXxXtnIleSvQJOf8aJtfl4TpfGncBrYklDjfrbzmuJsN6z1xEIytDMMw1MUQFuW1QztDBBd0/V9l5OONgYvADJ7vIYirMVP473JS8KIRcyCoWkE= X-MS-TrafficTypeDiagnostic: DB6PR0502MB3048: X-Microsoft-Exchange-Diagnostics: 1; DB6PR0502MB3048; 20:zv+AnyH8ZP2y3+ICq8JtcqaHnSMcNaFeGhIfkslF32sDrVcX9N/4mebdrWto037bpzfY2Nf9Whk2oL4IBh9MYq53IN91Odg2/ZX8JaJjOqCxJf2tGTplSFijUsm0qauFcsCXBbFgCWKZO2abaKB8tnE2OwTZ6vKss4M38iKvP5sK0q6vFO9dWXWHXqAdUiL6QPGHGSGgZILvozW+vi3nvN8O6RGXF69cmvc7e2opce/K/8SujLI7a3aSVzSizwX+OVel6haIblfVPADb/qliMq3CyKgUpMdLg5qkN2EwdZhH1ukzeaF1eJXi9EHi5CYbrGAr9G6+m+iwcYvKyJq2ilzdXXpQn67PQ97wr3hH69mdzDKfwB68Umjp7wbc1NIRRsSwNcs7XXFPsCNGvSKHix+E3YFsOh/4IN+eIZay9ZI1KPizw9jySsYVyU3bfk69B08eFcuBLcj+fYvYme75aJ7uqQiAACMzaMHNF+uHMXWHN+hr3431Yjz6gNt1uwzF; 4:F0YbNSw/EdxiqZUK8Xamxvj8NDdb6+lJLxpuZ2uIYEPuuSaK9PSTaxWwDVuvBoMhmgR5ohoXjwuHWsHAp1LzfJZTrBbNu3637MLL3KsuedPAGm/CyGVBIOJURI6nEguornSyIB3LaA95Mq1ruwjiZwRig9RiDG7eYRzOH8QvhvgACaRl6wo04bOWNrBaFagLBBjIxcSJTed5K14HeVLIvUYtIFZPunR15stVdyfNe/HQ42m2RugnNkdgih9ENVA4 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0502MB3048; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0502MB3048; X-Forefront-PRVS: 04238CD941 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(199003)(189002)(8676002)(106356001)(33026002)(97736004)(33646002)(36756003)(110136004)(42186005)(478600001)(105586002)(86362001)(5003940100001)(53936002)(47776003)(4326008)(25786009)(66066001)(575784001)(55016002)(551984002)(189998001)(68736007)(3846002)(50986999)(69596002)(7350300001)(21086003)(81156014)(81166006)(6916009)(6116002)(6666003)(101416001)(305945005)(50226002)(2906002)(7736002)(48376002)(50466002)(5660300001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0502MB3048; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0502MB3048; 23:FyIZ3HZuKjIGWFiIV6vbWGBIC/rf09R6oWOPWDk?= LB8cotIEprfBpFBgzPThyNHTclVIBsCteUmXRwxjBhReWSrrYFRyGr5U0BQ0XGxpxyVwLz5gq7zQvw0CfQcihHbGI3j2U5QcYoxQn1GSUjLqv3XY2EIp4h+7+SOxXooUbhQ/YnvN/BppP94/bIZUh34oqQHMRJl4vrIgsx1tvgRWdohFjz69ngGzprK34b2x5Gw3SDpbOH7zHM1fOfPJh19B22AWoHEZphWl69BUgYTyl1bHBFsQvYnNjI7yHK6wJ0hDjlKoC2IaLemPYGCx0V3Kwd74ElvRofCJqS/sRAZcl2+ErrptWRgUoNbhGoGhP9M+u2fmLm8PaU4f9wuIuWHQu1SKuxxVDk0mYUMGbSjCi1aGENBUaQ+VSJoo5JyCIW3xvL6/kwmiH4GbZT9e9rwRiDiqHqPKsnzKR6VASo/ymguRJqyODxfaw7SkMb4yhuAy0Qb6XzC6VZ7Rquwh02ywB86hdm/31fWop9M25tv2eoNM3jQ84vB40w0ttszprW4CFFFipVUNb4qmmYvkbBjEaH6Lgr65PYkj27eAxiv6KlzqmqDaak/qHEmeTIKOupGmHXGtHlUWjfuB5gq6aIR8K5l81C5e3UIQBvzVt2sV93Jd/AHE0E4KA9uJtbcEsfhp74YVQmMvYns/9laHB4UKe3CJhQEm6Q9p6Br3jq2Z1tTuPuix3uEvB5KxnnERHVPvkSYfJJszXViUIaxJY48dAOeXWzf/n0SEx1Y05MAv7mizwFITbi9vihEyuaXjREUV1hWkk2k2W+fEG/VsJ50XqMFpEtlqY+AFbazehTPxpWDVElJ9LLnT5v6xDJG0stN/cijXaTnqJyxifkyarNxeC76StsTKDi5mjnuUTjrmNA+7rFrzm6vCU/ggnBfoMkwv3iCFU/xjz7kcFRLyTmazKBE7b8ylKdVXyKT8CQqaD5vgUyn1M0h97NUTwsq6DM4dWOR9h5ThiAK2aDRwN3PR3BIoOD274edhtX/NZxG800klAZnM0h+leRFK325dfwwEZzyB+TlkoBYnv41vNDPAN9fUUyCKdAP+8D3TG3/m+n/tI7dsEc/M2YdhzjrxNCkfD/N8YgpIWpn2DTJaiE9dr X-Microsoft-Exchange-Diagnostics: 1; DB6PR0502MB3048; 6:rFARoisKgJEjE29Rkn0EQTkZiV4sP0ytJraI76Akc+wZun/x9dS09Wn4lCwS6/EmKaMaA0egQnKZzIXpfw7ITU8SSExbYFoiJaA/4/SmwA9vsRbFbk6wd8stT2cbLU58cz2XOy048e83w0eVOmNDL2rkqL4MBIe6wQyGUGCAPSE/HJPe/svypU6523ZWK0AY5CuhLOy/9/e+qBfMMvOLShNRWeOrXs8bmtdG4u5wuhwIR4wHxssrtiq5cbOZVrQYLat6IfN/Nflr0lJyoDV2kEAvGeVp+xUJa81WIsq+fEJd+9w6yjKqeSLpSs3fnW4QHBHRQWk5Xz9bTm283wr/fA==; 5:DHJFvZz9ZKWkEO4Hje8heNIp3XFrYG+8vGeC6FgzSE6ZXKRm3jvbZ61yoIp21XZDITfcSZykBgMPvI6cgU5IOyZUS2X/q2hL2xv7q8/mkKzD3dGpWjWu3X2sNh2xYcODiGWzZaNcah0gkimw0QFVWQ==; 24:z2ynoBK/U6W4cu3zYpA7k4l+/Dq/ZGVKszKIGYi8U+7mnpCCzPS+OMu48U/8HECRBhFjSiACSfr+IsPir4L1OtoxWpP07CnTyDiB9F+8Nu4=; 7:qft6bACzCqsy8/uBm01XwCGR6Kvtb5yAe67FvbzX5Hd2nsz3EI+Xf6PMx0OCZ5scX7w4FVSAWqJTG+kHS86q1udyHLGwMIG7EhKzjlqgyslpE28aWmVqpFh/TqIDF/ZAUh5lU9Sx384My+BkXVOSnIJkcJhgkb7iy81EqkH9jSG20w9ZQUFXjcp+QXzZs5+RPQVkOudXz2yoHtm2+91Kpm7IsWW2QtjU1EmIhICwBmk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2017 11:31:34.3198 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0502MB3048 Subject: [dpdk-dev] [PATCH v2] net/failsafe: stat support enhancement X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The previous stats code returned only the current TX sub device stats. This enhancement extends it to return the sum of all sub devices stats with history of removed sub-devices. Dedicated stats accumulator saves the stat history of all sub device remove events. Each failsafe sub device contains the last stats asked by the user and updates the accumulator in removal time. I would like to implement ultimate snapshot on removal time. The stats_get API needs to be changed to return error in the case it is too late to retrieve statistics. By this way, failsafe can get stats snapshot in removal interrupt callback for each PMD which can give stats after removal event. Signed-off-by: Matan Azrad Acked-by: Gaetan Rivet --- drivers/net/failsafe/failsafe_ether.c | 35 ++++++++++++++++++++++++++++++++- drivers/net/failsafe/failsafe_ops.c | 16 +++++++++++---- drivers/net/failsafe/failsafe_private.h | 5 +++++ 3 files changed, 51 insertions(+), 5 deletions(-) V2: 1. Fix failsafe conventions. 2. Move the stats saving from the interrupt to the remove func. diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index a3a8cce..dc2e6d1 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -308,6 +308,14 @@ fs_dev_remove(struct sub_device *sdev) failsafe_hotplug_alarm_install(sdev->fs_dev); } +static void +fs_dev_stats_save(struct sub_device *sdev) +{ + failsafe_stats_increment(&PRIV(sdev->fs_dev)->stats_accumulator, + &sdev->stats_snapshot); + memset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats)); +} + static inline int fs_rxtx_clean(struct sub_device *sdev) { @@ -329,8 +337,10 @@ failsafe_dev_remove(struct rte_eth_dev *dev) uint8_t i; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) - if (sdev->remove && fs_rxtx_clean(sdev)) + if (sdev->remove && fs_rxtx_clean(sdev)) { + fs_dev_stats_save(sdev); fs_dev_remove(sdev); + } } int @@ -399,6 +409,29 @@ failsafe_eth_dev_state_sync(struct rte_eth_dev *dev) return ret; } +void +failsafe_stats_increment(struct rte_eth_stats *to, struct rte_eth_stats *from) +{ + uint32_t i; + + RTE_ASSERT(to != NULL && from != NULL); + to->ipackets += from->ipackets; + to->opackets += from->opackets; + to->ibytes += from->ibytes; + to->obytes += from->obytes; + to->imissed += from->imissed; + to->ierrors += from->ierrors; + to->oerrors += from->oerrors; + to->rx_nombuf += from->rx_nombuf; + for (i = 0; i < RTE_ETHDEV_QUEUE_STAT_CNTRS; i++) { + to->q_ipackets[i] += from->q_ipackets[i]; + to->q_opackets[i] += from->q_opackets[i]; + to->q_ibytes[i] += from->q_ibytes[i]; + to->q_obytes[i] += from->q_obytes[i]; + to->q_errors[i] += from->q_errors[i]; + } +} + int failsafe_eth_rmv_event_callback(uint8_t port_id __rte_unused, enum rte_eth_event_type event __rte_unused, diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index ff9ad15..e0f1b0b 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -586,9 +586,14 @@ static void fs_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { - if (TX_SUBDEV(dev) == NULL) - return; - rte_eth_stats_get(PORT_ID(TX_SUBDEV(dev)), stats); + struct sub_device *sdev; + uint8_t i; + + rte_memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats)); + FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { + rte_eth_stats_get(PORT_ID(sdev), &sdev->stats_snapshot); + failsafe_stats_increment(stats, &sdev->stats_snapshot); + } } static void @@ -597,8 +602,11 @@ fs_stats_reset(struct rte_eth_dev *dev) struct sub_device *sdev; uint8_t i; - FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) + FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { rte_eth_stats_reset(PORT_ID(sdev)); + memset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats)); + } + memset(&PRIV(dev)->stats_accumulator, 0, sizeof(struct rte_eth_stats)); } /** diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index 0361cf4..4861974 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -102,6 +102,8 @@ struct sub_device { uint8_t sid; /* Device state machine */ enum dev_state state; + /* Last stats snapshot passed to user */ + struct rte_eth_stats stats_snapshot; /* Some device are defined as a command line */ char *cmdline; /* fail-safe device backreference */ @@ -140,6 +142,7 @@ struct fs_priv { * synchronized state. */ enum dev_state state; + struct rte_eth_stats stats_accumulator; unsigned int pending_alarm:1; /* An alarm is pending */ /* flow isolation state */ int flow_isolated:1; @@ -180,6 +183,8 @@ int failsafe_eal_uninit(struct rte_eth_dev *dev); int failsafe_eth_dev_state_sync(struct rte_eth_dev *dev); void failsafe_dev_remove(struct rte_eth_dev *dev); +void failsafe_stats_increment(struct rte_eth_stats *to, + struct rte_eth_stats *from); int failsafe_eth_rmv_event_callback(uint8_t port_id, enum rte_eth_event_type type, void *arg, void *out);