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 30A0441C35; Wed, 8 Feb 2023 03:24:28 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C040240E6E; Wed, 8 Feb 2023 03:24:27 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id C52A340DDB for ; Wed, 8 Feb 2023 03:24:25 +0100 (CET) Received: from kwepemm600004.china.huawei.com (unknown [172.30.72.57]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4PBNxG6cg2zJqxD for ; Wed, 8 Feb 2023 10:19:46 +0800 (CST) Received: from [10.67.103.231] (10.67.103.231) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Wed, 8 Feb 2023 10:24:23 +0800 Message-ID: <3cd7617f-dbb5-9626-2db1-e6a8ce5f6376@huawei.com> Date: Wed, 8 Feb 2023 10:24:22 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH v9 1/5] eal: add lcore info in telemetry To: References: <20221123102612.1688865-1-rjarry@redhat.com> <20230207193731.1242505-2-rjarry@redhat.com> From: "lihuisong (C)" In-Reply-To: <20230207193731.1242505-2-rjarry@redhat.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.231] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600004.china.huawei.com (7.193.23.242) 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 在 2023/2/8 3:37, Robin Jarry 写道: > Report the same information than rte_lcore_dump() in the telemetry > API into /eal/lcore/list and /eal/lcore/info,ID. > > Example: > > --> /eal/lcore/info,3 > { > "/eal/lcore/info": { > "lcore_id": 3, > "socket": 0, > "role": "RTE", > "cpuset": [ > 3 > ] > } > } > > Signed-off-by: Robin Jarry > Acked-by: Morten Brørup > Reviewed-by: Kevin Laatz > --- > > Notes: > v8 -> v9: Updated with 64 bits integers telemetry functions > > lib/eal/common/eal_common_lcore.c | 123 +++++++++++++++++++++++++----- > 1 file changed, 105 insertions(+), 18 deletions(-) > > diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c > index 06c594b0224f..f53fc17b4d04 100644 > --- a/lib/eal/common/eal_common_lcore.c > +++ b/lib/eal/common/eal_common_lcore.c > @@ -10,6 +10,9 @@ > #include > #include > #include > +#ifndef RTE_EXEC_ENV_WINDOWS > +#include > +#endif > > #include "eal_private.h" > #include "eal_thread.h" > @@ -419,35 +422,35 @@ rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg) > return ret; > } > > +static const char * > +lcore_role_str(enum rte_lcore_role_t role) > +{ > + switch (role) { > + case ROLE_RTE: > + return "RTE"; > + case ROLE_SERVICE: > + return "SERVICE"; > + case ROLE_NON_EAL: > + return "NON_EAL"; > + default: > + return "UNKNOWN"; > + } > +} > + > static int > lcore_dump_cb(unsigned int lcore_id, void *arg) > { > struct rte_config *cfg = rte_eal_get_configuration(); > char cpuset[RTE_CPU_AFFINITY_STR_LEN]; > - const char *role; > FILE *f = arg; > int ret; > > - switch (cfg->lcore_role[lcore_id]) { > - case ROLE_RTE: > - role = "RTE"; > - break; > - case ROLE_SERVICE: > - role = "SERVICE"; > - break; > - case ROLE_NON_EAL: > - role = "NON_EAL"; > - break; > - default: > - role = "UNKNOWN"; > - break; > - } > - > ret = eal_thread_dump_affinity(&lcore_config[lcore_id].cpuset, cpuset, > sizeof(cpuset)); > fprintf(f, "lcore %u, socket %u, role %s, cpuset %s%s\n", lcore_id, > - rte_lcore_to_socket_id(lcore_id), role, cpuset, > - ret == 0 ? "" : "..."); > + rte_lcore_to_socket_id(lcore_id), > + lcore_role_str(cfg->lcore_role[lcore_id]), > + cpuset, ret == 0 ? "" : "..."); > return 0; > } The above modification doesn't seem to be related to this patch. Suggest remove or delete it from this patch. > > @@ -456,3 +459,87 @@ rte_lcore_dump(FILE *f) > { > rte_lcore_iterate(lcore_dump_cb, f); > } > + > +#ifndef RTE_EXEC_ENV_WINDOWS > +static int > +lcore_telemetry_id_cb(unsigned int lcore_id, void *arg) > +{ > + struct rte_tel_data *d = arg; > + return rte_tel_data_add_array_int(d, lcore_id); > +} > + > +static int > +handle_lcore_list(const char *cmd __rte_unused, > + const char *params __rte_unused, > + struct rte_tel_data *d) > +{ > + int ret = rte_tel_data_start_array(d, RTE_TEL_INT_VAL); > + if (ret) > + return ret; > + return rte_lcore_iterate(lcore_telemetry_id_cb, d); > +} > + > +struct lcore_telemetry_info { > + unsigned int lcore_id; > + struct rte_tel_data *d; > +}; > + > +static int > +lcore_telemetry_info_cb(unsigned int lcore_id, void *arg) > +{ > + struct rte_config *cfg = rte_eal_get_configuration(); > + struct lcore_telemetry_info *info = arg; > + struct rte_tel_data *cpuset; > + unsigned int cpu; > + > + if (info->lcore_id != lcore_id) Suggest: info->lcore_id != lcore_id -> lcore_id != info->lcore_id Here, info->lcore_id is a target and lcore_id is the variable to be judged, right? > + return 0; > + > + rte_tel_data_start_dict(info->d); > + rte_tel_data_add_dict_int(info->d, "lcore_id", lcore_id); > + rte_tel_data_add_dict_int(info->d, "socket", rte_lcore_to_socket_id(lcore_id)); > + rte_tel_data_add_dict_string(info->d, "role", lcore_role_str(cfg->lcore_role[lcore_id])); > + cpuset = rte_tel_data_alloc(); > + if (cpuset == NULL) > + return -ENOMEM; > + rte_tel_data_start_array(cpuset, RTE_TEL_INT_VAL); > + for (cpu = 0; cpu < CPU_SETSIZE; cpu++) { > + if (CPU_ISSET(cpu, &lcore_config[lcore_id].cpuset)) > + rte_tel_data_add_array_int(cpuset, cpu); > + } > + rte_tel_data_add_dict_container(info->d, "cpuset", cpuset, 0); > + > + return 0; > +} > + > +static int > +handle_lcore_info(const char *cmd __rte_unused, const char *params, struct rte_tel_data *d) > +{ > + struct lcore_telemetry_info info = { .d = d }; > + unsigned long lcore_id; > + char *endptr; > + > + if (params == NULL) > + return -EINVAL; > + errno = 0; > + lcore_id = strtoul(params, &endptr, 10); > + if (errno) > + return -errno; > + if (*params == '\0' || *endptr != '\0' || lcore_id >= RTE_MAX_LCORE) > + return -EINVAL; > + > + info.lcore_id = lcore_id; > + > + return rte_lcore_iterate(lcore_telemetry_info_cb, &info); > +} > + > +RTE_INIT(lcore_telemetry) > +{ > + rte_telemetry_register_cmd( > + "/eal/lcore/list", handle_lcore_list, > + "List of lcore ids. Takes no parameters"); > + rte_telemetry_register_cmd( > + "/eal/lcore/info", handle_lcore_info, > + "Returns lcore info. Parameters: int lcore_id"); > +} > +#endif /* !RTE_EXEC_ENV_WINDOWS */