From patchwork Thu Sep 20 06:37:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Yogev Chaimovich X-Patchwork-Id: 44991 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 [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F29955B30; Thu, 20 Sep 2018 08:37:07 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50113.outbound.protection.outlook.com [40.107.5.113]) by dpdk.org (Postfix) with ESMTP id A25495F14 for ; Thu, 20 Sep 2018 08:37:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cgstowernetworks.onmicrosoft.com; s=selector1-cgstowernetworks-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2h3W3k9LHKQC0ggI7Ue8EeYDqPitnukKMYcN+Cl707g=; b=jOQLF3tZCKD/XmInKpUpnF30xem/4l4DMT27l4Y50SqPTmexTpAOfVhgw9Oi1bcHbvl3pzXJEQmpH/W2m6GTcVCbM+Mfiuz8gRHAkGVrZTswOi/AWamcL4ZW3coY2B55RbyRbAiFipenG79IgLHj0oJymB4T3fwZyDSOpBTV6aY= Received: from DB6PR0902MB1829.eurprd09.prod.outlook.com (10.171.76.22) by DB6PR0902MB1941.eurprd09.prod.outlook.com (10.170.210.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.18; Thu, 20 Sep 2018 06:37:05 +0000 Received: from DB6PR0902MB1829.eurprd09.prod.outlook.com ([fe80::74ab:46d4:3504:2872]) by DB6PR0902MB1829.eurprd09.prod.outlook.com ([fe80::74ab:46d4:3504:2872%6]) with mapi id 15.20.1143.014; Thu, 20 Sep 2018 06:37:05 +0000 From: Yogev Chaimovich To: "dev@dpdk.org" CC: Yogev Chaimovich Thread-Topic: [PATCH] vmxnet3: stats_reset implementation Thread-Index: AQHUOesWr8UftqP2Vk2BAYD1SvcV2qT0QbyAgASj1IA= Date: Thu, 20 Sep 2018 06:37:05 +0000 Message-ID: <1537425577-86337-1-git-send-email-yogev@cgstowernetworks.com> References: <1537170493-83190-1-git-send-email-yogev@cgstowernetworks.com> In-Reply-To: <1537170493-83190-1-git-send-email-yogev@cgstowernetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR04CA0092.eurprd04.prod.outlook.com (2603:10a6:803:64::27) To DB6PR0902MB1829.eurprd09.prod.outlook.com (2603:10a6:4:b1::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=yogev@cgstowernetworks.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [5.144.48.231] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB6PR0902MB1941; 6:DPn9RRWVg2EtbUuL6st2D+C68oqhLzwk/+XgooQdMh/BIWPHpMaH0Row2iL3svwsrFlTPcLTLkljt5EjueC4ks4TEUZibY5CHrfs+3RGepWvgM0mQ1+gwjyKgM9/uJxcH+oYeZhZJn8mBmM3sfLy/dAVIMX8PUd0eAqi8YtDqHvn7yGQV4gwIrf8Tt+FwPVruf/y/iYiBWGHr5YLxrG5YISfFtcrsaR/UjMFT56RmXD1vHiOqixCHijqmIFGRlum5uMo3ceYsPso5/3d/IbYEWpo/U9thBBnq1R53vGnoktJvCApl0UtI3Jne8aejHz0ghWDVKqN66DP61fUn1NSV5bnyWqWb4t0CVuxRh2/xn50fDwe5sNNNSar73piFvEyF8heYCjK1sg0QiHA2onLLJmIdXInkLczq5CxLHFXBQWHQJgnXUd90DtbVYp9yUNOaFge+YAtbhIrive6NNDiBQ==; 5:8Bi9LsN6YSKYt2yemunzF+SmYFg3AuLNnx5CQdWk4d3TROk1CnYIkUlbzjJliHIXJKZm6SddXL5Nd3cETEJpaikE9T5CFqRhym7AgtMdExR/3p71kD9a26HM8rbAcztkhYNxIbVL40cWfI2CMAtjGgpXXWF9N5W5hQ7ox/NSSzw=; 7:6IWbMn3TMxoaTq3V8dqo360mNdxgXb3Ks5X5u2H3LLRR3Kp09VWd2MUeu0V7T1h83ifx+0apuuy8UjMHGuJEa1FVD6pT1O1pR9Hd93sk8Am6LY9remz+5IqlYM8Ow89/CEONvRW2mz2njhsLuah/Hex9X2Ajje8qPbjG018KDjjIirp31NZb/qtIaigiRQQPW2z5M6EGnCtk/LX4/bFOdEFkYBeRtA2tBnmP6MBRm+8D6BEv/YUtlhBUJmVu+vSe x-ms-office365-filtering-correlation-id: 2abadb97-1f36-44d2-6466-08d61ec37af6 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(7021125)(8989299)(4534165)(7022125)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:DB6PR0902MB1941; x-ms-traffictypediagnostic: DB6PR0902MB1941: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3231355)(944501410)(52105095)(3002001)(93006095)(93001095)(10201501046)(149027)(150027)(6041310)(2016111802025)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(6043046)(201708071742011)(7699051); SRVR:DB6PR0902MB1941; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0902MB1941; x-forefront-prvs: 0801F2E62B x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(346002)(366004)(136003)(39830400003)(396003)(376002)(199004)(189003)(8676002)(105586002)(386003)(476003)(5660300001)(2616005)(6436002)(446003)(6486002)(11346002)(4326008)(2351001)(53936002)(2501003)(71200400001)(71190400001)(102836004)(3846002)(68736007)(107886003)(486006)(7736002)(97736004)(66066001)(6512007)(5640700003)(6916009)(2906002)(305945005)(1857600001)(26005)(6116002)(106356001)(316002)(86362001)(1730700003)(71446004)(6506007)(25786009)(508600001)(186003)(81156014)(256004)(81166006)(5250100002)(52116002)(14444005)(76176011)(36756003)(99286004)(8936002)(2900100001)(14454004); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0902MB1941; H:DB6PR0902MB1829.eurprd09.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: cgstowernetworks.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 3c6/trroaCXElCsyEvNMtToZQP2LcVaIfpoVsCywZNeAx3e54kKat+5+v5YOi3qGJxl4Ny5ZAvh966O8WRPEY0kmIOmPUoU0fiksCAtRkIH38g8MS0NE0l09Kif5Y6BDVYpNzazN4Z7k8653FjGlLJE+JCA7y8fIcKUpuC/iOkbUYCDsuM34+ly4CLN/b8jHCkRu8Kf9/B1jM3na4p547OLtS15JBa0yCpOOn/TJqHp9D4JYCp9I+JoLOx/JoglHtjcO8NWD43P9HFaVFRUHWV7vPBXrnoS7cKdtI2JUD3XAmkhXiWsaOVrd9jMHQUrvHUnI5oFsln1Ewo43UgpjcgLvI9io9idryFuwuV5/YYQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: <17078D35D4225B4BAEA3C59FC4D88770@eurprd09.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: cgstowernetworks.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2abadb97-1f36-44d2-6466-08d61ec37af6 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2018 06:37:05.5865 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fc9e9498-07e8-4b82-b4cf-365bba23cbbf X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0902MB1941 Subject: [dpdk-dev] [PATCH] vmxnet3: stats_reset implementation 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" 'stats_reset()' callback was missing because the device backend doesn’t support it. This commit adds a workaround to this and implements the callback by taking a snapshot of the stats (SNAPSHOT) each time 'stats_reset()' is called. When getting stats with 'stats_get()', hw stats which always increase reduce SNAPSHOT stats. That's how we get the "real" stats since the last 'stats_reset()'. Signed-off-by: yogev ch Acked-by: Yong Wang --- drivers/net/vmxnet3/vmxnet3_ethdev.c | 78 ++++++++++++++++++++++++++++++++++-- drivers/net/vmxnet3/vmxnet3_ethdev.h | 3 ++ 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index 2613cd1..2348300 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -78,6 +78,7 @@ static int vmxnet3_dev_link_update(struct rte_eth_dev *dev, static void vmxnet3_hw_stats_save(struct vmxnet3_hw *hw); static int vmxnet3_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); +static void vmxnet3_dev_stats_reset(struct rte_eth_dev *dev); static int vmxnet3_dev_xstats_get_names(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats, unsigned int n); @@ -120,6 +121,7 @@ static int vmxnet3_mac_addr_set(struct rte_eth_dev *dev, .stats_get = vmxnet3_dev_stats_get, .xstats_get_names = vmxnet3_dev_xstats_get_names, .xstats_get = vmxnet3_dev_xstats_get, + .stats_reset = vmxnet3_dev_stats_reset, .mac_addr_set = vmxnet3_mac_addr_set, .dev_infos_get = vmxnet3_dev_info_get, .dev_supported_ptypes_get = vmxnet3_dev_supported_ptypes_get, @@ -335,6 +337,10 @@ struct vmxnet3_xstats_name_off { memset(hw->saved_tx_stats, 0, sizeof(hw->saved_tx_stats)); memset(hw->saved_rx_stats, 0, sizeof(hw->saved_rx_stats)); + /* clear snapshot stats */ + memset(hw->snapshot_tx_stats, 0, sizeof(hw->snapshot_tx_stats)); + memset(hw->snapshot_rx_stats, 0, sizeof(hw->snapshot_rx_stats)); + /* set the initial link status */ memset(&link, 0, sizeof(link)); link.link_duplex = ETH_LINK_FULL_DUPLEX; @@ -890,7 +896,49 @@ static int eth_vmxnet3_pci_remove(struct rte_pci_device *pci_dev) VMXNET3_UPDATE_RX_STAT(hw, q, pktsRxError, res); VMXNET3_UPDATE_RX_STAT(hw, q, pktsRxOutOfBuf, res); -#undef VMXNET3_UPDATE_RX_STATS +#undef VMXNET3_UPDATE_RX_STAT +} + +static void +vmxnet3_tx_stats_get(struct vmxnet3_hw *hw, unsigned int q, + struct UPT1_TxStats *res) +{ + vmxnet3_hw_tx_stats_get(hw, q, res); + +#define VMXNET3_REDUCE_SNAPSHOT_TX_STAT(h, i, f, r) \ + ((r)->f -= (h)->snapshot_tx_stats[(i)].f) + + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, ucastPktsTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, mcastPktsTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, bcastPktsTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, ucastBytesTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, mcastBytesTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, bcastBytesTxOK, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, pktsTxError, res); + VMXNET3_REDUCE_SNAPSHOT_TX_STAT(hw, q, pktsTxDiscard, res); + +#undef VMXNET3_REDUCE_SNAPSHOT_TX_STAT +} + +static void +vmxnet3_rx_stats_get(struct vmxnet3_hw *hw, unsigned int q, + struct UPT1_RxStats *res) +{ + vmxnet3_hw_rx_stats_get(hw, q, res); + +#define VMXNET3_REDUCE_SNAPSHOT_RX_STAT(h, i, f, r) \ + ((r)->f -= (h)->snapshot_rx_stats[(i)].f) + + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, ucastPktsRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, mcastPktsRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, bcastPktsRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, ucastBytesRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, mcastBytesRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, bcastBytesRxOK, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, pktsRxError, res); + VMXNET3_REDUCE_SNAPSHOT_RX_STAT(hw, q, pktsRxOutOfBuf, res); + +#undef VMXNET3_REDUCE_SNAPSHOT_RX_STAT } static void @@ -1005,7 +1053,7 @@ static int eth_vmxnet3_pci_remove(struct rte_pci_device *pci_dev) RTE_BUILD_BUG_ON(RTE_ETHDEV_QUEUE_STAT_CNTRS < VMXNET3_MAX_TX_QUEUES); for (i = 0; i < hw->num_tx_queues; i++) { - vmxnet3_hw_tx_stats_get(hw, i, &txStats); + vmxnet3_tx_stats_get(hw, i, &txStats); stats->q_opackets[i] = txStats.ucastPktsTxOK + txStats.mcastPktsTxOK + @@ -1022,7 +1070,7 @@ static int eth_vmxnet3_pci_remove(struct rte_pci_device *pci_dev) RTE_BUILD_BUG_ON(RTE_ETHDEV_QUEUE_STAT_CNTRS < VMXNET3_MAX_RX_QUEUES); for (i = 0; i < hw->num_rx_queues; i++) { - vmxnet3_hw_rx_stats_get(hw, i, &rxStats); + vmxnet3_rx_stats_get(hw, i, &rxStats); stats->q_ipackets[i] = rxStats.ucastPktsRxOK + rxStats.mcastPktsRxOK + @@ -1044,6 +1092,30 @@ static int eth_vmxnet3_pci_remove(struct rte_pci_device *pci_dev) } static void +vmxnet3_dev_stats_reset(struct rte_eth_dev *dev) +{ + unsigned int i; + struct vmxnet3_hw *hw = dev->data->dev_private; + struct UPT1_TxStats txStats; + struct UPT1_RxStats rxStats; + + VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS); + + RTE_BUILD_BUG_ON(RTE_ETHDEV_QUEUE_STAT_CNTRS < VMXNET3_MAX_TX_QUEUES); + + for (i = 0; i < hw->num_tx_queues; i++) { + vmxnet3_hw_tx_stats_get(hw, i, &txStats); + memcpy(&hw->snapshot_tx_stats[i], &txStats, + sizeof(hw->snapshot_tx_stats[0])); + } + for (i = 0; i < hw->num_rx_queues; i++) { + vmxnet3_hw_rx_stats_get(hw, i, &rxStats); + memcpy(&hw->snapshot_rx_stats[i], &rxStats, + sizeof(hw->snapshot_rx_stats[0])); + } +} + +static void vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused, struct rte_eth_dev_info *dev_info) { diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.h b/drivers/net/vmxnet3/vmxnet3_ethdev.h index d3f2b35..5bc3a84 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.h +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.h @@ -98,6 +98,9 @@ struct vmxnet3_hw { #define VMXNET3_VFT_TABLE_SIZE (VMXNET3_VFT_SIZE * sizeof(uint32_t)) UPT1_TxStats saved_tx_stats[VMXNET3_MAX_TX_QUEUES]; UPT1_RxStats saved_rx_stats[VMXNET3_MAX_RX_QUEUES]; + + UPT1_TxStats snapshot_tx_stats[VMXNET3_MAX_TX_QUEUES]; + UPT1_RxStats snapshot_rx_stats[VMXNET3_MAX_RX_QUEUES]; }; #define VMXNET3_REV_3 2 /* Vmxnet3 Rev. 3 */