diff --git a/SOURCES/openvswitch-2.15.0.patch b/SOURCES/openvswitch-2.15.0.patch index 939148e..1c8c7a5 100644 --- a/SOURCES/openvswitch-2.15.0.patch +++ b/SOURCES/openvswitch-2.15.0.patch @@ -11,6 +11,21 @@ index 3e5136fd4e..dd29a4182d 100755 TESTSUITEFLAGS=-j4 RECHECK=yes; then # testsuite.log is necessary for debugging. cat */_build/sub/tests/testsuite.log +diff --git a/Documentation/topics/dpdk/pmd.rst b/Documentation/topics/dpdk/pmd.rst +index caa7d97bef..e481e79414 100644 +--- a/Documentation/topics/dpdk/pmd.rst ++++ b/Documentation/topics/dpdk/pmd.rst +@@ -239,7 +239,9 @@ If not set, the default variance improvement threshold is 25%. + + PMD Auto Load Balancing doesn't currently work if queues are assigned + cross NUMA as actual processing load could get worse after assignment +- as compared to what dry run predicts. ++ as compared to what dry run predicts. The only exception is when all ++ PMD threads are running on cores from a single NUMA node. In this case ++ Auto Load Balancing is still possible. + + The minimum time between 2 consecutive PMD auto load balancing iterations can + also be configured by:: diff --git a/Documentation/topics/dpdk/qos.rst b/Documentation/topics/dpdk/qos.rst index 103495415a..a98ec672fc 100644 --- a/Documentation/topics/dpdk/qos.rst @@ -90,7 +105,7 @@ index 1f2b7a3668..8b5d075840 100644 * New upstream version diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c -index 4381c618f1..816945375b 100644 +index 4381c618f1..94cc9b80c5 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3834,6 +3834,15 @@ dpif_netdev_flow_put(struct dpif *dpif, const struct dpif_flow_put *put) @@ -109,6 +124,40 @@ index 4381c618f1..816945375b 100644 if (put->ufid) { ufid = *put->ufid; } else { +@@ -4878,6 +4887,12 @@ struct rr_numa { + bool idx_inc; + }; + ++static size_t ++rr_numa_list_count(struct rr_numa_list *rr) ++{ ++ return hmap_count(&rr->numas); ++} ++ + static struct rr_numa * + rr_numa_list_lookup(struct rr_numa_list *rr, int numa_id) + { +@@ -5590,10 +5605,17 @@ get_dry_run_variance(struct dp_netdev *dp, uint32_t *core_list, + for (int i = 0; i < n_rxqs; i++) { + int numa_id = netdev_get_numa_id(rxqs[i]->port->netdev); + numa = rr_numa_list_lookup(&rr, numa_id); ++ /* If there is no available pmd on the local numa but there is only one ++ * numa for cross-numa polling, we can estimate the dry run. */ ++ if (!numa && rr_numa_list_count(&rr) == 1) { ++ numa = rr_numa_list_next(&rr, NULL); ++ } + if (!numa) { +- /* Abort if cross NUMA polling. */ +- VLOG_DBG("PMD auto lb dry run." +- " Aborting due to cross-numa polling."); ++ VLOG_DBG("PMD auto lb dry run: " ++ "There's no available (non-isolated) PMD thread on NUMA " ++ "node %d for port '%s' and there are PMD threads on more " ++ "than one NUMA node available for cross-NUMA polling. " ++ "Aborting.", numa_id, netdev_rxq_get_name(rxqs[i]->rx)); + goto cleanup; + } + diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 6be23dbeed..15b25084b3 100644 --- a/lib/netdev-linux.c diff --git a/SPECS/openvswitch2.15.spec b/SPECS/openvswitch2.15.spec index 331808d..54b94af 100644 --- a/SPECS/openvswitch2.15.spec +++ b/SPECS/openvswitch2.15.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.15.0 -Release: 3%{?dist} +Release: 5%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -697,6 +697,14 @@ exit 0 %endif %changelog +* Mon Mar 22 2021 Kevin Traynor - 2.15.0-5 +- dpif-netdev: Allow PMD auto load balance with cross-numa. (#1941673) + [47e2824210c7a4368aa6cb8044fecffcb4674dd2] + +* Fri Mar 19 2021 Kevin Traynor - 2.15.0-4 +- redhat: Update docs for test builds + [7620c95a37c78451988a0be905237990dd2af166] + * Tue Mar 16 2021 Open vSwitch CI - 2.15.0-3 - Merging upstream branch-2.15 [c4fc969d7eeee55f3b6b248018c9575a83710044]