Add some tests to ensure that if there are numa local PMDs they are used for polling an rxq.
Also check that if there are only numa non-local PMDs they will be used ito poll the rxq and but the user will be warned. Signed-off-by: Kevin Traynor <ktray...@redhat.com> Acked-by: Sunil Pai G <sunil.pa...@intel.com> Acked-by: David Marchand <david.march...@redhat.com> --- tests/pmd.at | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/tests/pmd.at b/tests/pmd.at index 5ab4415b0..1df35057f 100644 --- a/tests/pmd.at +++ b/tests/pmd.at @@ -196,4 +196,158 @@ OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([PMD - pmd-cpu-mask - NUMA]) +OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy-pmd options:n_rxq=8 options:numa_id=1 -- set Open_vSwitch . other_config:pmd-cpu-mask=1], + [], [], [--dummy-numa 1,1,0,0]) + +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +CHECK_CPU_DISCOVERED(4) +CHECK_PMD_THREADS_CREATED() + +AT_CHECK([ovs-appctl dpif/show | sed 's/\(tx_queues=\)[[0-9]]*/\1<cleared>/g'], [0], [dnl +dummy@ovs-dummy: hit:0 missed:0 + br0: + br0 65534/100: (dummy-internal) + p0 1/1: (dummy-pmd: configured_rx_queues=8, configured_tx_queues=<cleared>, requested_rx_queues=8, requested_tx_queues=<cleared>) +]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | sed SED_NUMA_CORE_PATTERN], [0], [dnl +pmd thread numa_id <cleared> core_id <cleared>: + isolated : false + port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL +]) + +# Force cross-numa polling +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0xc]) +CHECK_PMD_THREADS_CREATED([2], [0], [+$TMP]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using cycles algorithm"]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "There's no available (non-isolated) pmd thread on numa node 1. Port 'p0' rx queue 7 will be assigned to a pmd on numa node 0. This may lead to reduced performance."]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl +port: p0 queue-id: 0 3 4 7 +port: p0 queue-id: 1 2 5 6 +]) + +# Check other assignment types for cross-numa polling +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using roundrobin algorithm"]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "There's no available (non-isolated) pmd thread on numa node 1. Port 'p0' rx queue 7 will be assigned to a pmd on numa node 0. This may lead to reduced performance."]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl +port: p0 queue-id: 0 2 4 6 +port: p0 queue-id: 1 3 5 7 +]) + +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=group]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using group algorithm"]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "There's no available (non-isolated) pmd thread on numa node 1. Port 'p0' rx queue 7 will be assigned to a pmd on numa node 0. This may lead to reduced performance."]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl +port: p0 queue-id: 0 2 4 6 +port: p0 queue-id: 1 3 5 7 +]) + +# Switch back to same numa +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) +CHECK_PMD_THREADS_CREATED([2], [1], [+$TMP]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using group algorithm"]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show | awk '/AVAIL$/ { printf("%s\t", $0); next } 1' | parse_pmd_rxq_show_group | sort], [0], [dnl +port: p0 queue-id: 0 2 4 6 +port: p0 queue-id: 1 3 5 7 +]) + +# Check local numa is only used if available +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x6]) +CHECK_PMD_THREADS_CREATED([1], [0], [+$TMP]) +CHECK_PMD_THREADS_CREATED([1], [1], [+$TMP]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using group algorithm"]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show], [0], [dnl +pmd thread numa_id 1 core_id 1: + isolated : false + port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL +pmd thread numa_id 0 core_id 2: + isolated : false +]) + + +# Check other assignment types +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using roundrobin algorithm"]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show], [0], [dnl +pmd thread numa_id 1 core_id 1: + isolated : false + port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL +pmd thread numa_id 0 core_id 2: + isolated : false +]) + +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Performing pmd to rx queue assignment using cycles algorithm"]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show], [0], [dnl +pmd thread numa_id 1 core_id 1: + isolated : false + port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL +pmd thread numa_id 0 core_id 2: + isolated : false +]) + +# Switch back from mixed numa to single numa +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) +CHECK_PMD_THREADS_CREATED([1], [1], [+$TMP]) + +AT_CHECK([ovs-appctl dpif-netdev/pmd-rxq-show], [0], [dnl +pmd thread numa_id 1 core_id 0: + isolated : false + port: p0 queue-id: 0 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 1 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 2 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 3 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 4 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 5 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 6 (enabled) pmd usage: NOT AVAIL + port: p0 queue-id: 7 (enabled) pmd usage: NOT AVAIL +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP AT_SETUP([PMD - stats]) -- 2.31.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev