[{"id":3675235,"web_url":"http://patchwork.ozlabs.org/comment/3675235/","msgid":"<E576D7F5-3818-4A42-B02D-DC31E53649AD@redhat.com>","list_archive_url":null,"date":"2026-04-09T10:11:34","subject":"Re: [ovs-dev] [PATCH] dpif-netdev: Remove pmd-stats-show in favor\n of pmd-perf-show.","submitter":{"id":70613,"url":"http://patchwork.ozlabs.org/api/people/70613/","name":"Eelco Chaudron","email":"echaudro@redhat.com"},"content":"On 8 Apr 2026, at 19:16, Ilya Maximets wrote:\n\n> The 'pmd-perf-show' command provides all the same information and more.\n> It is also better visually structured and easier to read as a result.\n>\n> Let's remove the old 'pmd-stats-show' command, as there is no real need\n> to have two commands reporting the same data.\n>\n> The only difference until now was that 'pmd-perf-show' didn't provide\n> information for the \"main\" thread.  This change makes it report the\n> statistics for the aggregated \"main\" thread as well, omitting things\n> related to CPU cycles, as we can't collect those for threads that are\n> not pinned.  For the same reason histograms are also always disabled.\n> Omission is done by checking the total number of iterations to be zero.\n> \"main\" thread doesn't start/end iterations.\n>\n> The actual unixctl command is preserved undocumented and serves as an\n> alias for 'pmd-perf-show'.  This should allow old scripts that are just\n> capturing the output for humans (or LLMs?) to read to keep working.\n> Note, however, that the exact output format for unixctl commands was\n> never a guarantee, so scripts that attempt to parse the output may\n> still break.\n>\n> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>\n> ---\n>\n> Note: I believe the change in system-dpdk-offloads.at is correct,\n>       but I didn't run the testsuite, as I have no hardware for it.\n>\n\nNot a review, but I want to confirm that the offload testsuite runs fine.\n\n//Eelco","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","ovs-dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","ovs-dev@lists.linuxfoundation.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=gAKzbkQp;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)","smtp2.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=gAKzbkQp","smtp1.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","smtp1.osuosl.org; dkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=gAKzbkQp"],"Received":["from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frwhN0H4dz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 20:11:47 +1000 (AEST)","from localhost (localhost [127.0.0.1])\n\tby smtp2.osuosl.org (Postfix) with ESMTP id 718F5403F1;\n\tThu,  9 Apr 2026 10:11:46 +0000 (UTC)","from smtp2.osuosl.org ([127.0.0.1])\n by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id k8U76Sx7B9xt; Thu,  9 Apr 2026 10:11:45 +0000 (UTC)","from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp2.osuosl.org (Postfix) with ESMTPS id 9409E400BA;\n\tThu,  9 Apr 2026 10:11:45 +0000 (UTC)","from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 58A49C054A;\n\tThu,  9 Apr 2026 10:11:45 +0000 (UTC)","from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 218FFC0549\n for <ovs-dev@openvswitch.org>; Thu,  9 Apr 2026 10:11:44 +0000 (UTC)","from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id 0037B81036\n for <ovs-dev@openvswitch.org>; Thu,  9 Apr 2026 10:11:43 +0000 (UTC)","from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id sBcY1xJ6RPTQ for <ovs-dev@openvswitch.org>;\n Thu,  9 Apr 2026 10:11:43 +0000 (UTC)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by smtp1.osuosl.org (Postfix) with ESMTPS id CB53D8100B\n for <ovs-dev@openvswitch.org>; Thu,  9 Apr 2026 10:11:42 +0000 (UTC)","from mail-ej1-f70.google.com (mail-ej1-f70.google.com\n [209.85.218.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-180-_F2cCYfQMlWhK8ZdY2p6CQ-1; Thu, 09 Apr 2026 06:11:39 -0400","by mail-ej1-f70.google.com with SMTP id\n a640c23a62f3a-b9c0bdea9faso59839466b.2\n for <ovs-dev@openvswitch.org>; Thu, 09 Apr 2026 03:11:39 -0700 (PDT)","from [10.44.32.212] (5920ab7b.static.cust.trined.nl.\n [89.32.171.123])\n by smtp.gmail.com with ESMTPSA id\n a640c23a62f3a-b9c3c97218esm720715566b.9.2026.04.09.03.11.37\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Thu, 09 Apr 2026 03:11:37 -0700 (PDT)"],"X-Virus-Scanned":["amavis at osuosl.org","amavis at osuosl.org"],"X-Comment":"SPF check N/A for local connections -\n client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ","DKIM-Filter":["OpenDKIM Filter v2.11.0 smtp2.osuosl.org 9409E400BA","OpenDKIM Filter v2.11.0 smtp1.osuosl.org CB53D8100B"],"Received-SPF":"Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124;\n helo=us-smtp-delivery-124.mimecast.com; envelope-from=echaudro@redhat.com;\n receiver=<UNKNOWN>","DMARC-Filter":"OpenDMARC Filter v1.4.2 smtp1.osuosl.org CB53D8100B","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1775729501;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=sNyT5LxfXOp3SwRfxhmPVIVOwgy1HvZ9o5dY0HsLuIQ=;\n b=gAKzbkQpEF1FlEPboBBotSfQdPy8Pb0Oa0P91Mkmxjdxt+i2q5zedMWLTi2aIgaFOuPCX4\n 0/dCUG0pWpCOqoD9Yc7iPgP9IdVoiEtjWNdl0AZ1iBknc8Ur5ze83GGJ93YTgFzRkgpOlm\n yfeBpR/xMfoiRKhuuqEQX8aRQnoezV0=","X-MC-Unique":"_F2cCYfQMlWhK8ZdY2p6CQ-1","X-Mimecast-MFC-AGG-ID":"_F2cCYfQMlWhK8ZdY2p6CQ_1775729498","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775729498; x=1776334298;\n h=mime-version:references:in-reply-to:message-id:date:subject:cc:to\n :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=sNyT5LxfXOp3SwRfxhmPVIVOwgy1HvZ9o5dY0HsLuIQ=;\n b=XFcMsuC2GVV29qPc0JwbQgS6J14SP0pABhK98BnNzpnefJPhhFwfUXi9vjEn7jEk4V\n voF19ujB0R/tEaME+JDPwnsZ3EL40m9nXvMKJrs0VxsDZJPSwC+rXdVHuAVDx1IFkD85\n FQbiUbaQbJFhqEBM7oRlbwqRocl0VpofH/B3HMk3/N7LkIt3eqJVpWz2h1Ez7G3U1m5D\n ziCr/rDVxhZvGHyEpBt/CI4cbS4J8DimHIBTUEKX3shFyXNMyWjbo1BQOw8D0rSWbB0z\n 57c0hqLDpW1M9e88PVZ0e9fUo6g/uo37rRD2bpJspqCP+HWGhipcpGGFkUK2//lQ4Hb4\n f7XQ==","X-Gm-Message-State":"AOJu0YzvNGp3cArOsz1g2FSXipdMSw48BnDqUJ3YKFdueutaH9tAj0Wb\n bQFfip773cXPk7PaBcOJsGilygFab2DAczuv6hK56WKA6o1ShzZOPEmmqLmKabv4RVRLv4bvw0U\n sLj+BZgEAAsBy9TzxkmPkDRFWYWLBuig1Xps/XFaKNnZt26RPI6MHsmCdlHA=","X-Gm-Gg":"AeBDieupgnXF1YY7/PlswnpllifENTt02m++G+aHNEGOSgN4yPRNM7vNH/5L3qr/jUR\n 153LBZlsEgbYyrtxbxJP6ISpSqvPNhq8ubtmya8OkPlbyLbq/uwEUzXWbMFvG75yWQO9pGiKyS0\n MoNiVz2rGLCQgaMkWU1Kg1Uv7eprpA42Y5VkyJmpX56nfsp49ENqCfEmoUXp3nZLOwC3KWMjZxb\n slk2KRQPrh5htc1cVwPNsNjlcmXjLIYtbSEcTP5I/t/9nmqvIx2AashnSvNh9z5M2aq2lYvSUyx\n eS5nWv7HOYTS08/sBE7T0JPjP4A/2E0gF/uAnMESAsVvEjvExDf0LE5XNrroo4VOO1FQutVebZa\n CFFFjr2LhO+p7FMJzUJbKr+BRreOpbjr4y4xrsGvsA3WXB9rq73Slg0DCZfLZgBLwKAXDhx4=","X-Received":["by 2002:a17:906:9f88:b0:b9d:14e9:8416 with SMTP id\n a640c23a62f3a-b9d476a401emr150532766b.37.1775729498356;\n Thu, 09 Apr 2026 03:11:38 -0700 (PDT)","by 2002:a17:906:9f88:b0:b9d:14e9:8416 with SMTP id\n a640c23a62f3a-b9d476a401emr150530766b.37.1775729497883;\n Thu, 09 Apr 2026 03:11:37 -0700 (PDT)"],"To":"Ilya Maximets <i.maximets@ovn.org>","Date":"Thu, 09 Apr 2026 12:11:34 +0200","X-Mailer":"MailMate (2.0r6290)","Message-ID":"<E576D7F5-3818-4A42-B02D-DC31E53649AD@redhat.com>","In-Reply-To":"<20260408171644.1404735-1-i.maximets@ovn.org>","References":"<20260408171644.1404735-1-i.maximets@ovn.org>","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"rg83ncKHPUqAsRm8snMci-HPPbS77r_e4Z8aib2UcP0_1775729498","X-Mimecast-Originator":"redhat.com","Subject":"Re: [ovs-dev] [PATCH] dpif-netdev: Remove pmd-stats-show in favor\n of pmd-perf-show.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","From":"Eelco Chaudron via dev <ovs-dev@openvswitch.org>","Reply-To":"Eelco Chaudron <echaudro@redhat.com>","Cc":"ovs-dev@openvswitch.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"ovs-dev-bounces@openvswitch.org","Sender":"\"dev\" <ovs-dev-bounces@openvswitch.org>"}},{"id":3678085,"web_url":"http://patchwork.ozlabs.org/comment/3678085/","msgid":"<3b04299a-f445-45da-8007-70320ccd1c51@redhat.com>","list_archive_url":null,"date":"2026-04-16T10:40:58","subject":"Re: [ovs-dev] [PATCH] dpif-netdev: Remove pmd-stats-show in favor\n of pmd-perf-show.","submitter":{"id":70482,"url":"http://patchwork.ozlabs.org/api/people/70482/","name":"Kevin Traynor","email":"ktraynor@redhat.com"},"content":"On 4/8/26 6:16 PM, Ilya Maximets wrote:\n> The 'pmd-perf-show' command provides all the same information and more.\n> It is also better visually structured and easier to read as a result.\n> \n> Let's remove the old 'pmd-stats-show' command, as there is no real need\n> to have two commands reporting the same data.\n> \n> The only difference until now was that 'pmd-perf-show' didn't provide\n> information for the \"main\" thread.  This change makes it report the\n> statistics for the aggregated \"main\" thread as well, omitting things\n> related to CPU cycles, as we can't collect those for threads that are\n> not pinned.  For the same reason histograms are also always disabled.\n> Omission is done by checking the total number of iterations to be zero.\n> \"main\" thread doesn't start/end iterations.\n> \n> The actual unixctl command is preserved undocumented and serves as an\n> alias for 'pmd-perf-show'.  This should allow old scripts that are just\n> capturing the output for humans (or LLMs?) to read to keep working.\n> Note, however, that the exact output format for unixctl commands was\n> never a guarantee, so scripts that attempt to parse the output may\n> still break.\n> \n\nHi Ilya,\n\nthanks for this, couple of comment below, otherwise LGTM.\n\n> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>\n> ---\n> \n> Note: I believe the change in system-dpdk-offloads.at is correct,\n>       but I didn't run the testsuite, as I have no hardware for it.\n> \n>  Documentation/intro/install/afxdp.rst         |   2 +-\n>  Documentation/intro/install/dpdk.rst          |   2 +-\n>  Documentation/topics/dpdk/bridge.rst          |   4 +-\n>  Documentation/topics/dpdk/pmd.rst             |   4 -\n>  NEWS                                          |   4 +\n>  lib/dpif-netdev-perf.c                        |  39 +++--\n>  lib/dpif-netdev-perf.h                        |   2 +-\n>  lib/dpif-netdev-unixctl.man                   |  62 ++++---\n>  lib/dpif-netdev.c                             | 158 ++++--------------\n>  tests/dpif-netdev.at                          |  20 +--\n>  tests/pmd.at                                  |  47 +++---\n>  tests/system-dpdk-offloads.at                 |   8 +-\n>  .../plugins/system-logs/openvswitch.xml       |   2 +-\n>  13 files changed, 136 insertions(+), 218 deletions(-)\n> \n> diff --git a/Documentation/intro/install/afxdp.rst b/Documentation/intro/install/afxdp.rst\n> index 63a10e328..07225a885 100644\n> --- a/Documentation/intro/install/afxdp.rst\n> +++ b/Documentation/intro/install/afxdp.rst\n> @@ -273,7 +273,7 @@ Measure your system call rate by doing::\n>  \n>  Or, use OVS pmd tool::\n>  \n> -  ovs-appctl dpif-netdev/pmd-stats-show\n> +  ovs-appctl dpif-netdev/pmd-perf-show\n>  \n>  \n>  Example Script\n> diff --git a/Documentation/intro/install/dpdk.rst b/Documentation/intro/install/dpdk.rst\n> index 6f4687bde..d5c897e8b 100644\n> --- a/Documentation/intro/install/dpdk.rst\n> +++ b/Documentation/intro/install/dpdk.rst\n> @@ -709,7 +709,7 @@ level:\n>  \n>  The average number of packets per output batch can be checked in PMD stats::\n>  \n> -    $ ovs-appctl dpif-netdev/pmd-stats-show\n> +    $ ovs-appctl dpif-netdev/pmd-perf-show\n>  \n>  Limitations\n>  ------------\n> diff --git a/Documentation/topics/dpdk/bridge.rst b/Documentation/topics/dpdk/bridge.rst\n> index 03c4dd4e3..4468b904b 100644\n> --- a/Documentation/topics/dpdk/bridge.rst\n> +++ b/Documentation/topics/dpdk/bridge.rst\n> @@ -103,7 +103,7 @@ the packet itself and others (for example, VLAN tag or Ethernet type) can be\n>  extracted without fully parsing the packet.  This allows OVS to significantly\n>  speed up packet forwarding for these flows with simple match criteria.\n>  Statistics on the number of packets matched in this way can be found in a\n> -`simple match hits` counter of `ovs-appctl dpif-netdev/pmd-stats-show` command.\n> +`Simple Match hits` counter of `ovs-appctl dpif-netdev/pmd-perf-show` command.\n>  \n>  EMC Insertion Probability\n>  -------------------------\n> @@ -127,7 +127,7 @@ If ``N`` is set to 1, an insertion will be performed for every flow. If set to\n>  With default ``N`` set to 100, higher megaflow hits will occur initially as\n>  observed with pmd stats::\n>  \n> -    $ ovs-appctl dpif-netdev/pmd-stats-show\n> +    $ ovs-appctl dpif-netdev/pmd-perf-show\n>  \n>  For certain traffic profiles with many parallel flows, it's recommended to set\n>  ``N`` to '0' to achieve higher forwarding performance.\n> diff --git a/Documentation/topics/dpdk/pmd.rst b/Documentation/topics/dpdk/pmd.rst\n> index 2e8cf5edb..1589d521c 100644\n> --- a/Documentation/topics/dpdk/pmd.rst\n> +++ b/Documentation/topics/dpdk/pmd.rst\n> @@ -57,10 +57,6 @@ PMD Thread Statistics\n>  \n>  To show current stats::\n>  \n> -    $ ovs-appctl dpif-netdev/pmd-stats-show\n> -\n> -or::\n> -\n>      $ ovs-appctl dpif-netdev/pmd-perf-show\n>  \n>  Detailed performance metrics for ``pmd-perf-show`` can also be enabled::\n> diff --git a/NEWS b/NEWS\n> index 1a3044cbf..b35bcff6e 100644\n> --- a/NEWS\n> +++ b/NEWS\n> @@ -3,6 +3,10 @@ Post-v3.7.0\n>     - Userspace datapath:\n>       * ARP/ND lookups for native tunnel are now rate limited. The holdout\n>         timer can be configured with 'tnl/neigh/retrans_time'.\n> +   - ovs-appctl:\n> +     * 'dpif-netdev/pmd-stats-show' command was removed in favor of the more\n> +       informative and better structured 'dpif-netdev/pmd-perf-show', which\n> +       now also provides statistics for the \"main\" thread.\n>  \n>  \n>  v3.7.0 - 16 Feb 2026\n> diff --git a/lib/dpif-netdev-perf.c b/lib/dpif-netdev-perf.c\n> index 1cd4ee084..ba370d7c1 100644\n> --- a/lib/dpif-netdev-perf.c\n> +++ b/lib/dpif-netdev-perf.c\n> @@ -233,7 +233,8 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s,\n>      uint64_t sleep_iter = stats[PMD_SLEEP_ITER];\n>      uint64_t tot_sleep_cycles = stats[PMD_CYCLES_SLEEP];\n>  \n> -    ds_put_format(str,\n> +    if (tot_iter) {\n\nWhile the change is to cater for main thread, it also changes display\nfor pmd cores with no iterations. Previously there was:\n\npmd thread numa_id 1 core_id 9:\n\n  Iterations:                    0  (0.00 us/it)\n  - Used TSC cycles:             0  (  0.0 % of total cycles)\n  - idle iterations:             0  (  0.0 % of used cycles)\n  - busy iterations:             0  (  0.0 % of used cycles)\n  - sleep iterations:            0  (  0.0 % of iterations)\n  Sleep time (us):               0  (  0 us/iteration avg.)\n  Rx packets:                    0\n  Tx packets:                    0\n\nThat is now changed so that iterations of zero are implicit.\n\npmd thread numa_id 1 core_id 11:\n\n  Rx packets:                    0\n  Tx packets:                    0\n\n\nConsidering we can also have a case where there are iterations but no\npackets like below, i think we should leave zero iterations explicit for\npmd thread as it currently is.\n\npmd thread numa_id 0 core_id 8:\n\n  Iterations:             17369522  (0.15 us/it)\n  - Used TSC cycles:    6816002305  ( 80.1 % of total cycles)\n  - idle iterations:      17369522  (100.0 % of used cycles)\n  - busy iterations:             0  (  0.0 % of used cycles)\n  - sleep iterations:            0  (  0.0 % of iterations)\n  Sleep time (us):               0  (  0 us/iteration avg.)\n  Rx packets:                    0\n  Tx packets:                    0\n\n\nI agree that for main thread it doesn't make sense to display it, so\nmaybe we could add a bool to pmd_perf_format_overall_stats() args to\nmake showing the iteration section conditional, then set differently\nwhen the non pmd core in pmd_info_show_perf().\n\n> +        ds_put_format(str,\n>              \"  Iterations:         %12\"PRIu64\"  (%.2f us/it)\\n\"\n\n>              \"  - Used TSC cycles:  %12\"PRIu64\"  (%5.1f %% of total cycles)\\n\"\n\naside from comments above, with current version there is no need to\nre-check for tot_iter (not shown in diff)\n\n>              \"  - idle iterations:  %12\"PRIu64\"  (%5.1f %% of used cycles)\\n\"\n> @@ -252,9 +253,18 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s,\n>              sleep_iter, tot_iter ? 100.0 * sleep_iter / tot_iter : 0,\n>              tot_sleep_cycles * us_per_cycle,\n>              sleep_iter ? (tot_sleep_cycles * us_per_cycle) / sleep_iter : 0);\n> +    }\n>      if (rx_packets > 0) {\n>          ds_put_format(str,\n> -            \"  Rx packets:         %12\"PRIu64\"  (%.0f Kpps, %.0f cycles/pkt)\\n\"\n> +            \"  Rx packets:         %12\"PRIu64\"  (%.0f Kpps\",\n> +            rx_packets, (rx_packets / duration) / 1000);\n> +        if (tot_iter) {\n> +            ds_put_format(str, \", %.0f cycles/pkt\",\n> +                1.0 * stats[PMD_CYCLES_ITER_BUSY] / rx_packets);\n> +        }\n> +        ds_put_cstr(str, \")\\n\");\n> +\n> +        ds_put_format(str,\n>              \"  Datapath passes:    %12\"PRIu64\"  (%.2f passes/pkt)\\n\"\n>              \"  - PHWOL hits:       %12\"PRIu64\"  (%5.1f %%)\\n\"\n>              \"  - MFEX Opt hits:    %12\"PRIu64\"  (%5.1f %%)\\n\"\n> @@ -262,11 +272,7 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s,\n>              \"  - EMC hits:         %12\"PRIu64\"  (%5.1f %%)\\n\"\n>              \"  - SMC hits:         %12\"PRIu64\"  (%5.1f %%)\\n\"\n>              \"  - Megaflow hits:    %12\"PRIu64\"  (%5.1f %%, %.2f \"\n> -                                                 \"subtbl lookups/hit)\\n\"\n> -            \"  - Upcalls:          %12\"PRIu64\"  (%5.1f %%, %.1f us/upcall)\\n\"\n> -            \"  - Lost upcalls:     %12\"PRIu64\"  (%5.1f %%)\\n\",\n> -            rx_packets, (rx_packets / duration) / 1000,\n> -            1.0 * stats[PMD_CYCLES_ITER_BUSY] / rx_packets,\n> +                                                 \"subtbl lookups/hit)\\n\",\n>              passes, 1.0 * passes / rx_packets,\n>              stats[PMD_STAT_PHWOL_HIT],\n>              100.0 * stats[PMD_STAT_PHWOL_HIT] / passes,\n> @@ -282,11 +288,20 @@ pmd_perf_format_overall_stats(struct ds *str, struct pmd_perf_stats *s,\n>              100.0 * stats[PMD_STAT_MASKED_HIT] / passes,\n>              stats[PMD_STAT_MASKED_HIT]\n>              ? 1.0 * stats[PMD_STAT_MASKED_LOOKUP] / stats[PMD_STAT_MASKED_HIT]\n> -            : 0,\n> -            upcalls, 100.0 * upcalls / passes,\n> -            upcalls ? (upcall_cycles * us_per_cycle) / upcalls : 0,\n> -            stats[PMD_STAT_LOST],\n> -            100.0 * stats[PMD_STAT_LOST] / passes);\n> +            : 0);\n> +\n> +        ds_put_format(str,\n> +            \"  - Upcalls:          %12\"PRIu64\"  (%5.1f %%\",\n> +            upcalls, 100.0 * upcalls / passes);\n> +        if (tot_iter) {\n> +            ds_put_format(str, \", %.1f us/upcall\",\n> +                upcalls ? (upcall_cycles * us_per_cycle) / upcalls : 0);\n> +        }\n> +        ds_put_cstr(str, \")\\n\");\n> +\n> +        ds_put_format(str,\n> +            \"  - Lost upcalls:     %12\"PRIu64\"  (%5.1f %%)\\n\",\n> +            stats[PMD_STAT_LOST], 100.0 * stats[PMD_STAT_LOST] / passes);\n>      } else {\n>          ds_put_format(str,\n>              \"  Rx packets:         %12d\\n\", 0);\n> diff --git a/lib/dpif-netdev-perf.h b/lib/dpif-netdev-perf.h\n> index 84beced15..8a41afa8a 100644\n> --- a/lib/dpif-netdev-perf.h\n> +++ b/lib/dpif-netdev-perf.h\n> @@ -317,7 +317,7 @@ void pmd_perf_read_counters(struct pmd_perf_stats *s,\n>   * NON-PMD they might be updated from multiple threads, but we can live\n>   * with losing a rare update as 100% accuracy is not required.\n>   * However, as counters are read for display from outside the PMD thread\n> - * with e.g. pmd-stats-show, we make sure that the 64-bit read and store\n> + * with e.g. pmd-perf-show, we make sure that the 64-bit read and store\n>   * operations are atomic also on 32-bit systems so that readers cannot\n>   * not read garbage. On 64-bit systems this incurs no overhead. */\n>  \n> diff --git a/lib/dpif-netdev-unixctl.man b/lib/dpif-netdev-unixctl.man\n> index 8cd847416..3d5ab437c 100644\n> --- a/lib/dpif-netdev-unixctl.man\n> +++ b/lib/dpif-netdev-unixctl.man\n> @@ -6,44 +6,22 @@ argument can be omitted. By default the commands present data for all pmd\n>  threads in the datapath. By specifying the \"-pmd Core\" option one can filter\n>  the output for a single pmd in the datapath.\n>  .\n> -.IP \"\\fBdpif-netdev/pmd-stats-show\\fR [\\fB-pmd\\fR \\fIcore\\fR] [\\fIdp\\fR]\"\n> -Shows performance statistics for one or all pmd threads of the datapath\n> -\\fIdp\\fR. The special thread \"main\" sums up the statistics of every non pmd\n> -thread.\n> -\n> -The sum of \"phwol hits\", \"simple match hits\", \"emc hits\", \"smc hits\",\n> -\"megaflow hits\" and \"miss\" is the number of packet lookups performed by the\n> -datapath. Beware that a recirculated packet experiences one additional lookup\n> -per recirculation, so there may be more lookups than forwarded packets in the\n> -datapath.\n> -\n> -The MFEX Opt hits displays the number of packets that are processed by the\n> -optimized miniflow extract implementations.\n> -\n> -Cycles are counted using the TSC or similar facilities (when available on\n> -the platform). The duration of one cycle depends on the processing platform.\n> -\n> -\"idle cycles\" refers to cycles spent in PMD iterations not forwarding any\n> -any packets. \"processing cycles\" refers to cycles spent in PMD iterations\n> -forwarding at least one packet, including the cost for polling, processing and\n> -transmitting said packets.\n> -\n> -To reset these counters use \\fBdpif-netdev/pmd-stats-clear\\fR.\n> -.\n>  .IP \"\\fBdpif-netdev/pmd-stats-clear\\fR [\\fIdp\\fR]\"\n>  Resets to zero the per pmd thread performance numbers shown by the\n> -\\fBdpif-netdev/pmd-stats-show\\fR and \\fBdpif-netdev/pmd-perf-show\\fR commands.\n> -It will NOT reset datapath or bridge statistics, only the values shown by\n> -the above commands.\n> +\\fBdpif-netdev/pmd-perf-show\\fR command.  It will NOT reset datapath or bridge\n> +statistics, only the values shown by the above command.\n>  .\n>  .IP \"\\fBdpif-netdev/pmd-perf-show\\fR [\\fB-nh\\fR] [\\fB-it\\fR \\fIiter_len\\fR] \\\n>  [\\fB-ms\\fR \\fIms_len\\fR] [\\fB-pmd\\fR \\fIcore\\fR] [\\fIdp\\fR]\"\n>  Shows detailed performance metrics for one or all pmds threads of the\n> -user space datapath.\n> +user space datapath.  The special thread \"main\" sums up the statistics of every\n> +non pmd thread.\n>  \n> -The collection of detailed statistics can be controlled by a new\n> -configuration parameter \"other_config:pmd-perf-metrics\". By default it\n> -is disabled. The run-time overhead, when enabled, is in the order of 1%.\n> +The collection of additional detailed statistics can be controlled by a\n> +configuration parameter \\fBother-config:pmd-perf-metrics\\fR.  By default it is\n> +disabled.  The run-time overhead, when enabled, is in the order of 1%.\n> +\n> +Collected statistics include:\n>  \n>  .RS\n>  .IP\n> @@ -153,8 +131,26 @@ pmd thread numa_id 0 core_id 1:\n>  .RE\n>  .IP\n>  Here \"Rx packets\" actually reflects the number of packets forwarded by the\n> -datapath. \"Datapath passes\" matches the number of packet lookups as\n> -reported by the \\fBdpif-netdev/pmd-stats-show\\fR command.\n> +datapath.\n> +\n> +The sum of \"PHWOL hits\", \"Simple Match hits\", \"EMC hits\", \"SMC hits\",\n> +\"Megaflow hits\" and \"Upcalls\" is the number of packet lookups performed by the\n> +datapath and it is reported as \"Datapath passes\".  Beware that a recirculated\n> +packet experiences one additional lookup per recirculation, so there may be\n> +more lookups than forwarded packets in the datapath.\n> +\n> +The \"MFEX Opt hits\" displays the number of packets that are processed by the\n> +optimized miniflow extract implementations.\n> +\n> +Cycles are counted using the TSC or similar facilities (when available on\n> +the platform).  The duration of one cycle depends on the processing platform.\n> +Statistics based on cycles are not reported for the \"main\" thread, since the\n> +accurate accounting of CPU cycles is not possible in this case.\n> +\n> +\"idle iterations\" refers to PMD iterations that didn't not result in processing\n\ntypo, \"didn't not\"\n\nthanks,\nKevin.\n\n> +any packets.  \"busy iterations\" refers to PMD iterations that included\n> +processing of at least one packet.  The reported used TSC cycles include the\n> +cost for polling, processing and transmitting said packets.\n>  \n>  To reset the counters and start a new measurement use\n>  \\fBdpif-netdev/pmd-stats-clear\\fR.\n> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c\n> index 9df05c4c2..db5823a91 100644\n> --- a/lib/dpif-netdev.c\n> +++ b/lib/dpif-netdev.c\n> @@ -620,8 +620,7 @@ get_dp_netdev(const struct dpif *dpif)\n>  }\n>  \f\n>  enum pmd_info_type {\n> -    PMD_INFO_SHOW_STATS,  /* Show how cpu cycles are spent. */\n> -    PMD_INFO_CLEAR_STATS, /* Set the cycles count to 0. */\n> +    PMD_INFO_CLEAR_STATS, /* Set the cycle and the packet counters to 0. */\n>      PMD_INFO_SHOW_RXQ,    /* Show poll lists of pmd threads. */\n>      PMD_INFO_PERF_SHOW,   /* Show pmd performance details. */\n>      PMD_INFO_SLEEP_SHOW,  /* Show max sleep configuration details. */\n> @@ -641,127 +640,42 @@ format_pmd_thread(struct ds *reply, struct dp_netdev_pmd_thread *pmd)\n>      ds_put_cstr(reply, \":\\n\");\n>  }\n>  \n> -static void\n> -pmd_info_show_stats(struct ds *reply,\n> -                    struct dp_netdev_pmd_thread *pmd)\n> -{\n> -    uint64_t stats[PMD_N_STATS];\n> -    uint64_t total_cycles, total_packets;\n> -    double passes_per_pkt = 0;\n> -    double lookups_per_hit = 0;\n> -    double packets_per_batch = 0;\n> -\n> -    pmd_perf_read_counters(&pmd->perf_stats, stats);\n> -    total_cycles = stats[PMD_CYCLES_ITER_IDLE]\n> -                         + stats[PMD_CYCLES_ITER_BUSY];\n> -    total_packets = stats[PMD_STAT_RECV];\n> -\n> -    format_pmd_thread(reply, pmd);\n> -\n> -    if (total_packets > 0) {\n> -        passes_per_pkt = (total_packets + stats[PMD_STAT_RECIRC])\n> -                            / (double) total_packets;\n> -    }\n> -    if (stats[PMD_STAT_MASKED_HIT] > 0) {\n> -        lookups_per_hit = stats[PMD_STAT_MASKED_LOOKUP]\n> -                            / (double) stats[PMD_STAT_MASKED_HIT];\n> -    }\n> -    if (stats[PMD_STAT_SENT_BATCHES] > 0) {\n> -        packets_per_batch = stats[PMD_STAT_SENT_PKTS]\n> -                            / (double) stats[PMD_STAT_SENT_BATCHES];\n> -    }\n> -\n> -    ds_put_format(reply,\n> -                  \"  packets received: %\"PRIu64\"\\n\"\n> -                  \"  packet recirculations: %\"PRIu64\"\\n\"\n> -                  \"  avg. datapath passes per packet: %.02f\\n\"\n> -                  \"  phwol hits: %\"PRIu64\"\\n\"\n> -                  \"  mfex opt hits: %\"PRIu64\"\\n\"\n> -                  \"  simple match hits: %\"PRIu64\"\\n\"\n> -                  \"  emc hits: %\"PRIu64\"\\n\"\n> -                  \"  smc hits: %\"PRIu64\"\\n\"\n> -                  \"  megaflow hits: %\"PRIu64\"\\n\"\n> -                  \"  avg. subtable lookups per megaflow hit: %.02f\\n\"\n> -                  \"  miss with success upcall: %\"PRIu64\"\\n\"\n> -                  \"  miss with failed upcall: %\"PRIu64\"\\n\"\n> -                  \"  avg. packets per output batch: %.02f\\n\",\n> -                  total_packets, stats[PMD_STAT_RECIRC],\n> -                  passes_per_pkt, stats[PMD_STAT_PHWOL_HIT],\n> -                  stats[PMD_STAT_MFEX_OPT_HIT],\n> -                  stats[PMD_STAT_SIMPLE_HIT],\n> -                  stats[PMD_STAT_EXACT_HIT],\n> -                  stats[PMD_STAT_SMC_HIT],\n> -                  stats[PMD_STAT_MASKED_HIT],\n> -                  lookups_per_hit, stats[PMD_STAT_MISS], stats[PMD_STAT_LOST],\n> -                  packets_per_batch);\n> -\n> -    if (total_cycles == 0) {\n> -        return;\n> -    }\n> -\n> -    ds_put_format(reply,\n> -                  \"  idle cycles: %\"PRIu64\" (%.02f%%)\\n\"\n> -                  \"  processing cycles: %\"PRIu64\" (%.02f%%)\\n\",\n> -                  stats[PMD_CYCLES_ITER_IDLE],\n> -                  stats[PMD_CYCLES_ITER_IDLE] / (double) total_cycles * 100,\n> -                  stats[PMD_CYCLES_ITER_BUSY],\n> -                  stats[PMD_CYCLES_ITER_BUSY] / (double) total_cycles * 100);\n> -\n> -    if (total_packets == 0) {\n> -        return;\n> -    }\n> -\n> -    ds_put_format(reply,\n> -                  \"  avg cycles per packet: %.02f (%\"PRIu64\"/%\"PRIu64\")\\n\",\n> -                  total_cycles / (double) total_packets,\n> -                  total_cycles, total_packets);\n> -\n> -    ds_put_format(reply,\n> -                  \"  avg processing cycles per packet: \"\n> -                  \"%.02f (%\"PRIu64\"/%\"PRIu64\")\\n\",\n> -                  stats[PMD_CYCLES_ITER_BUSY] / (double) total_packets,\n> -                  stats[PMD_CYCLES_ITER_BUSY], total_packets);\n> -}\n> -\n>  static void\n>  pmd_info_show_perf(struct ds *reply,\n>                     struct dp_netdev_pmd_thread *pmd,\n>                     struct pmd_perf_params *par)\n>  {\n> -    if (pmd->core_id != NON_PMD_CORE_ID) {\n\n\n\n\n\n> -        char *time_str =\n> -                xastrftime_msec(\"%H:%M:%S.###\", time_wall_msec(), true);\n> -        long long now = time_msec();\n> -        double duration = (now - pmd->perf_stats.start_ms) / 1000.0;\n> -\n> -        ds_put_cstr(reply, \"\\n\");\n> -        ds_put_format(reply, \"Time: %s\\n\", time_str);\n> -        ds_put_format(reply, \"Measurement duration: %.3f s\\n\", duration);\n> -        ds_put_cstr(reply, \"\\n\");\n> -        format_pmd_thread(reply, pmd);\n> -        ds_put_cstr(reply, \"\\n\");\n> -        pmd_perf_format_overall_stats(reply, &pmd->perf_stats, duration);\n> -        if (pmd_perf_metrics_enabled(pmd)) {\n> -            /* Prevent parallel clearing of perf metrics. */\n> -            ovs_mutex_lock(&pmd->perf_stats.clear_mutex);\n> -            if (par->histograms) {\n> -                ds_put_cstr(reply, \"\\n\");\n> -                pmd_perf_format_histograms(reply, &pmd->perf_stats);\n> -            }\n> -            if (par->iter_hist_len > 0) {\n> -                ds_put_cstr(reply, \"\\n\");\n> -                pmd_perf_format_iteration_history(reply, &pmd->perf_stats,\n> -                        par->iter_hist_len);\n> -            }\n> -            if (par->ms_hist_len > 0) {\n> -                ds_put_cstr(reply, \"\\n\");\n> -                pmd_perf_format_ms_history(reply, &pmd->perf_stats,\n> -                        par->ms_hist_len);\n> -            }\n> -            ovs_mutex_unlock(&pmd->perf_stats.clear_mutex);\n> +    char *time_str = xastrftime_msec(\"%H:%M:%S.###\", time_wall_msec(), true);\n> +    long long now = time_msec();\n> +    double duration = (now - pmd->perf_stats.start_ms) / 1000.0;\n> +\n> +    ds_put_cstr(reply, \"\\n\");\n> +    ds_put_format(reply, \"Time: %s\\n\", time_str);\n> +    ds_put_format(reply, \"Measurement duration: %.3f s\\n\", duration);\n> +    ds_put_cstr(reply, \"\\n\");\n> +    format_pmd_thread(reply, pmd);\n> +    ds_put_cstr(reply, \"\\n\");\n> +    pmd_perf_format_overall_stats(reply, &pmd->perf_stats, duration);\n> +    if (pmd_perf_metrics_enabled(pmd) && pmd->core_id != NON_PMD_CORE_ID) {\n> +        /* Prevent parallel clearing of perf metrics. */\n> +        ovs_mutex_lock(&pmd->perf_stats.clear_mutex);\n> +        if (par->histograms) {\n> +            ds_put_cstr(reply, \"\\n\");\n> +            pmd_perf_format_histograms(reply, &pmd->perf_stats);\n>          }\n> -        free(time_str);\n> +        if (par->iter_hist_len > 0) {\n> +            ds_put_cstr(reply, \"\\n\");\n> +            pmd_perf_format_iteration_history(reply, &pmd->perf_stats,\n> +                    par->iter_hist_len);\n> +        }\n> +        if (par->ms_hist_len > 0) {\n> +            ds_put_cstr(reply, \"\\n\");\n> +            pmd_perf_format_ms_history(reply, &pmd->perf_stats,\n> +                    par->ms_hist_len);\n> +        }\n> +        ovs_mutex_unlock(&pmd->perf_stats.clear_mutex);\n>      }\n> +    free(time_str);\n>  }\n>  \n>  static int\n> @@ -1443,8 +1357,6 @@ dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],\n>              pmd_info_show_rxq(&reply, pmd, secs);\n>          } else if (type == PMD_INFO_CLEAR_STATS) {\n>              pmd_perf_stats_clear(&pmd->perf_stats);\n> -        } else if (type == PMD_INFO_SHOW_STATS) {\n> -            pmd_info_show_stats(&reply, pmd);\n>          } else if (type == PMD_INFO_PERF_SHOW) {\n>              pmd_info_show_perf(&reply, pmd, (struct pmd_perf_params *)aux);\n>          } else if (type == PMD_INFO_SLEEP_SHOW) {\n> @@ -1554,14 +1466,10 @@ dpif_netdev_bond_show(struct unixctl_conn *conn, int argc,\n>  static int\n>  dpif_netdev_init(void)\n>  {\n> -    static enum pmd_info_type show_aux = PMD_INFO_SHOW_STATS,\n> -                              clear_aux = PMD_INFO_CLEAR_STATS,\n> +    static enum pmd_info_type clear_aux = PMD_INFO_CLEAR_STATS,\n>                                poll_aux = PMD_INFO_SHOW_RXQ,\n>                                sleep_aux = PMD_INFO_SLEEP_SHOW;\n>  \n> -    unixctl_command_register(\"dpif-netdev/pmd-stats-show\", \"[-pmd core] [dp]\",\n> -                             0, 3, dpif_netdev_pmd_info,\n> -                             (void *)&show_aux);\n>      unixctl_command_register(\"dpif-netdev/pmd-stats-clear\", \"[-pmd core] [dp]\",\n>                               0, 3, dpif_netdev_pmd_info,\n>                               (void *)&clear_aux);\n> @@ -1578,6 +1486,10 @@ dpif_netdev_init(void)\n>                               \" [-pmd core] [dp]\",\n>                               0, 8, pmd_perf_show_cmd,\n>                               NULL);\n> +    /* 'pmd-stats-show' is just an undocumented alias for 'pmd-perf-show',\n> +     * for compatibility with old muscle memory. */\n> +    unixctl_command_register(\"dpif-netdev/pmd-stats-show\", NULL,\n> +                             0, 8, pmd_perf_show_cmd, NULL);\n>      unixctl_command_register(\"dpif-netdev/pmd-rxq-rebalance\", \"[dp]\",\n>                               0, 1, dpif_netdev_pmd_rebalance,\n>                               NULL);\n> diff --git a/tests/dpif-netdev.at b/tests/dpif-netdev.at\n> index 231197970..405094856 100644\n> --- a/tests/dpif-netdev.at\n> +++ b/tests/dpif-netdev.at\n> @@ -979,32 +979,32 @@ AT_CHECK([cat good_frame | sed -e \"s/6b72/dead/\" > bad_frame])\n>  \n>  CHECK_FWD_PACKET(p1, p2, , [bad_frame], [bad_frame])\n>  dnl First packet, no simple matching.\n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | grep 'simple match hits'], [0], [dnl\n> -  simple match hits: 0\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | grep 'Simple Match hits'], [0], [dnl\n> +  - Simple Match hits:           0  (  0.0 %)\n>  ])\n>  \n>  dnl No Rx flag.\n>  CHECK_FWD_PACKET(p1, p2, , [bad_frame], [bad_frame])\n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | grep 'simple match hits'], [0], [dnl\n> -  simple match hits: 1\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | grep 'Simple Match hits'], [0], [dnl\n> +  - Simple Match hits:           1  ( 50.0 %)\n>  ])\n>  \n>  dnl Flag as Rx good.\n>  CHECK_FWD_PACKET(p1, p2, ol_l4_rx_csum_set_good, [bad_frame], [bad_frame])\n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | grep 'simple match hits'], [0], [dnl\n> -  simple match hits: 2\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | grep 'Simple Match hits'], [0], [dnl\n> +  - Simple Match hits:           2  ( 66.7 %)\n>  ])\n>  \n>  dnl Flag as Rx bad.\n>  CHECK_FWD_PACKET(p1, p2, ol_l4_rx_csum_set_bad, [bad_frame], [bad_frame])\n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | grep 'simple match hits'], [0], [dnl\n> -  simple match hits: 3\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | grep 'Simple Match hits'], [0], [dnl\n> +  - Simple Match hits:           3  ( 75.0 %)\n>  ])\n>  \n>  dnl Flag as Rx partial.\n>  CHECK_FWD_PACKET(p1, p2, ol_l4_rx_csum_set_partial, [bad_frame], [good_frame])\n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | grep 'simple match hits'], [0], [dnl\n> -  simple match hits: 4\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | grep 'Simple Match hits'], [0], [dnl\n> +  - Simple Match hits:           4  ( 80.0 %)\n>  ])\n>  \n>  OVS_VSWITCHD_STOP\n> diff --git a/tests/pmd.at b/tests/pmd.at\n> index 8254ac3b0..e8590044a 100644\n> --- a/tests/pmd.at\n> +++ b/tests/pmd.at\n> @@ -440,20 +440,12 @@ dummy@ovs-dummy: hit:0 missed:0\n>      p0 7/1: (dummy-pmd: n_rxq=4, n_txq=1, numa_id=0)\n>  ])\n>  \n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 12], [0], [dnl\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | sed SED_NUMA_CORE_PATTERN \\\n> +            | sed '/cycles/d' | sed '/[[Ii]]teration/d' | grep pmd -A 3], [0], [dnl\n>  pmd thread numa_id <cleared> core_id <cleared>:\n> -  packets received: 0\n> -  packet recirculations: 0\n> -  avg. datapath passes per packet: 0.00\n> -  phwol hits: 0\n> -  mfex opt hits: 0\n> -  simple match hits: 0\n> -  emc hits: 0\n> -  smc hits: 0\n> -  megaflow hits: 0\n> -  avg. subtable lookups per megaflow hit: 0.00\n> -  miss with success upcall: 0\n> -  miss with failed upcall: 0\n> +\n> +  Rx packets:                    0\n> +  Tx packets:                    0\n>  ])\n>  \n>  ovs-appctl time/stop\n> @@ -474,20 +466,23 @@ AT_CHECK([cat ovs-vswitchd.log | filter_flow_install | strip_xout], [0], [dnl\n>  recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth(src=50:54:00:00:00:77,dst=50:54:00:00:01:78),eth_type(0x0800),ipv4(frag=no), actions: <del>\n>  ])\n>  \n> -AT_CHECK([ovs-appctl dpif-netdev/pmd-stats-show | sed SED_NUMA_CORE_PATTERN | sed '/cycles/d' | grep pmd -A 12], [0], [dnl\n> +AT_CHECK([ovs-appctl dpif-netdev/pmd-perf-show | sed SED_NUMA_CORE_PATTERN \\\n> +            | sed '/cycles/d' | sed '/[[Ii]]teration/d' \\\n> +            | sed 's/, .* us/, <cleared> us/' \\\n> +            | sed 's/[[0-9]]* Kpps/<cleared> Kpps/' | grep pmd -A 12], [0], [dnl\n>  pmd thread numa_id <cleared> core_id <cleared>:\n> -  packets received: 20\n> -  packet recirculations: 0\n> -  avg. datapath passes per packet: 1.00\n> -  phwol hits: 0\n> -  mfex opt hits: 0\n> -  simple match hits: 0\n> -  emc hits: 19\n> -  smc hits: 0\n> -  megaflow hits: 0\n> -  avg. subtable lookups per megaflow hit: 0.00\n> -  miss with success upcall: 1\n> -  miss with failed upcall: 0\n> +\n> +  Datapath passes:              20  (1.00 passes/pkt)\n> +  - PHWOL hits:                  0  (  0.0 %)\n> +  - MFEX Opt hits:               0  (  0.0 %)\n> +  - Simple Match hits:           0  (  0.0 %)\n> +  - EMC hits:                   19  ( 95.0 %)\n> +  - SMC hits:                    0  (  0.0 %)\n> +  - Megaflow hits:               0  (  0.0 %, 0.00 subtbl lookups/hit)\n> +  - Upcalls:                     1  (  5.0 %, <cleared> us/upcall)\n> +  - Lost upcalls:                0  (  0.0 %)\n> +  Tx packets:                   20  (<cleared> Kpps)\n> +  Tx batches:                   20  (1.00 pkts/batch)\n>  ])\n>  \n>  OVS_VSWITCHD_STOP\n> diff --git a/tests/system-dpdk-offloads.at b/tests/system-dpdk-offloads.at\n> index 81ab89b2f..09bdaf639 100644\n> --- a/tests/system-dpdk-offloads.at\n> +++ b/tests/system-dpdk-offloads.at\n> @@ -144,8 +144,8 @@ AT_CHECK([ovs-appctl dpctl/dump-flows type=dpdk,partially-offloaded \\\n>  in_port(2),eth_type(0x0800),ipv4(frag=no), packets:9, bytes:954, used:0.0s, actions:check_pkt_len(size=200,gt(4),le(5)),3\n>  ])\n>  \n> -AT_CHECK([test $(ovs-appctl dpif-netdev/pmd-stats-show | \\\n> -                 awk '/phwol hits:/ {sum += $3} END {print sum}') -ge 8])\n> +AT_CHECK([test $(ovs-appctl dpif-netdev/pmd-perf-show | \\\n> +                 awk '/PHWOL hits:/ {sum += $4} END {print sum}') -ge 8])\n>  \n>  OVS_TRAFFIC_VSWITCHD_STOP\n>  AT_CLEANUP\n> @@ -216,8 +216,8 @@ OVS_WAIT_UNTIL_EQUAL(\n>  in_port(ovs-p0),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:50, bytes:3000, used:0.0s, actions:ovs-p1\n>  in_port(ovs-p1),eth(macs),eth_type(0x0800),ipv4(frag=no), packets:50, bytes:3000, used:0.0s, actions:ovs-p0])\n>  \n> -AT_CHECK([test $(ovs-appctl dpif-netdev/pmd-stats-show | \\\n> -              awk '/packets received:/ {sum += $3} END {print sum}') -lt 10])\n> +AT_CHECK([test $(ovs-appctl dpif-netdev/pmd-perf-show | \\\n> +              awk '/Rx packets:/ {sum += $3} END {print sum}') -lt 10])\n>  \n>  OVS_TRAFFIC_VSWITCHD_STOP\n>  AT_CLEANUP\n> diff --git a/utilities/bugtool/plugins/system-logs/openvswitch.xml b/utilities/bugtool/plugins/system-logs/openvswitch.xml\n> index 46c731812..0f17add75 100644\n> --- a/utilities/bugtool/plugins/system-logs/openvswitch.xml\n> +++ b/utilities/bugtool/plugins/system-logs/openvswitch.xml\n> @@ -20,7 +20,7 @@\n>      <directory label=\"ovsdb-backups\" filters=\"ovs\" pattern=\".*/conf.db.backup[0-9][^/]*$\">/etc/openvswitch</directory>\n>      <directory label=\"ovsdb-backups2\" filters=\"ovs\" pattern=\".*/conf.db.backup[0-9][^/]*$\">/var/lib/openvswitch</directory>\n>      <command label=\"system_memory_status\" filters=\"ovs\">df -h</command>\n> -    <command label=\"check_number_of_pmds\" filters=\"ovs\">ovs-appctl dpif-netdev/pmd-stats-show | grep pmd</command>\n> +    <command label=\"check_number_of_pmds\" filters=\"ovs\">ovs-appctl dpif-netdev/pmd-perf-show | grep pmd</command>\n>      <command label=\"ovs-appctl-vlog-list\" filters=\"ovs\">ovs-appctl vlog/list</command>\n>      <command label=\"journalctl\" filters=\"ovs\">journalctl</command>\n>      <command label=\"user_limits\" filters=\"ovs\">ulimit -a</command>","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","ovs-dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","ovs-dev@lists.linuxfoundation.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=aXJhYtH5;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)","smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=aXJhYtH5","smtp1.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","smtp1.osuosl.org;\n dkim=fail reason=\"signature verification failed\" (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=aXJhYtH5"],"Received":["from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxF192MFkz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 20:41:17 +1000 (AEST)","from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 048A760702;\n\tThu, 16 Apr 2026 10:41:15 +0000 (UTC)","from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id SQhGAi8G-g7B; Thu, 16 Apr 2026 10:41:12 +0000 (UTC)","from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 39FF9606E5;\n\tThu, 16 Apr 2026 10:41:12 +0000 (UTC)","from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id E36A0C054A;\n\tThu, 16 Apr 2026 10:41:11 +0000 (UTC)","from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 08E93C0549\n for <ovs-dev@openvswitch.org>; Thu, 16 Apr 2026 10:41:11 +0000 (UTC)","from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id D2F9380C92\n for <ovs-dev@openvswitch.org>; Thu, 16 Apr 2026 10:41:10 +0000 (UTC)","from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id BoIqrhJ-tRTk for <ovs-dev@openvswitch.org>;\n Thu, 16 Apr 2026 10:41:09 +0000 (UTC)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by smtp1.osuosl.org (Postfix) with ESMTPS id F39CD80C7E\n for <ovs-dev@openvswitch.org>; Thu, 16 Apr 2026 10:41:08 +0000 (UTC)","from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-607-OQVDGwT3PnOt3CD8HlGJGg-1; Thu, 16 Apr 2026 06:41:05 -0400","by mail-wm1-f70.google.com with SMTP id\n 5b1f17b1804b1-488bd1ee9e7so49384735e9.1\n for <ovs-dev@openvswitch.org>; Thu, 16 Apr 2026 03:41:05 -0700 (PDT)","from [192.168.0.65] ([78.16.130.11])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-488f58165e1sm41520245e9.2.2026.04.16.03.40.59\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 03:41:00 -0700 (PDT)"],"X-Virus-Scanned":["amavis at osuosl.org","amavis at osuosl.org"],"X-Comment":"SPF check N/A for local connections - client-ip=140.211.9.56;\n helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ","DKIM-Filter":["OpenDKIM Filter v2.11.0 smtp3.osuosl.org 39FF9606E5","OpenDKIM Filter v2.11.0 smtp1.osuosl.org F39CD80C7E"],"Received-SPF":"Pass (mailfrom) identity=mailfrom; client-ip=170.10.129.124;\n helo=us-smtp-delivery-124.mimecast.com; envelope-from=ktraynor@redhat.com;\n receiver=<UNKNOWN>","DMARC-Filter":"OpenDMARC Filter v1.4.2 smtp1.osuosl.org F39CD80C7E","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776336067;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references:autocrypt:autocrypt;\n bh=uRHDbsA9WJOj7/3ZabjQ2DsWNjjrNknTYUl2Pydb0AY=;\n b=aXJhYtH55FTZNbpaDdoS46tLpM5eEP4639T7BkIoQ8XV3nShwFx/9OMwmM4tawFqeaRIjJ\n uRLRUiH1JpFiF89xLOV0fkPCOU6b4oRTalNP8IxUxqj5PHUeuonuqioFgqcMgtA512il3j\n xQBn4o/SLHm9MDiH2eWUaztOj5x4URA=","X-MC-Unique":"OQVDGwT3PnOt3CD8HlGJGg-1","X-Mimecast-MFC-AGG-ID":"OQVDGwT3PnOt3CD8HlGJGg_1776336064","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776336062; x=1776940862;\n h=content-transfer-encoding:in-reply-to:cc:to:autocrypt:from\n :content-language:references:subject:user-agent:mime-version:date\n :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=jWdXX0ZRTlQ7ui0gbT/N3uO88zjpYoBsDJ4FgL/kfPk=;\n b=GNVjTyOr+RfA+h81mSr+pz0kaU8LNIs/p7yJ6CiIx/N+em9PbOE/HAnED4Fv54Hwrb\n mwwTiJzBsEXrHRJ6QIkFlf/yaikDyw/tHA8+0QUB7GcKnASEE2llbuK8cUP0yV5Uu4xB\n 2SceOHGncQ5cKQIhaQGDs44dNa6bSxvKwVzaHLDsdl9WKp49ALMlweNvQdsf25jI0b6g\n +19v9qKkFp+Y83A72gVFnoB3rTZX1+SnARWkzZa4SK45YWaH3GeJXq2VrQmtwxmnHXGD\n kVhJ/qRfCkeZCP4B7cKOZ6/LiSMQcuPAWlz7IqWHEHB8DW59sstWSKZXeCmlyCLF2dhj\n chPA==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+TXBEN6/WaHcbhcIFo6hhICoae0tPSYNTI8hLultO53AWaQ/SSTYYPFxWGfhGmpZwWBwQvg/ZR@openvswitch.org","X-Gm-Message-State":"AOJu0Yzpn8IeWWMpMAPfMreV5K01C83UEP1o+QKR6KqcaKBUHFTn5zcx\n krB4/WrkIDdG+9t8QMT1Po5YChXhIcGi3njCBPWxUtkMqznyXBJ+MWLlfM6WhL/NFy5VgBnLUzs\n C+GxsVC2AdcztePP2YRmo5C1xvyc3RykFLgrccQjI3BePDdWcXhEzwQbg+xo=","X-Gm-Gg":"AeBDiet9CeMsmbA05DjsfUjqzlYI67MabS76l1Om08viP0lgHSuT5RHb2fa3z5r+oD8\n yJV3LSg/o3KBDqeXQU41M2RdL9hpzNRWLJUd6OOVIToRT15BIfCUoQVXigLjCJKuYYlX40e+AA4\n WxUvL2cBIOEhcI7v/aDPSvz3Nq6HVV3frai1k97+pkasxLbekWiluL9LGhsWa320Ti8fFSTQw1s\n ImE6OLz41z4L+HVynMgPlphbqMof1knqb3FCH1EYWUqOTZQw5cuwcvdpffFvbGLKqj80FQUHLpj\n 86kNCihzxNB9eNTSgC9CEjnF4iwmwDGiQf99ddSKVpAKqaXAASopZxDFlDAf7UNUmLiMFj7kyuO\n KEkqCdY46Qnk+kQg6ECysGnHPXCsAOCNfHg==","X-Received":["by 2002:a05:600c:a105:b0:486:d76c:fa57 with SMTP id\n 5b1f17b1804b1-488d685b75emr245599405e9.17.1776336062047;\n Thu, 16 Apr 2026 03:41:02 -0700 (PDT)","by 2002:a05:600c:a105:b0:486:d76c:fa57 with SMTP id\n 5b1f17b1804b1-488d685b75emr245599025e9.17.1776336061244;\n Thu, 16 Apr 2026 03:41:01 -0700 (PDT)"],"Message-ID":"<3b04299a-f445-45da-8007-70320ccd1c51@redhat.com>","Date":"Thu, 16 Apr 2026 11:40:58 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","References":"<20260408171644.1404735-1-i.maximets@ovn.org>","Autocrypt":"addr=ktraynor@redhat.com; keydata=\n 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","To":"Ilya Maximets <i.maximets@ovn.org>, ovs-dev@openvswitch.org","In-Reply-To":"<20260408171644.1404735-1-i.maximets@ovn.org>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"NJfE6IF3nYYCdJ3LZ0RlvqJC0jNYzkMfuU261Mbc_io_1776336064","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Subject":"Re: [ovs-dev] [PATCH] dpif-netdev: Remove pmd-stats-show in favor\n of pmd-perf-show.","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","From":"Kevin Traynor via dev <ovs-dev@openvswitch.org>","Reply-To":"Kevin Traynor <ktraynor@redhat.com>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"ovs-dev-bounces@openvswitch.org","Sender":"\"dev\" <ovs-dev-bounces@openvswitch.org>"}}]