From patchwork Tue Jan 17 09:10:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Hai X-Patchwork-Id: 122177 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 BDD8A423FB; Tue, 17 Jan 2023 10:13:19 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D392742C29; Tue, 17 Jan 2023 10:13:16 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 1B86640151 for ; Tue, 17 Jan 2023 10:13:14 +0100 (CET) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Nx33Y3WprzJqJg; Tue, 17 Jan 2023 17:08:57 +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.2375.34; Tue, 17 Jan 2023 17:13:10 +0800 From: Jie Hai To: , , CC: , Subject: [PATCH 1/2] ring: add ring list telemetry cmd Date: Tue, 17 Jan 2023 17:10:48 +0800 Message-ID: <20230117091049.20194-2-haijie1@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20230117091049.20194-1-haijie1@huawei.com> References: <20230117091049.20194-1-haijie1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) 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 the list of rings with telemetry cmd. 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 --- 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 cddaf6b2876f..bb1dafd4d1ca 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" @@ -419,3 +420,42 @@ rte_ring_lookup(const char *name) return r; } + +static void +rte_ring_walk(void (*func)(struct rte_ring *, void *), void *arg) +{ + struct rte_ring_list *ring_list; + struct rte_tailq_entry *te; + + ring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list); + rte_mcfg_tailq_read_lock(); + + TAILQ_FOREACH(te, ring_list, next) { + (*func)((struct rte_ring *) te->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); + rte_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 ring. Takes no parameters"); +} From patchwork Tue Jan 17 09:10:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jie Hai X-Patchwork-Id: 122178 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 18028423FB; Tue, 17 Jan 2023 10:13:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C570242D24; Tue, 17 Jan 2023 10:13:17 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 0CDB6400D4 for ; Tue, 17 Jan 2023 10:13:13 +0100 (CET) Received: from kwepemi500020.china.huawei.com (unknown [172.30.72.53]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Nx36J484WzRrGW; Tue, 17 Jan 2023 17:11:20 +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.2375.34; Tue, 17 Jan 2023 17:13:11 +0800 From: Jie Hai To: , , CC: , Subject: [PATCH 2/2] ring: add ring info telemetry cmd Date: Tue, 17 Jan 2023 17:10:49 +0800 Message-ID: <20230117091049.20194-3-haijie1@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20230117091049.20194-1-haijie1@huawei.com> References: <20230117091049.20194-1-haijie1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) 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 the info of ring 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": 0, "producer_type": "MP", "consumer_type": "MC", "size": 262144, "mask": 262143, "capacity": 262143, "used_count": 147173, "consumer_tail": 8283, "consumer_head": 8283, "producer_tail": 155456, "producer_head": 155456, "mz_name": "RG_MP_mb_pool_0", "mz_len": 2097920, "mz_hugepage_sz": 1073741824, "mz_socket_id": 0, "mz_flags": 0 } } Signed-off-by: Jie Hai --- lib/ring/rte_ring.c | 88 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c index bb1dafd4d1ca..effdd1fcdba6 100644 --- a/lib/ring/rte_ring.c +++ b/lib/ring/rte_ring.c @@ -45,6 +45,9 @@ EAL_REGISTER_TAILQ(rte_ring_tailq) /* by default set head/tail distance as 1/8 of ring capacity */ #define HTD_MAX_DEF 8 +/* size of name of producer/consumer synchronization modes */ +#define SYNC_MODE_NAME_SZ 16 + /* return the size of memory occupied by a ring */ ssize_t rte_ring_get_memsize_elem(unsigned int esize, unsigned int count) @@ -454,8 +457,93 @@ ring_handle_list(const char *cmd __rte_unused, return 0; } +static void +ring_get_sync_name_by_type(struct rte_ring *r, char *prod, char *cons) +{ + switch(r->prod.sync_type) { + case RTE_RING_SYNC_MT: + strcpy(prod, "MP"); + break; + case RTE_RING_SYNC_ST: + strcpy(prod, "SP"); + break; + case RTE_RING_SYNC_MT_RTS: + strcpy(prod, "MP_RTS"); + break; + case RTE_RING_SYNC_MT_HTS: + strcpy(prod, "MP_HTS"); + break; + default: + strcpy(prod, "Unknown"); + } + + switch(r->cons.sync_type) { + case RTE_RING_SYNC_MT: + strcpy(cons, "MC"); + break; + case RTE_RING_SYNC_ST: + strcpy(cons, "SC"); + break; + case RTE_RING_SYNC_MT_RTS: + strcpy(cons, "MC_RTS"); + break; + case RTE_RING_SYNC_MT_HTS: + strcpy(cons, "MC_HTS"); + break; + default: + strcpy(cons, "Unknown"); + } +} + +static int +ring_handle_info(const char *cmd __rte_unused, const char *params, + struct rte_tel_data *d) +{ + char prod_type[SYNC_MODE_NAME_SZ]; + char cons_type[SYNC_MODE_NAME_SZ]; + const struct rte_memzone *mz; + char name[RTE_RING_NAMESIZE]; + struct rte_ring *r; + + if (params == NULL || strlen(params) == 0 || + strlen(params) >= RTE_MEMZONE_NAMESIZE) + return -EINVAL; + + strlcpy(name, params, RTE_MEMZONE_NAMESIZE); + r = rte_ring_lookup(name); + if (r == NULL) + return -EINVAL; + + rte_tel_data_start_dict(d); + 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_int(d, "flags", r->flags); + ring_get_sync_name_by_type(r, prod_type, cons_type); + rte_tel_data_add_dict_string(d, "producer_type", prod_type); + rte_tel_data_add_dict_string(d, "consumer_type", cons_type); + rte_tel_data_add_dict_u64(d, "size", r->size); + rte_tel_data_add_dict_u64(d, "mask", r->mask); + rte_tel_data_add_dict_u64(d, "capacity", r->capacity); + rte_tel_data_add_dict_u64(d, "used_count", rte_ring_count(r)); + rte_tel_data_add_dict_u64(d, "consumer_tail", r->cons.tail); + rte_tel_data_add_dict_u64(d, "consumer_head", r->cons.head); + rte_tel_data_add_dict_u64(d, "producer_tail", r->prod.tail); + rte_tel_data_add_dict_u64(d, "producer_head", r->prod.head); + + mz = r->memzone; + rte_tel_data_add_dict_string(d, "mz_name", mz->name); + rte_tel_data_add_dict_int(d, "mz_len", mz->len); + rte_tel_data_add_dict_int(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_int(d, "mz_flags", mz->flags); + + return 0; +} + RTE_INIT(ring_init_telemetry) { rte_telemetry_register_cmd("/ring/list", ring_handle_list, "Returns list of available ring. Takes no parameters"); + rte_telemetry_register_cmd("/ring/info", ring_handle_info, + "Returns ring info. Parameters: ring_name."); }