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 23466A0542; Fri, 4 Nov 2022 13:03:44 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D8DD642D1A; Fri, 4 Nov 2022 13:03:43 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 8F72142D0E for ; Fri, 4 Nov 2022 13:03:42 +0100 (CET) Received: from dkrd2.smartsharesys.local ([192.168.4.12]) by smartserver.smartsharesystems.com with Microsoft SMTPSVC(6.0.3790.4675); Fri, 4 Nov 2022 13:03:41 +0100 From: =?UTF-8?q?Morten=20Br=C3=B8rup?= To: olivier.matz@6wind.com, andrew.rybchenko@oktetlabs.ru, mattias.ronnblom@ericsson.com, stephen@networkplumber.org, jerinj@marvell.com, bruce.richardson@intel.com Cc: hofors@lysator.liu.se, thomas@monjalon.net, dev@dpdk.org, =?UTF-8?q?Morten=20Br=C3=B8rup?= Subject: [PATCH v4 2/3] mempool: add stats for unregistered non-EAL threads Date: Fri, 4 Nov 2022 13:03:28 +0100 Message-Id: <20221104120329.1219-2-mb@smartsharesystems.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221104120329.1219-1-mb@smartsharesystems.com> References: <20221104111740.330-1-mb@smartsharesystems.com> <20221104120329.1219-1-mb@smartsharesystems.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-OriginalArrivalTime: 04 Nov 2022 12:03:41.0165 (UTC) FILETIME=[7AD579D0:01D8F045] 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 This patch adds statistics for unregistered non-EAL threads, which was previously not included in the statistics. Add one more entry to the stats array, and use the last index for unregistered non-EAL threads. The unregistered non-EAL thread statistics are incremented atomically. In theory, the EAL thread counters should also be accessed atomically to avoid tearing on 32 bit architectures. However, it was decided to avoid the performance cost of using atomic operations, because: 1. these are debug counters, and 2. statistics counters in DPDK are usually incremented non-atomically. v4: * No changes. v3 (feedback from Mattias Rönnblom): * Use correct terminology: Unregistered non-EAL threads. * Use atomic counting for the unregistered non-EAL threads. * Reintroduce the conditional instead of offsetting the index by one. v2: * New. No v1 of this patch in the series. Suggested-by: Stephen Hemminger Signed-off-by: Morten Brørup --- lib/mempool/rte_mempool.c | 2 +- lib/mempool/rte_mempool.h | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c index 62d1ce764e..e6208125e0 100644 --- a/lib/mempool/rte_mempool.c +++ b/lib/mempool/rte_mempool.c @@ -1272,7 +1272,7 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp) #ifdef RTE_LIBRTE_MEMPOOL_STATS rte_mempool_ops_get_info(mp, &info); memset(&sum, 0, sizeof(sum)); - for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { + for (lcore_id = 0; lcore_id < RTE_MAX_LCORE + 1; lcore_id++) { sum.put_bulk += mp->stats[lcore_id].put_bulk; sum.put_objs += mp->stats[lcore_id].put_objs; sum.put_common_pool_bulk += mp->stats[lcore_id].put_common_pool_bulk; diff --git a/lib/mempool/rte_mempool.h b/lib/mempool/rte_mempool.h index d5f7ea99fa..abfe34c05f 100644 --- a/lib/mempool/rte_mempool.h +++ b/lib/mempool/rte_mempool.h @@ -238,8 +238,11 @@ struct rte_mempool { struct rte_mempool_memhdr_list mem_list; /**< List of memory chunks */ #ifdef RTE_LIBRTE_MEMPOOL_STATS - /** Per-lcore statistics. */ - struct rte_mempool_debug_stats stats[RTE_MAX_LCORE]; + /** Per-lcore statistics. + * + * Plus one, for unregistered non-EAL threads. + */ + struct rte_mempool_debug_stats stats[RTE_MAX_LCORE + 1]; #endif } __rte_cache_aligned; @@ -304,11 +307,13 @@ struct rte_mempool { * Number to add to the statistics. */ #ifdef RTE_LIBRTE_MEMPOOL_STATS -#define RTE_MEMPOOL_STAT_ADD(mp, name, n) do { \ - unsigned __lcore_id = rte_lcore_id(); \ - if (__lcore_id < RTE_MAX_LCORE) { \ - mp->stats[__lcore_id].name += n; \ - } \ +#define RTE_MEMPOOL_STAT_ADD(mp, name, n) do { \ + unsigned int __lcore_id = rte_lcore_id(); \ + if (likely(__lcore_id < RTE_MAX_LCORE)) \ + (mp)->stats[__lcore_id].name += n; \ + else \ + __atomic_fetch_add(&((mp)->stats[RTE_MAX_LCORE].name), \ + n, __ATOMIC_RELAXED); \ } while (0) #else #define RTE_MEMPOOL_STAT_ADD(mp, name, n) do {} while (0) -- 2.17.1