diff mbox series

[ovs-dev,v4,3/4] dpif-netdev: Add pmd-sleep-show command.

Message ID 20230714180636.644049-4-ktraynor@redhat.com
State Accepted
Commit bc6a6f82e54fc75c2e746423b02f1cfd8065db4e
Headers show
Series PMD load based sleep updates | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test fail github build: failed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Kevin Traynor July 14, 2023, 6:06 p.m. UTC
Max requested sleep time and status for a PMD thread
is logged at start up or when changed, but it can be
convenient to have a command to dump this information
explicitly.

It is envisaged that this will be expanded for individual
pmds in the future, hence adding to dpif_netdev_pmd_info().

Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
 Documentation/topics/dpdk/pmd.rst |  4 ++++
 NEWS                              |  2 ++
 lib/dpif-netdev.c                 | 23 +++++++++++++++++++----
 tests/pmd.at                      | 22 ++++++++++++++++++++++
 4 files changed, 47 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/Documentation/topics/dpdk/pmd.rst b/Documentation/topics/dpdk/pmd.rst
index 9e014ec7b..affd64cc9 100644
--- a/Documentation/topics/dpdk/pmd.rst
+++ b/Documentation/topics/dpdk/pmd.rst
@@ -354,4 +354,8 @@  time not processing packets will be determined by the sleep and processor
 wake-up times and should be tested with each system configuration.
 
+The current configuration of the PMD load based sleeping can be shown with::
+
+    $ ovs-appctl dpif-netdev/pmd-sleep-show
+
 Sleep time statistics for 10 secs can be seen with::
 
diff --git a/NEWS b/NEWS
index a553142d3..f4bc234e3 100644
--- a/NEWS
+++ b/NEWS
@@ -51,4 +51,6 @@  Post-v3.1.0
      * 'pmd-maxsleep' other_config was renamed to 'pmd-sleep-max'.
        'pmd-maxsleep' is deprecated and will be removed in a future release.
+     * 'ovs-appctl dpif-netdev/pmd-sleep-show' command was added to get the
+       max sleep configuration of PMD thread cores.
    - Linux TC offload:
      * Add support for offloading VXLAN tunnels with the GBP extensions.
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 9b11914b3..b8649b94b 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -702,4 +702,5 @@  enum pmd_info_type {
     PMD_INFO_SHOW_RXQ,    /* Show poll lists of pmd threads. */
     PMD_INFO_PERF_SHOW,   /* Show pmd performance details. */
+    PMD_INFO_MAX_SLEEP_SHOW,   /* Show max sleep configuration details. */
 };
 
@@ -1442,5 +1443,7 @@  dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],
     unsigned long long max_secs = (PMD_INTERVAL_LEN * PMD_INTERVAL_MAX)
                                       / INTERVAL_USEC_TO_SEC;
-    bool first_show_rxq = true;
+    uint64_t default_max_sleep = 0;
+    bool show_header = true;
+
 
     ovs_mutex_lock(&dp_netdev_mutex);
@@ -1490,5 +1493,5 @@  dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],
         }
         if (type == PMD_INFO_SHOW_RXQ) {
-            if (first_show_rxq) {
+            if (show_header) {
                 if (!secs || secs > max_secs) {
                     secs = max_secs;
@@ -1499,5 +1502,5 @@  dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],
                 ds_put_format(&reply, "Displaying last %u seconds "
                               "pmd usage %%\n", secs);
-                first_show_rxq = false;
+                show_header = false;
             }
             pmd_info_show_rxq(&reply, pmd, secs);
@@ -1508,4 +1511,12 @@  dpif_netdev_pmd_info(struct unixctl_conn *conn, int argc, const char *argv[],
         } else if (type == PMD_INFO_PERF_SHOW) {
             pmd_info_show_perf(&reply, pmd, (struct pmd_perf_params *)aux);
+        } else if (type == PMD_INFO_MAX_SLEEP_SHOW) {
+            if (show_header) {
+                atomic_read_relaxed(&dp->pmd_max_sleep, &default_max_sleep);
+                ds_put_format(&reply, "Default max sleep: %4"PRIu64" us",
+                              default_max_sleep);
+                ds_put_cstr(&reply, "\n");
+                show_header = false;
+            }
         }
     }
@@ -1608,5 +1619,6 @@  dpif_netdev_init(void)
     static enum pmd_info_type show_aux = PMD_INFO_SHOW_STATS,
                               clear_aux = PMD_INFO_CLEAR_STATS,
-                              poll_aux = PMD_INFO_SHOW_RXQ;
+                              poll_aux = PMD_INFO_SHOW_RXQ,
+                              sleep_aux = PMD_INFO_MAX_SLEEP_SHOW;
 
     unixctl_command_register("dpif-netdev/pmd-stats-show", "[-pmd core] [dp]",
@@ -1620,4 +1632,7 @@  dpif_netdev_init(void)
                              0, 5, dpif_netdev_pmd_info,
                              (void *)&poll_aux);
+    unixctl_command_register("dpif-netdev/pmd-sleep-show", "[dp]",
+                             0, 1, dpif_netdev_pmd_info,
+                             (void *)&sleep_aux);
     unixctl_command_register("dpif-netdev/pmd-perf-show",
                              "[-nh] [-it iter-history-len]"
diff --git a/tests/pmd.at b/tests/pmd.at
index 4dd775bd3..7b1652595 100644
--- a/tests/pmd.at
+++ b/tests/pmd.at
@@ -1278,8 +1278,15 @@  dnl Check default
 CHECK_DP_SLEEP_MAX([0], [disabled], [])
 
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep:    0 us
+])
+
 dnl Check low value max sleep
 get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="1"])
 CHECK_DP_SLEEP_MAX([1], [enabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep:    1 us
+])
 
 dnl Check high value max sleep
@@ -1287,4 +1294,7 @@  get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="10000"])
 CHECK_DP_SLEEP_MAX([10000], [enabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep: 10000 us
+])
 
 dnl Check setting max sleep to zero
@@ -1292,4 +1302,7 @@  get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="0"])
 CHECK_DP_SLEEP_MAX([0], [disabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep:    0 us
+])
 
 dnl Check above high value max sleep
@@ -1297,4 +1310,7 @@  get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="10001"])
 CHECK_DP_SLEEP_MAX([10000], [enabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep: 10000 us
+])
 
 dnl Check rounding
@@ -1302,4 +1318,7 @@  get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="490"])
 CHECK_DP_SLEEP_MAX([490], [enabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep:  490 us
+])
 
 dnl Check rounding
@@ -1307,4 +1326,7 @@  get_log_next_line_num
 AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-sleep-max="499"])
 CHECK_DP_SLEEP_MAX([499], [enabled], [+$LINENUM])
+AT_CHECK([ovs-appctl dpif-netdev/pmd-sleep-show], [0], [dnl
+Default max sleep:  499 us
+])
 
 OVS_VSWITCHD_STOP