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 <[email protected]> Reviewed-by: David Marchand <[email protected]> --- 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 --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 -- 2.41.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
