From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id ABC83A00BE; Mon, 25 Apr 2022 14:07:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5569641109; Mon, 25 Apr 2022 14:07:07 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 1E79C40E78 for ; Mon, 25 Apr 2022 14:07:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1650888425; x=1682424425; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=VmaD3h30Z+k6/pbcGYYj7c3zvQsHr2+bXcT3GtWy8/k=; b=AVWsZQsRywaJyrAtvAOaKU/w61D0oflciUcUI+rRvYWzF/dMXiq8W9YU 6rvEJvwnA2JuQnozVrBTWMVKLRTDH+8gEUJkYuxGG1ShryyF3hko5xl8U wurVPwqXuIK1kx3Lu8Fem7YGsq+xfgjHOrJvXhHZL4jDKtoooZpCvSmQW DRY7F+6rMSE4TgzP4YrjdQJBaiGwTCYiit7CGyulSSY2E8ZPeQRa9C5ge To8sib7SbVwcUDj0jK6Yv+QQmohAlFUn560uYOMdemqs2m0bY+pSE0LFU nu6HVAucUQajiPPWzYD6VDn8UFWmd8C4vVfCmn74rD6ycrJ1BdhRmNRNm w==; X-IronPort-AV: E=McAfee;i="6400,9594,10327"; a="247154501" X-IronPort-AV: E=Sophos;i="5.90,288,1643702400"; d="scan'208";a="247154501" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2022 05:07:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,288,1643702400"; d="scan'208";a="628020618" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by fmsmga004.fm.intel.com with ESMTP; 25 Apr 2022 05:07:03 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 25 Apr 2022 05:07:03 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 25 Apr 2022 05:07:03 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.101) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 25 Apr 2022 05:06:38 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FN2w1w99uRCd7DIp8U4ITzU4t40VT4XA5June51ObzaHs1OuQWcbVRDWJPdzTxNh1dVowteHojvxSugJ/UlE/xSc2yCvR3Hvnu+eZThJZvOrE7IZOXeEOo+7MtNdbTPxLLXgnIoSeuN1j0PZsqtyk/KRwXdKIBPt6aMyGX/96Kz+j1ZPgRoYoFp3xQv8kVX40FjBe32JVS1hbUdxSGTOhaBdK2C/lCPaJZ0957yGoWVK1JKH417Wqee6bCP7rYJ99D12WJDf5hhFsrJiwg7F3Pdf5Wqi+CjnK3ezd9G5JpNKkGN+gUv3AaEtPQXOFF0VsZnPKOlV4WlL5kUDKdonhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=c/v/vZG51giYwmSh3FNijMpSJW5TmzvDsRFa5EfFxZg=; b=OysJN7n8sNC37aN6wFh7HbRpZuDC29S54exSDuKYsAs/+l9cF0ebdSiL2nULr8PUa1rIIRem7+zbkbZSISlHtegX1g7ovNbF/uXOdxykacksx/Hqzx8OcIhzZ7PfJLD/BKn0BWt7kF/m63zEnc0tgrZ9iz+q0PgAsxbZ4XJATAO7jSCEMsb58ypNlJ/Bmsufq8v6nZyiEjVcvH4xnVbRmIiawy5ByIHRU0Lvh6cnHTkm+qI3JKeg5xBTyTT146pMF0GbjueWmTuEpJlWd5YlhgPV28w3v0zQcoq7P8OXRRRlaauLbp8rnGDk5XyGikEEz6ioIpfWwXAW8buMX1qC4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN6PR11MB3504.namprd11.prod.outlook.com (2603:10b6:805:d0::17) by CO1PR11MB5202.namprd11.prod.outlook.com (2603:10b6:303:97::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Mon, 25 Apr 2022 12:06:36 +0000 Received: from SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::4d1d:6453:f00c:cf8a]) by SN6PR11MB3504.namprd11.prod.outlook.com ([fe80::4d1d:6453:f00c:cf8a%6]) with mapi id 15.20.5186.020; Mon, 25 Apr 2022 12:06:36 +0000 From: "Xia, Chenbo" To: Maxime Coquelin , "dev@dpdk.org" , "david.marchand@redhat.com" , "i.maximets@ovn.org" Subject: RE: [PATCH v2 3/5] net/vhost: move to Vhost library stats API Thread-Topic: [PATCH v2 3/5] net/vhost: move to Vhost library stats API Thread-Index: AQHYP31LuOsL6cxoJ0O71LxxpyG+1q0AuE7A Date: Mon, 25 Apr 2022 12:06:36 +0000 Message-ID: References: <20220324124638.32672-1-maxime.coquelin@redhat.com> <20220324124638.32672-4-maxime.coquelin@redhat.com> In-Reply-To: <20220324124638.32672-4-maxime.coquelin@redhat.com> Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bada54d5-6597-41b0-2525-08da26b40c19 x-ms-traffictypediagnostic: CO1PR11MB5202:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BTjfwQp7U4GnKaGqz5MmZsSP9nzaHK5fr7qPyNHaKv/plAkKBIKizsT+wuBXP5LJOq1kX5PP9FTVgAZNiEHb4t5+shgL/phMLDpIsOx1Ny4eBWHSCLB0E+F/PaEKjXF2NpuaK5Nc2LpOMgvgbFJNUVETQqmW8Y5It/+FMSDcu7HOcgezoeRta7Qe2P7bpZBqAEQM0ecRBJ/WLsT4MvyUSp9XmH3Zyi8IjcbaApDj3YiFPEmV0/qS9GUka2NVPEG97fJOqGLRWs0zMR9Uu2XOSoQAfEKjK7bxGTqEd7KVezdFxTzbZcJc5h7oy5aZze7Aqo5QXnXdltYnKiesRvG7EgvojqclttklrxeO0gSxeQSjSJvFT2DChHGkMrMkwXxu8Ec5vlFZxoVqZAeeOacWa/slgjmBTYx3kRfuaZ9k9qs/kLXiFn4+Zjr6wZS8gy7x2YRgNHqq4kS6sFnt9Co5UNwwimqyPWr9I2jx4oXqZILKzvUK9xwuwlPovPQR6amG3MkNm48LqveYBRRj858ArfiUkoXXudeCjgS+05BmeH6OBA8xBbW4VQe4sYc24NRrzX4xZxjZEdgcI7AOhxFEuKYK1OjQpwQ3wHPW0hkrcX1QdBn9Q1EJWC0oYi20uf2OLxVayckx52MpcInDh/7Soza5vAl/hdTmCkdE5cY8KJigt20BCA2RNczov/NSHAw2TaTa5WgqwMLI3xte0CVm9w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB3504.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(122000001)(82960400001)(55016003)(9686003)(38100700002)(186003)(52536014)(7696005)(8936002)(6506007)(53546011)(33656002)(5660300002)(508600001)(2906002)(30864003)(66946007)(83380400001)(66556008)(76116006)(26005)(8676002)(71200400001)(316002)(86362001)(66446008)(64756008)(66476007)(38070700005)(110136005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?5o6rm69eIDdKi9si85zUMl4I2rcGlG3/RMr7UIe9BgxjtDP2xoqXfFtgzKHo?= =?us-ascii?Q?BGD4rIHpDnz7GM0cOHztEpB6pkPPw5520qYMj+6QHMt3/U+QSJEIX/se6Mef?= =?us-ascii?Q?ihO6d5n98/6KuYFfPsERqvi/VhsT/Sdf/UirG6vMrbFdhUFFKSg4B3LtwC3g?= =?us-ascii?Q?PB5V6Iwj+YiukcythTfv8FTMZdV9XNye51Pn7zBhHw6naSfYqqtczsoJSD+q?= =?us-ascii?Q?MiSIwxp9x8Ssfe8ltR2j8JZrHfAgckSCQuJSTs07VgB13FOrmNp9oZg/+TS/?= =?us-ascii?Q?S2LN7QWdQKlkeJcSB3CNLloX9boghRGqwr2BjsKu7QUPVO64RR8TDgnEj62n?= =?us-ascii?Q?/mt2EaEhMFUHKLpsQTodaJzvWm8A0O5yhW37KDCSuBgoeTuoGLc0SXfqifz0?= =?us-ascii?Q?KVUTpejHw7uAPnZSrkcK2SLZ5VFbb2gkvu4/QLLNO3zEQvmM2xSfOfAIQm4u?= =?us-ascii?Q?ttJtqmBmczBf6AUHpzxqR+yXQ1s9rec288W2b6OCRrDEEAWkPdlvMmRgsAi+?= =?us-ascii?Q?k+RvUflHCy147QwnqE8jrte6/wcgSF0p7hzwaq0ajx06lBXP8TqarDQ5mWl1?= =?us-ascii?Q?ljNWZfAHznFRD5jMjy18pYRojN7t7g37JcYjnPwUdaEzNpw0Uj3yytA4bEX9?= =?us-ascii?Q?g+JpT7f6cReNlT1QgP+TeIGM+MhDUe28YMBAu17DYYwYrfejmLEM7V2ScdB8?= =?us-ascii?Q?0mYJU8o8f9wlK72myn7LCD1O/r1s1EPUlNsRio/cCrFBRhYF8W3b+u1mRQZS?= =?us-ascii?Q?ExO73QlAUXTEE7XkBMNGNn0eQlSo0uXJUqO1iTOLxqzh3KFcY8KVum1pA41L?= =?us-ascii?Q?SpqMaQUO34EHLaIpu7YySW7TPXlsb76qnf8mFAgcc4m7k7D0Evr30L1FpTFm?= =?us-ascii?Q?n5TclHfxYJJC/PFd5shb/+qYL6RU+hx5Vt0HFoJOKPQkT9ste9Uim14A3bcN?= =?us-ascii?Q?Yml0Ga1DVKMFKMBCLYWoiUZHj++3OnVT9rJKlNBCLhUUObmoO4yTW/Uemh2s?= =?us-ascii?Q?T2D8wDZ/08Cl4I0FTP6CfmG8trogul8f8WcghZVthCGrskpttE7tBkdx5aOl?= =?us-ascii?Q?GGRcc41OMWk5Ijj5BHu1qlSkj9n4m3Ogz8gr3H+bQ+WswMSAeqYWvf/d3eGU?= =?us-ascii?Q?0JX1RLk8A9dk6A64tDZWkY8yADWyniGeDQ9cjAN3M5BJm8AzTjSwvtOnF7FL?= =?us-ascii?Q?Rs5Uu0vqNM7wpKT8NNHdIMfPxhQfg2JyRi90xC0OhcPAIjRLKfbo+XTjibwT?= =?us-ascii?Q?NCsJce1d60rgb43RAAXt008MkPYI+WYGCo5eNFWpv8qTAXc6dyUq0PVEywcS?= =?us-ascii?Q?1mKu0LRfpUpoZIoOF1GYxmRdYKwghHRWiunfIIkdNGB+rc8YpPlbOgVrOrxL?= =?us-ascii?Q?Y0Ms/0UgP2umoJXtCBtiBaUYu+MBLKPFBNj6Vny2RADuapRU7ut0p6uhspuJ?= =?us-ascii?Q?kTFW9ksC1R0GbNXK/Z6SCZPm5kIZaHKGSb7YCPj8YQmBlTLfe4CTgpagJCOy?= =?us-ascii?Q?iSythe9jkJ7J9ylsFU5taX0hTnXeYvfgaCHDsAoxrOTT4ZQhWonDFzY8dhwt?= =?us-ascii?Q?7exA2iQ/y/YswuapuAwrKWPZUyZnbLaiKvNv1IwvQ0l8jir9HvvR9+myZdtN?= =?us-ascii?Q?aaYlpbgL46ULWwzdhhou/AaJPAZN0Onatcm0/8B+h8WNgyD13Em5i7mdyMjM?= =?us-ascii?Q?ZCsidsXsISctZ1zn5AsUSzTe6aAU8gyimer7rn4XsQCnsdtV0HGLJEJ4Z05B?= =?us-ascii?Q?/JNaVnPiWQ=3D=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3504.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bada54d5-6597-41b0-2525-08da26b40c19 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2022 12:06:36.5133 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +VJzDt0EdUMLOiMyIKrDnLjMkJ7lKQXUwW9baW7qjlb8bA4tShZRsgqKhnGbXoJ+fFkJpX5dJ9i4ZYDwv2W8aQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB5202 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Hi Maxime, > -----Original Message----- > From: Maxime Coquelin > Sent: Thursday, March 24, 2022 8:47 PM > To: dev@dpdk.org; Xia, Chenbo ; > david.marchand@redhat.com; i.maximets@ovn.org > Cc: Maxime Coquelin > Subject: [PATCH v2 3/5] net/vhost: move to Vhost library stats API >=20 > Now that we have Vhost statistics APIs, this patch replaces > Vhost PMD extented statistics implementation with calls extented -> extended > to the new API. It will enable getting more statistics for > counters that cannot be implmented at the PMD level. implmented -> implemented=20 >=20 > Signed-off-by: Maxime Coquelin > --- > drivers/net/vhost/rte_eth_vhost.c | 348 +++++++++++------------------- > 1 file changed, 120 insertions(+), 228 deletions(-) >=20 > diff --git a/drivers/net/vhost/rte_eth_vhost.c > b/drivers/net/vhost/rte_eth_vhost.c > index 070f0e6dfd..bac1c0acba 100644 > --- a/drivers/net/vhost/rte_eth_vhost.c > +++ b/drivers/net/vhost/rte_eth_vhost.c > @@ -59,33 +59,10 @@ static struct rte_ether_addr base_eth_addr =3D { > } > }; >=20 > -enum vhost_xstats_pkts { > - VHOST_UNDERSIZE_PKT =3D 0, > - VHOST_64_PKT, > - VHOST_65_TO_127_PKT, > - VHOST_128_TO_255_PKT, > - VHOST_256_TO_511_PKT, > - VHOST_512_TO_1023_PKT, > - VHOST_1024_TO_1522_PKT, > - VHOST_1523_TO_MAX_PKT, > - VHOST_BROADCAST_PKT, > - VHOST_MULTICAST_PKT, > - VHOST_UNICAST_PKT, > - VHOST_PKT, > - VHOST_BYTE, > - VHOST_MISSED_PKT, > - VHOST_ERRORS_PKT, > - VHOST_ERRORS_FRAGMENTED, > - VHOST_ERRORS_JABBER, > - VHOST_UNKNOWN_PROTOCOL, > - VHOST_XSTATS_MAX, > -}; > - > struct vhost_stats { > uint64_t pkts; > uint64_t bytes; > uint64_t missed_pkts; > - uint64_t xstats[VHOST_XSTATS_MAX]; > }; >=20 > struct vhost_queue { > @@ -140,138 +117,92 @@ struct rte_vhost_vring_state { >=20 > static struct rte_vhost_vring_state *vring_states[RTE_MAX_ETHPORTS]; >=20 > -#define VHOST_XSTATS_NAME_SIZE 64 > - > -struct vhost_xstats_name_off { > - char name[VHOST_XSTATS_NAME_SIZE]; > - uint64_t offset; > -}; > - > -/* [rx]_is prepended to the name string here */ > -static const struct vhost_xstats_name_off vhost_rxport_stat_strings[] = =3D { > - {"good_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_PKT])}, > - {"total_bytes", > - offsetof(struct vhost_queue, stats.xstats[VHOST_BYTE])}, > - {"missed_pkts", > - offsetof(struct vhost_queue, stats.xstats[VHOST_MISSED_PKT])}, > - {"broadcast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_BROADCAST_PKT])}, > - {"multicast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_MULTICAST_PKT])}, > - {"unicast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_UNICAST_PKT])}, > - {"undersize_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_UNDERSIZE_PKT])}, > - {"size_64_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_64_PKT])}, > - {"size_65_to_127_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_65_TO_127_PKT])}, > - {"size_128_to_255_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_128_TO_255_PKT])}, > - {"size_256_to_511_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_256_TO_511_PKT])}, > - {"size_512_to_1023_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_512_TO_1023_PKT])}, > - {"size_1024_to_1522_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_1024_TO_1522_PKT])}, > - {"size_1523_to_max_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_1523_TO_MAX_PKT])}, > - {"errors_with_bad_CRC", > - offsetof(struct vhost_queue, stats.xstats[VHOST_ERRORS_PKT])}, > - {"fragmented_errors", > - offsetof(struct vhost_queue, > stats.xstats[VHOST_ERRORS_FRAGMENTED])}, > - {"jabber_errors", > - offsetof(struct vhost_queue, stats.xstats[VHOST_ERRORS_JABBER])}, > - {"unknown_protos_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_UNKNOWN_PROTOCOL])}, > -}; > - > -/* [tx]_ is prepended to the name string here */ > -static const struct vhost_xstats_name_off vhost_txport_stat_strings[] = =3D { > - {"good_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_PKT])}, > - {"total_bytes", > - offsetof(struct vhost_queue, stats.xstats[VHOST_BYTE])}, > - {"missed_pkts", > - offsetof(struct vhost_queue, stats.xstats[VHOST_MISSED_PKT])}, > - {"broadcast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_BROADCAST_PKT])}, > - {"multicast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_MULTICAST_PKT])}, > - {"unicast_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_UNICAST_PKT])}, > - {"undersize_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_UNDERSIZE_PKT])}, > - {"size_64_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_64_PKT])}, > - {"size_65_to_127_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_65_TO_127_PKT])}, > - {"size_128_to_255_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_128_TO_255_PKT])}, > - {"size_256_to_511_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_256_TO_511_PKT])}, > - {"size_512_to_1023_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_512_TO_1023_PKT])}, > - {"size_1024_to_1522_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_1024_TO_1522_PKT])}, > - {"size_1523_to_max_packets", > - offsetof(struct vhost_queue, stats.xstats[VHOST_1523_TO_MAX_PKT])}, > - {"errors_with_bad_CRC", > - offsetof(struct vhost_queue, stats.xstats[VHOST_ERRORS_PKT])}, > -}; > - > -#define VHOST_NB_XSTATS_RXPORT (sizeof(vhost_rxport_stat_strings) / \ > - sizeof(vhost_rxport_stat_strings[0])) > - > -#define VHOST_NB_XSTATS_TXPORT (sizeof(vhost_txport_stat_strings) / \ > - sizeof(vhost_txport_stat_strings[0])) > - > static int > vhost_dev_xstats_reset(struct rte_eth_dev *dev) > { > - struct vhost_queue *vq =3D NULL; > - unsigned int i =3D 0; > + struct vhost_queue *vq; > + int ret, i; >=20 > for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > vq =3D dev->data->rx_queues[i]; > - if (!vq) > - continue; > - memset(&vq->stats, 0, sizeof(vq->stats)); > + ret =3D rte_vhost_vring_stats_reset(vq->vid, vq->virtqueue_id); > + if (ret < 0) > + return ret; > } > + > for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > vq =3D dev->data->tx_queues[i]; > - if (!vq) > - continue; > - memset(&vq->stats, 0, sizeof(vq->stats)); > + ret =3D rte_vhost_vring_stats_reset(vq->vid, vq->virtqueue_id); > + if (ret < 0) > + return ret; > } >=20 > return 0; > } >=20 > static int > -vhost_dev_xstats_get_names(struct rte_eth_dev *dev __rte_unused, > +vhost_dev_xstats_get_names(struct rte_eth_dev *dev, > struct rte_eth_xstat_name *xstats_names, > - unsigned int limit __rte_unused) > + unsigned int limit) > { > - unsigned int t =3D 0; > - int count =3D 0; > - int nstats =3D VHOST_NB_XSTATS_RXPORT + VHOST_NB_XSTATS_TXPORT; > + struct rte_vhost_stat_name *name; > + struct vhost_queue *vq; > + int ret, i, count =3D 0, nstats =3D 0; > + > + for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > + vq =3D dev->data->rx_queues[i]; > + ret =3D rte_vhost_vring_stats_get_names(vq->vid, vq- > >virtqueue_id, NULL, 0); > + if (ret < 0) > + return ret; >=20 > - if (!xstats_names) > + nstats +=3D ret; > + } > + > + for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > + vq =3D dev->data->tx_queues[i]; > + ret =3D rte_vhost_vring_stats_get_names(vq->vid, vq- > >virtqueue_id, NULL, 0); > + if (ret < 0) > + return ret; > + > + nstats +=3D ret; > + } > + > + if (!xstats_names || limit < (unsigned int)nstats) > return nstats; > - for (t =3D 0; t < VHOST_NB_XSTATS_RXPORT; t++) { > - snprintf(xstats_names[count].name, > - sizeof(xstats_names[count].name), > - "rx_%s", vhost_rxport_stat_strings[t].name); > - count++; > - } > - for (t =3D 0; t < VHOST_NB_XSTATS_TXPORT; t++) { > - snprintf(xstats_names[count].name, > - sizeof(xstats_names[count].name), > - "tx_%s", vhost_txport_stat_strings[t].name); > - count++; > + > + name =3D calloc(nstats, sizeof(*name)); > + if (!name) > + return -1; > + > + for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > + vq =3D dev->data->rx_queues[i]; > + ret =3D rte_vhost_vring_stats_get_names(vq->vid, vq- > >virtqueue_id, > + name + count, nstats - count); > + if (ret < 0) { > + free(name); > + return ret; > + } > + > + count +=3D ret; > } > + > + for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > + vq =3D dev->data->tx_queues[i]; > + ret =3D rte_vhost_vring_stats_get_names(vq->vid, vq- > >virtqueue_id, > + name + count, nstats - count); > + if (ret < 0) { > + free(name); > + return ret; > + } > + > + count +=3D ret; > + } > + > + for (i =3D 0; i < count; i++) > + strncpy(xstats_names[i].name, name[i].name, > RTE_ETH_XSTATS_NAME_SIZE); > + > + free(name); > + > return count; > } >=20 > @@ -279,86 +210,63 @@ static int > vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat > *xstats, > unsigned int n) > { > - unsigned int i; > - unsigned int t; > - unsigned int count =3D 0; > - struct vhost_queue *vq =3D NULL; > - unsigned int nxstats =3D VHOST_NB_XSTATS_RXPORT + > VHOST_NB_XSTATS_TXPORT; > - > - if (n < nxstats) > - return nxstats; > - > - for (t =3D 0; t < VHOST_NB_XSTATS_RXPORT; t++) { > - xstats[count].value =3D 0; > - for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > - vq =3D dev->data->rx_queues[i]; > - if (!vq) > - continue; > - xstats[count].value +=3D > - *(uint64_t *)(((char *)vq) > - + vhost_rxport_stat_strings[t].offset); > - } > - xstats[count].id =3D count; > - count++; > + struct rte_vhost_stat *stats; > + struct vhost_queue *vq; > + int ret, i, count =3D 0, nstats =3D 0; > + > + for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > + vq =3D dev->data->rx_queues[i]; > + ret =3D rte_vhost_vring_stats_get(vq->vid, vq->virtqueue_id, > NULL, 0); > + if (ret < 0) > + return ret; > + > + nstats +=3D ret; > } > - for (t =3D 0; t < VHOST_NB_XSTATS_TXPORT; t++) { > - xstats[count].value =3D 0; > - for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > - vq =3D dev->data->tx_queues[i]; > - if (!vq) > - continue; > - xstats[count].value +=3D > - *(uint64_t *)(((char *)vq) > - + vhost_txport_stat_strings[t].offset); > - } > - xstats[count].id =3D count; > - count++; > + > + for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > + vq =3D dev->data->tx_queues[i]; > + ret =3D rte_vhost_vring_stats_get(vq->vid, vq->virtqueue_id, > NULL, 0); > + if (ret < 0) > + return ret; > + > + nstats +=3D ret; > } > - return count; > -} >=20 > -static inline void > -vhost_count_xcast_packets(struct vhost_queue *vq, > - struct rte_mbuf *mbuf) > -{ > - struct rte_ether_addr *ea =3D NULL; > - struct vhost_stats *pstats =3D &vq->stats; > - > - ea =3D rte_pktmbuf_mtod(mbuf, struct rte_ether_addr *); > - if (rte_is_multicast_ether_addr(ea)) { > - if (rte_is_broadcast_ether_addr(ea)) > - pstats->xstats[VHOST_BROADCAST_PKT]++; > - else > - pstats->xstats[VHOST_MULTICAST_PKT]++; > - } else { > - pstats->xstats[VHOST_UNICAST_PKT]++; > + if (!xstats || n < (unsigned int)nstats) > + return nstats; > + > + stats =3D calloc(nstats, sizeof(*stats)); > + if (!stats) > + return -1; > + > + for (i =3D 0; i < dev->data->nb_rx_queues; i++) { > + vq =3D dev->data->rx_queues[i]; > + ret =3D rte_vhost_vring_stats_get(vq->vid, vq->virtqueue_id, > + stats + count, nstats - count); > + if (ret < 0) > + return ret; Should free stats here. > + > + count +=3D ret; > } > -} >=20 > -static __rte_always_inline void > -vhost_update_single_packet_xstats(struct vhost_queue *vq, struct rte_mbu= f > *buf) > -{ > - uint32_t pkt_len =3D 0; > - uint64_t index; > - struct vhost_stats *pstats =3D &vq->stats; > - > - pstats->xstats[VHOST_PKT]++; > - pkt_len =3D buf->pkt_len; > - if (pkt_len =3D=3D 64) { > - pstats->xstats[VHOST_64_PKT]++; > - } else if (pkt_len > 64 && pkt_len < 1024) { > - index =3D (sizeof(pkt_len) * 8) > - - __builtin_clz(pkt_len) - 5; > - pstats->xstats[index]++; > - } else { > - if (pkt_len < 64) > - pstats->xstats[VHOST_UNDERSIZE_PKT]++; > - else if (pkt_len <=3D 1522) > - pstats->xstats[VHOST_1024_TO_1522_PKT]++; > - else if (pkt_len > 1522) > - pstats->xstats[VHOST_1523_TO_MAX_PKT]++; > - } > - vhost_count_xcast_packets(vq, buf); > + for (i =3D 0; i < dev->data->nb_tx_queues; i++) { > + vq =3D dev->data->tx_queues[i]; > + ret =3D rte_vhost_vring_stats_get(vq->vid, vq->virtqueue_id, > + stats + count, nstats - count); > + if (ret < 0) > + return ret; Ditto Btw, when replying, I noticed I replied to v1 for 2nd patch.. sorry for tha= t... With above fixed: Reviewed-by: Chenbo Xia