From patchwork Tue May 9 09:24:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jie Hai X-Patchwork-Id: 126797 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 03B4D42AA2; Tue, 9 May 2023 11:27:49 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1998F42D1D; Tue, 9 May 2023 11:27:46 +0200 (CEST) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id 14148410FA for ; Tue, 9 May 2023 11:27:43 +0200 (CEST) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.53]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4QFt4g4X7Xz18LKl; Tue, 9 May 2023 17:23:31 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 9 May 2023 17:27:40 +0800 From: Jie Hai To: Honnappa Nagarahalli , Konstantin Ananyev CC: , Subject: [PATCH v6 1/3] ring: fix unmatched type definition and usage Date: Tue, 9 May 2023 17:24:57 +0800 Message-ID: <20230509092459.20140-2-haijie1@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20230509092459.20140-1-haijie1@huawei.com> References: <20230509012907.3817-1-haijie1@huawei.com> <20230509092459.20140-1-haijie1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemi500020.china.huawei.com (7.221.188.8) X-CFilter-Loop: Reflected 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 Field 'flags' of struct rte_ring is defined as int type. However, it is used as unsigned int. To ensure consistency, change the type of flags to unsigned int. Since these two types has the same byte size, this change is not an ABI change. Fixes: af75078fece3 ("first public release") Signed-off-by: Jie Hai Acked-by: Konstantin Ananyev Acked-by: Chengwen Feng Acked-by: Morten Brørup --- lib/ring/rte_ring_core.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ring/rte_ring_core.h b/lib/ring/rte_ring_core.h index 82b237091b71..1c809abeb531 100644 --- a/lib/ring/rte_ring_core.h +++ b/lib/ring/rte_ring_core.h @@ -120,7 +120,7 @@ struct rte_ring_hts_headtail { struct rte_ring { char name[RTE_RING_NAMESIZE] __rte_cache_aligned; /**< Name of the ring. */ - int flags; /**< Flags supplied at creation. */ + uint32_t flags; /**< Flags supplied at creation. */ const struct rte_memzone *memzone; /**< Memzone, if any, containing the rte_ring */ uint32_t size; /**< Size of ring. */ From patchwork Tue May 9 09:24:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jie Hai X-Patchwork-Id: 126798 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 385C842AA2; Tue, 9 May 2023 11:27:54 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 36A6B42D33; Tue, 9 May 2023 11:27:47 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 57D0D410FC for ; Tue, 9 May 2023 11:27:43 +0200 (CEST) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.55]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4QFt4g2H8CzpVDD; Tue, 9 May 2023 17:23:31 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 9 May 2023 17:27:41 +0800 From: Jie Hai To: Honnappa Nagarahalli , Konstantin Ananyev CC: , Subject: [PATCH v6 2/3] ring: add telemetry cmd to list rings Date: Tue, 9 May 2023 17:24:58 +0800 Message-ID: <20230509092459.20140-3-haijie1@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20230509092459.20140-1-haijie1@huawei.com> References: <20230509012907.3817-1-haijie1@huawei.com> <20230509092459.20140-1-haijie1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemi500020.china.huawei.com (7.221.188.8) X-CFilter-Loop: Reflected 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 Add a telemetry command to list the rings used in the system. An example using this command is shown below: --> /ring/list { "/ring/list": [ "HT_0000:7d:00.2", "MP_mb_pool_0" ] } Signed-off-by: Jie Hai Acked-by: Konstantin Ananyev Reviewed-by: Honnappa Nagarahalli Acked-by: Huisong Li Acked-by: Chengwen Feng Acked-by: Morten Brørup --- lib/ring/meson.build | 1 + lib/ring/rte_ring.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/ring/meson.build b/lib/ring/meson.build index c20685c689ac..7fca958ed7fa 100644 --- a/lib/ring/meson.build +++ b/lib/ring/meson.build @@ -18,3 +18,4 @@ indirect_headers += files ( 'rte_ring_rts.h', 'rte_ring_rts_elem_pvt.h', ) +deps += ['telemetry'] diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c index 8ed455043dee..0e83d0099363 100644 --- a/lib/ring/rte_ring.c +++ b/lib/ring/rte_ring.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "rte_ring.h" #include "rte_ring_elem.h" @@ -420,3 +421,42 @@ rte_ring_lookup(const char *name) return r; } + +static void +ring_walk(void (*func)(struct rte_ring *, void *), void *arg) +{ + struct rte_ring_list *ring_list; + struct rte_tailq_entry *tailq_entry; + + ring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list); + rte_mcfg_tailq_read_lock(); + + TAILQ_FOREACH(tailq_entry, ring_list, next) { + (*func)((struct rte_ring *) tailq_entry->data, arg); + } + + rte_mcfg_tailq_read_unlock(); +} + +static void +ring_list_cb(struct rte_ring *r, void *arg) +{ + struct rte_tel_data *d = (struct rte_tel_data *)arg; + + rte_tel_data_add_array_string(d, r->name); +} + +static int +ring_handle_list(const char *cmd __rte_unused, + const char *params __rte_unused, struct rte_tel_data *d) +{ + rte_tel_data_start_array(d, RTE_TEL_STRING_VAL); + ring_walk(ring_list_cb, d); + return 0; +} + +RTE_INIT(ring_init_telemetry) +{ + rte_telemetry_register_cmd("/ring/list", ring_handle_list, + "Returns list of available rings. Takes no parameters"); +} From patchwork Tue May 9 09:24:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jie Hai X-Patchwork-Id: 126799 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4D3FE42AA2; Tue, 9 May 2023 11:27:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F4F742D39; Tue, 9 May 2023 11:27:48 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 4FEEF410D7 for ; Tue, 9 May 2023 11:27:43 +0200 (CEST) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4QFt4g5gN1zpV2f; Tue, 9 May 2023 17:23:31 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemi500020.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Tue, 9 May 2023 17:27:41 +0800 From: Jie Hai To: Honnappa Nagarahalli , Konstantin Ananyev CC: , Subject: [PATCH v6 3/3] ring: add telemetry cmd for ring info Date: Tue, 9 May 2023 17:24:59 +0800 Message-ID: <20230509092459.20140-4-haijie1@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20230509092459.20140-1-haijie1@huawei.com> References: <20230509012907.3817-1-haijie1@huawei.com> <20230509092459.20140-1-haijie1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemi500020.china.huawei.com (7.221.188.8) X-CFilter-Loop: Reflected 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 supports dump of ring information by its name. An example using this command is shown below: --> /ring/info,MP_mb_pool_0 { "/ring/info": { "name": "MP_mb_pool_0", "socket": 0, "flags": "0x0", "producer_type": "MP", "consumer_type": "MC", "size": 262144, "mask": "0x3ffff", "capacity": 262143, "used_count": 153197, "consumer_tail": 2259, "consumer_head": 2259, "producer_tail": 155456, "producer_head": 155456, "mz_name": "RG_MP_mb_pool_0", "mz_len": 2097536, "mz_hugepage_sz": 1073741824, "mz_socket_id": 0, "mz_flags": "0x0" } } Signed-off-by: Jie Hai Reviewed-by: Honnappa Nagarahalli Acked-by: Konstantin Ananyev Acked-by: Huisong Li Acked-by: Chengwen Feng Acked-by: Morten Brørup --- lib/ring/rte_ring.c | 99 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c index 0e83d0099363..26c8f2a2e6a2 100644 --- a/lib/ring/rte_ring.c +++ b/lib/ring/rte_ring.c @@ -455,8 +455,107 @@ ring_handle_list(const char *cmd __rte_unused, return 0; } +static const char * +ring_prod_sync_type_to_name(struct rte_ring *r) +{ + switch (r->prod.sync_type) { + case RTE_RING_SYNC_MT: + return "MP"; + case RTE_RING_SYNC_ST: + return "SP"; + case RTE_RING_SYNC_MT_RTS: + return "MP_RTS"; + case RTE_RING_SYNC_MT_HTS: + return "MP_HTS"; + default: + return "Unknown"; + } +} + +static const char * +ring_cons_sync_type_to_name(struct rte_ring *r) +{ + switch (r->cons.sync_type) { + case RTE_RING_SYNC_MT: + return "MC"; + case RTE_RING_SYNC_ST: + return "SC"; + case RTE_RING_SYNC_MT_RTS: + return "MC_RTS"; + case RTE_RING_SYNC_MT_HTS: + return "MC_HTS"; + default: + return "Unknown"; + } +} + +struct ring_info_cb_arg { + char *ring_name; + struct rte_tel_data *d; +}; + +static void +ring_info_cb(struct rte_ring *r, void *arg) +{ + struct ring_info_cb_arg *ring_arg = (struct ring_info_cb_arg *)arg; + struct rte_tel_data *d = ring_arg->d; + const struct rte_memzone *mz; + + if (strncmp(r->name, ring_arg->ring_name, RTE_RING_NAMESIZE)) + return; + + rte_tel_data_add_dict_string(d, "name", r->name); + rte_tel_data_add_dict_int(d, "socket", r->memzone->socket_id); + rte_tel_data_add_dict_uint_hex(d, "flags", r->flags, 0); + rte_tel_data_add_dict_string(d, "producer_type", + ring_prod_sync_type_to_name(r)); + rte_tel_data_add_dict_string(d, "consumer_type", + ring_cons_sync_type_to_name(r)); + rte_tel_data_add_dict_uint(d, "size", r->size); + rte_tel_data_add_dict_uint_hex(d, "mask", r->mask, 0); + rte_tel_data_add_dict_uint(d, "capacity", r->capacity); + rte_tel_data_add_dict_uint(d, "used_count", rte_ring_count(r)); + rte_tel_data_add_dict_uint(d, "consumer_tail", r->cons.tail); + rte_tel_data_add_dict_uint(d, "consumer_head", r->cons.head); + rte_tel_data_add_dict_uint(d, "producer_tail", r->prod.tail); + rte_tel_data_add_dict_uint(d, "producer_head", r->prod.head); + + mz = r->memzone; + if (mz == NULL) + return; + rte_tel_data_add_dict_string(d, "mz_name", mz->name); + rte_tel_data_add_dict_uint(d, "mz_len", mz->len); + rte_tel_data_add_dict_uint(d, "mz_hugepage_sz", mz->hugepage_sz); + rte_tel_data_add_dict_int(d, "mz_socket_id", mz->socket_id); + rte_tel_data_add_dict_uint_hex(d, "mz_flags", mz->flags, 0); +} + +static int +ring_handle_info(const char *cmd __rte_unused, const char *params, + struct rte_tel_data *d) +{ + char name[RTE_RING_NAMESIZE] = {0}; + struct ring_info_cb_arg ring_arg; + + if (params == NULL || strlen(params) == 0 || + strlen(params) >= RTE_RING_NAMESIZE) + return -EINVAL; + + rte_strlcpy(name, params, RTE_RING_NAMESIZE); + + ring_arg.ring_name = name; + ring_arg.d = d; + + rte_tel_data_start_dict(d); + ring_walk(ring_info_cb, &ring_arg); + + return 0; +} + RTE_INIT(ring_init_telemetry) { rte_telemetry_register_cmd("/ring/list", ring_handle_list, "Returns list of available rings. Takes no parameters"); + rte_telemetry_register_cmd("/ring/info", ring_handle_info, + "Returns ring info. Parameters: ring_name."); }