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 5013241D63; Mon, 27 Feb 2023 17:34:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E1BAF40A84; Mon, 27 Feb 2023 17:34:12 +0100 (CET) Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) by mails.dpdk.org (Postfix) with ESMTP id A439E40A7D for ; Mon, 27 Feb 2023 17:34:11 +0100 (CET) Received: by mail-vs1-f46.google.com with SMTP id d7so12054144vsj.2 for ; Mon, 27 Feb 2023 08:34:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=TXUSmbze6Xele/T5H5JISdoNlkDKY7raNrNjVB3C5iY=; b=q6BkjUhak11STLv/I6oBu4zzuStUanxSX1NaGR+JmZOJoXDjbZtjTkU81iY9hL7YmI 9tXmsBHeBe9h1mRGVVAT9nnsYEtrjGssHTRvzH9Ba4tX0VPc/gSlRks1W8Z4NjWKi57N ZkisXCOModFfQrEXebHk3lcpEQfKYUgmZEonk468C0yxDMNE0vh+7TGpv36O1jGLOllM ivZhDg+yr0Xg4wnqEnJVuVjUulGRV2EscJyM0ISBstRVLgULRrbcvyInHQljN6Bg7FTP cceOAKHtVD4a+O5E++x9Pb/9uiXJQKzs1fFGBf1V50WQ6aZ1JyNs4NUQQhDNTGkGOTkA e6Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TXUSmbze6Xele/T5H5JISdoNlkDKY7raNrNjVB3C5iY=; b=lMMIs5qA954th3KPAs7rwQ5ZsOq6fCSIDmBC52wbnaeMs90FUz9gb6BkJU7Z/gjir7 tt/tZm5Xm/h0tXBL1Ul6X6glRm8I5u8LXJ2aaHRNqxXfx3RByYI4ZyHk2PWsp1zGYJBm xHJpoOualWJj7w7WGmCyneRTyUGyZofryqFK6TGI0oa3GNbRMeZLowwzFw0isSWGeGdA HDTreHGOtHiYrJELOESKfScwr+eyl8SU1hCSTqb4yCtcgaP7vvmWIO12CPhVYZx9MPhM ZzjLH7z3CA6n057EUETtzkvCHb/tgJKQpGOnWE9OWsgTaYzvLxmpShv96RIKyJE4J/oF yqvg== X-Gm-Message-State: AO0yUKXN+33zsskxnNgQT+Nl0cRFJfGdJgZtgNI6EP73EaRFFMPmYgCp TkbqNKLqTe6uGwp1Yx5e4CoIyWRAze9ztT+MZiIy6yZ8z58= X-Google-Smtp-Source: AK7set8GGacaR/dRg4/tiDs0iu05FdDHz8mBRQVO3Mq07ljSx/WZSpxndn9gKpgYf/cLyr1lwTvf1kVg50gem+qTvKA= X-Received: by 2002:a67:fd50:0:b0:415:48dd:e0b9 with SMTP id g16-20020a67fd50000000b0041548dde0b9mr52662vsr.3.1677515650660; Mon, 27 Feb 2023 08:34:10 -0800 (PST) MIME-Version: 1.0 References: <20220409153056.1010236-1-timothy.mcdaniel@intel.com> <20230223010819.4164765-1-abdullah.sevincer@intel.com> In-Reply-To: <20230223010819.4164765-1-abdullah.sevincer@intel.com> From: Jerin Jacob Date: Mon, 27 Feb 2023 22:03:44 +0530 Message-ID: Subject: Re: [PATCH v6] app/procinfo: display eventdev xstats for PMD data To: Abdullah Sevincer Cc: dev@dpdk.org, jerinj@marvell.com, stephen@networkplumber.org, Maryam Tahhan , Reshma Pattan Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 On Thu, Feb 23, 2023 at 6:38=E2=80=AFAM Abdullah Sevincer wrote: > > This commit extends proc-info application to > display xstats and PMD dump data for the eventdev > devices. > > New command line arguments are introduced to > display stats for eventdev devices. The command > example is like: > > For displaying a specific port stats (e.g. port 1): > dpdk-proc-info -- --edev-stats-enable --edev-port=3D1 > > edev-stats-enable: This parameters enables proc-info > to display xstats for eventdev devices. If the parameter > is enabled through proc-info command line, proc-info > will only dump event_dev data and exit. > Users should not enable this flag if they desire to > dump other proc-info data suc as Rx/Tx descriptor dump. > More information can be found in proc-info app doc. > > Signed-off-by: Abdullah Sevincer Please CC the maintainers. @maryam.tahhan@intel.com @reshma.pattan@intel.com Please review > --- > app/proc-info/main.c | 207 ++++++++++++++++++++++++++++++++- > app/proc-info/meson.build | 2 +- > doc/guides/tools/proc_info.rst | 42 ++++++- > 3 files changed, 248 insertions(+), 3 deletions(-) > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c > index 53e852a07c..00bcd35fad 100644 > --- a/app/proc-info/main.c > +++ b/app/proc-info/main.c > @@ -40,11 +40,17 @@ > #include > #include > #include > +#include > > /* Maximum long option length for option parsing. */ > #define MAX_LONG_OPT_SZ 64 > #define MAX_STRING_LEN 256 > > +/* Note: Port_queue_id in xstats APIs is 8 bits, so we have a maximum of > + * 256 ports and queues for event_Dev > + */ > +#define MAX_PORTS_QUEUES 256 > + > #define ETHDEV_FWVERS_LEN 32 > #define RTE_RETA_CONF_GROUP_NUM 32 > #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) > @@ -121,6 +127,19 @@ static uint32_t enable_shw_module_eeprom; > static uint32_t enable_shw_rx_desc_dump; > static uint32_t enable_shw_tx_desc_dump; > > +static uint32_t enable_eventdev_stats; > +static uint32_t enable_shw_all_eventdev_queues; > +static uint32_t enable_shw_all_eventdev_ports; > +static uint32_t enable_dump_eventdev; > +static uint32_t enable_eventdev_reset_stats; > +static uint32_t enable_shw_eventdev_device_stats; > + > +static uint8_t evdev_id; > +static uint8_t num_ports; > +static uint8_t ports[MAX_PORTS_QUEUES]; > +static uint8_t num_queues; > +static uint8_t queues[MAX_PORTS_QUEUES]; > + > #define DESC_PARAM_NUM 3 > > struct desc_param { > @@ -172,7 +191,15 @@ proc_info_usage(const char *prgname) > "offset: The offset of the descriptor starting fr= om tail. " > "num: The number of the descriptors to dump.\n" > " --iter-mempool=3Dname: iterate mempool elements to dis= play content\n" > - " --dump-regs=3Dfile-prefix: dump registers to file with= the file-prefix\n", > + " --dump-regs=3Dfile-prefix: dump registers to file with= the file-prefix\n" > + " --edev-stats-enable to enable stats for all event_dev = queues, ports, device etc;\n" > + " --all-edev-queues to get stats for all event_dev queue= s;\n" > + " --edev-queue=3Dqueue_num to get queue stats for specif= ied queue;\n" > + " --all-edev-ports to get stats for all event_dev ports;= \n" > + " --edev-port=3Dport_num to get queue stats for specifie= d port;\n" > + " --edev-dump to dump all event_dev stats;\n" > + " --edev-reset to reset event_dev stats after reading;\n= " > + " --edev-device-stats to get event_dev device stats;\n", > prgname); > } > > @@ -302,6 +329,14 @@ proc_info_parse_args(int argc, char **argv) > {"show-module-eeprom", 0, NULL, 0}, > {"show-rx-descriptor", required_argument, NULL, 1}, > {"show-tx-descriptor", required_argument, NULL, 1}, > + {"edev-stats-enable", 0, NULL, 0}, > + {"all-edev-queues", 0, NULL, 0}, > + {"edev-queue", required_argument, NULL, 0}, > + {"all-edev-ports", 0, NULL, 0}, > + {"edev-port", required_argument, NULL, 0}, > + {"edev-dump", 0, NULL, 0}, > + {"edev-reset", 0, NULL, 0}, > + {"edev-device-stats", 0, NULL, 0}, > {NULL, 0, 0, 0} > }; > > @@ -385,6 +420,33 @@ proc_info_parse_args(int argc, char **argv) > else if (!strncmp(long_option[option_index].name, > "show-module-eeprom", MAX_LONG_OP= T_SZ)) > enable_shw_module_eeprom =3D 1; > + else if (!strncmp(long_option[option_index].name, > + "edev-stats-enable", MAX_LONG_OPT= _SZ)) { > + enable_eventdev_stats =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "all-edev-queues", MAX_LONG_OPT_S= Z)) { > + enable_shw_all_eventdev_queues =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "all-edev-ports", MAX_LONG_OPT_SZ= )) { > + enable_shw_all_eventdev_ports =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "edev-dump", MAX_LONG_OPT_SZ)) { > + enable_dump_eventdev =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "edev-reset", MAX_LONG_OPT_SZ)) { > + enable_eventdev_reset_stats =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "edev-device-stats", MAX_LONG_OPT= _SZ)) { > + enable_shw_eventdev_device_stats =3D 1; > + } else if (!strncmp(long_option[option_index].nam= e, > + "edev-queue", MAX_LONG_OPT_SZ)) { > + queues[num_queues] =3D atoi(optarg); > + num_queues++; > + } else if (!strncmp(long_option[option_index].nam= e, > + "edev-port", MAX_LONG_OPT_SZ)) { > + ports[num_ports] =3D atoi(optarg); > + num_ports++; > + } > break; > case 1: > /* Print xstat single value given by name*/ > @@ -1744,6 +1806,125 @@ nic_tx_descriptor_display(uint16_t port_id, struc= t desc_param *desc) > strerror(-ret)); > } > > +static void > +get_eventdev_stats(uint8_t dev_id, > + enum rte_event_dev_xstats_mode mode, > + uint8_t queue_port_id, > + bool reset) > +{ > + int ret; > + struct rte_event_dev_xstats_name *xstats_names; > + uint64_t *ids; > + unsigned int size; > + int i; > + > + > + /* Get amount of storage required */ > + ret =3D rte_event_dev_xstats_names_get(dev_id, > + mode, > + queue_port_id, > + NULL, /* names */ > + NULL, /* ids */ > + 0); /* num */ > + > + if (ret < 0) > + rte_panic("rte_event_dev_xstats_names_get err %d\n", ret)= ; > + > + if (ret =3D=3D 0) { > + printf( > + "No stats available for this item, mode=3D%d, queue_port_= id=3D%d\n", > + mode, queue_port_id); > + return; > + } > + > + size =3D (unsigned int)ret; /* number of names */ > + > + /* Get memory to hold stat names, IDs, and values */ > + > + xstats_names =3D malloc(sizeof(struct rte_event_dev_xstats_name) = * size); > + ids =3D malloc(sizeof(unsigned int) * size); > + > + if (!xstats_names || !ids) > + rte_panic("unable to alloc memory for stats retrieval\n")= ; > + > + ret =3D rte_event_dev_xstats_names_get(dev_id, mode, queue_port_i= d, > + xstats_names, ids, > + size); > + if (ret !=3D (int)size) > + rte_panic("rte_event_dev_xstats_names_get err %d\n", ret)= ; > + > + if (!reset) { > + uint64_t *values; > + > + values =3D malloc(sizeof(uint64_t) * size); > + if (!values) > + rte_panic("unable to alloc memory for stats retri= eval\n"); > + > + ret =3D rte_event_dev_xstats_get(dev_id, mode, queue_port= _id, > + ids, values, size); > + > + if (ret !=3D (int)size) > + rte_panic("rte_event_dev_xstats_get err %d\n", re= t); > + > + for (i =3D 0; i < (int)size; i++) { > + printf("id %"PRIu64" %s =3D %"PRIu64"\n", > + ids[i], &xstats_names[i].name[0], values[= i]); > + } > + > + free(values); > + } else > + rte_event_dev_xstats_reset(dev_id, mode, queue_port_id, > + ids, size); > + > + free(xstats_names); > + free(ids); > +} > + > +static void > +process_eventdev_stats(bool reset) > +{ > + int i; > + > + if (enable_shw_eventdev_device_stats) { > + get_eventdev_stats(evdev_id, > + RTE_EVENT_DEV_XSTATS_DEVICE, > + 0, > + reset); > + } > + > + if (enable_shw_all_eventdev_ports) { > + for (i =3D 0; i < MAX_PORTS_QUEUES; i++) { > + get_eventdev_stats(evdev_id, > + RTE_EVENT_DEV_XSTATS_PORT, > + i, > + reset); > + } > + } else { > + for (i =3D 0; i < num_ports; i++) { > + get_eventdev_stats(evdev_id, > + RTE_EVENT_DEV_XSTATS_PORT, > + ports[i], > + reset); > + } > + } > + > + if (enable_shw_all_eventdev_queues) { > + for (i =3D 0; i < MAX_PORTS_QUEUES; i++) { > + get_eventdev_stats(evdev_id, > + RTE_EVENT_DEV_XSTATS_QUEUE, > + i, > + reset); > + } > + } else { > + for (i =3D 0; i < num_queues; i++) { > + get_eventdev_stats(evdev_id, > + RTE_EVENT_DEV_XSTATS_QUEUE, > + queues[i], > + reset); > + } > + } > +} > + > int > main(int argc, char **argv) > { > @@ -1794,6 +1975,30 @@ main(int argc, char **argv) > return 0; > } > > + if (enable_eventdev_stats) { > + const uint8_t ndevs =3D rte_event_dev_count(); > + > + if (ndevs =3D=3D 0) > + rte_panic("No event devs found. Do you need" > + " to pass in a --vdev flag?\n"); > + > + if (ndevs > 1) > + printf("Warning: More than one event dev, but usi= ng idx 0\n"); > + > + if (enable_dump_eventdev) { > + ret =3D rte_event_dev_dump(evdev_id, stdout); > + if (ret) > + rte_panic("dump failed with err=3D%d\n", = ret); > + } > + > + process_eventdev_stats(false); > + > + if (enable_eventdev_reset_stats) > + process_eventdev_stats(true); > + > + return 0; > + } > + > nb_ports =3D rte_eth_dev_count_avail(); > if (nb_ports =3D=3D 0) > rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n"); > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build > index 1563ce656a..4f83f29a64 100644 > --- a/app/proc-info/meson.build > +++ b/app/proc-info/meson.build > @@ -8,7 +8,7 @@ if is_windows > endif > > sources =3D files('main.c') > -deps +=3D ['ethdev', 'security'] > +deps +=3D ['ethdev', 'security', 'eventdev'] > if dpdk_conf.has('RTE_LIB_METRICS') > deps +=3D 'metrics' > endif > diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.= rst > index cf3502a8cb..59d8ff2490 100644 > --- a/doc/guides/tools/proc_info.rst > +++ b/doc/guides/tools/proc_info.rst > @@ -22,7 +22,9 @@ The application has a number of command line options: > --show-ring[=3Dname] | --show-mempool[=3Dname] | --iter-mempool=3Dnam= e | > --show-port-private | --version | --firmware-version | --show-rss-ret= a | > --show-module-eeprom | --show-rx-descriptor queue_id:offset:num | > - --show-tx-descriptor queue_id:offset:num ] > + --show-tx-descriptor queue_id:offset:num | --edev-stats-enable | > + --all-edev-queues | --edev-queue=3Dqueue_num | --all-edev-ports | > + --edev-port=3Dport_num | --edev-dump | --edev-reset | --edev-device-s= tats] > > Parameters > ~~~~~~~~~~ > @@ -101,6 +103,44 @@ queue_id: A Tx queue identifier on this port. > offset: The offset of the descriptor starting from tail. > num: The number of the descriptors to dump. > > +**--edev-stats-enable** > +The edev-stats-enable parameter enables proc-info application > +to display stats for eventdev devices. If the parameter is entered > +through proc-info application command line, proc-info application will > +only dump eventdev data and exit from the application. Hence, > +this parameter is required and a must with other eventdev parameters > +explained below. Users should not enable this flag if they desire to dum= p > +other proc-info application stats such as Rx/Tx descriptor dump. > + > +**--all-edev-queues** > +The all-edev-queues parameter enables stats for all eventdev queues. > + > +**--edev-queue** > +The edev-queue parameter enables stats for specified queue. > +queue_num: The queue number to get queue stats for this specified queue. > + > +**--all-edev-ports** > +The all-edev-ports parameter enables stats for all eventdev ports. > + > +**--edev-port** > +The edev-port parameter enables stats for specified port. > +queue_num: The port number to get port stats for this specified port. > + > +**--edev-dump** > +The edev-dump parameter dumps all eventdev stats. > + > +**--edev-reset** > +The edev-reset parameter resets eventdev stats after reading. > + > +**--edev-device-stats** > +The edev-device-stats parameter displays eventdev device stats. > + > +A typical command line usage for eventdev stats: > + > + .. code-block:: console > + > + ./dpdk-proc-info -- --edev-stats-enable --edev-port=3D1 > + > Limitations > ----------- > > -- > 2.25.1 >