Message ID | 20210316154532.127858-1-ktraynor@redhat.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [ovs-dev,v2] tests: Add PMD auto load balance unit tests. | expand |
Hey Kevin > -----Original Message----- > From: Kevin Traynor <ktraynor@redhat.com> > Sent: Tuesday, March 16, 2021 9:16 PM > To: dev@openvswitch.org > Cc: david.marchand@redhat.com; Pai G, Sunil <sunil.pai.g@intel.com>; Kevin > Traynor <ktraynor@redhat.com> > Subject: [PATCH v2] tests: Add PMD auto load balance unit tests. > > These tests focus on enabling/disabling and user parameters. > > Co-Authored-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: Kevin Traynor <ktraynor@redhat.com> > > --- > v2: > - Remove above max documented interval test > - Add David's code to combine param checks and add as co-author > --- > tests/alb.at | 218 > +++++++++++++++++++++++++++++++++++++++++++++ > tests/automake.mk | 1 + > tests/testsuite.at | 1 + > 3 files changed, 220 insertions(+) > create mode 100644 tests/alb.at LGTM Acked-by: Sunil Pai G <sunil.pai.g@intel.com>
Ping. Any objection to adding these unit tests? On 16/03/2021 15:45, Kevin Traynor wrote: > These tests focus on enabling/disabling and user parameters. > > Co-Authored-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: Kevin Traynor <ktraynor@redhat.com> > > --- > v2: > - Remove above max documented interval test > - Add David's code to combine param checks and add as co-author > --- > tests/alb.at | 218 +++++++++++++++++++++++++++++++++++++++++++++ > tests/automake.mk | 1 + > tests/testsuite.at | 1 + > 3 files changed, 220 insertions(+) > create mode 100644 tests/alb.at > > diff --git a/tests/alb.at b/tests/alb.at > new file mode 100644 > index 000000000..0ea1bbdd1 > --- /dev/null > +++ b/tests/alb.at > @@ -0,0 +1,218 @@ > +AT_BANNER([PMD Auto Load Balance]) > + > +m4_divert_push([PREPARE_TESTS]) > + > +get_log_line_num () { > + LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) > +} > + > +m4_divert_pop([PREPARE_TESTS]) > + > +m4_define([DUMMY_NUMA], [--dummy-numa="0,0"]) > + > +dnl CHECK_ALB_PARAM([param], [value], [+line]) > +dnl > +dnl Waits for ALB logs for 'param' in logs and checks if value matches > +dnl 'value'. Checking starts from line number 'line' in ovs-vswithd.log. > +m4_define([CHECK_ALB_PARAM], [ > + line_st=$3 > + if [[ -z "$line_st" ]] > + then > + line_st="+0" > + fi > + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) > + AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl > +PMD auto load balance $1 set to $2 > +]) > +]) > + > +AT_SETUP([ALB - default state]) > +OVS_VSWITCHD_START > +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - enable/disable]) > +OVS_VSWITCHD_START([add-port br0 p0 \ > + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ > + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ > + -- set open_vswitch . other_config:pmd-auto-lb="true"], > + [], [], [DUMMY_NUMA]) > +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) > + > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > + > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - min num PMD/RxQ]) > +OVS_VSWITCHD_START([add-port br0 p0 \ > + -- set Interface p0 type=dummy-pmd options:n_rxq=2 \ > + -- set Open_vSwitch . other_config:pmd-cpu-mask=1 \ > + -- set open_vswitch . other_config:pmd-auto-lb="true"], > + [], [], [DUMMY_NUMA]) > +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) > + > +# Add more PMD > +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) > +OVS_WAIT_UNTIL([grep "There are 2 pmd threads on numa node" ovs-vswitchd.log]) > + > +# Add one more rxq to have 2 rxq on a PMD > +get_log_line_num > +AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=3]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) > + > +# Reduce PMD > +get_log_line_num > +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > + > +# Check logs when try to enable but min PMD/RxQ prevents > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - PMD/RxQ assignment type]) > +OVS_VSWITCHD_START([add-port br0 p0 \ > + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ > + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ > + -- set open_vswitch . other_config:pmd-auto-lb="true"], > + [], [], [DUMMY_NUMA]) > +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) > + > +# Change assignment type > +get_log_line_num > +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > + > +# Change back assignment type > +get_log_line_num > +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) > + > +# Check logs when try to enable but assignment prevents > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - interval param]) > +OVS_VSWITCHD_START > +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) > + > +# Check default > +CHECK_ALB_PARAM([interval], [1 mins], []) > + > +# Set new value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="10"]) > +CHECK_ALB_PARAM([interval], [10 mins], [+$LINENUM]) > + > +# Set min value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="1"]) > +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) > + > +# Set max value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20000"]) > +CHECK_ALB_PARAM([interval], [20000 mins], [+$LINENUM]) > + > +# Set below min value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="0"]) > +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) > + > +# No check for above max as it is only a documented max value and not a hard limit > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - improvement param]) > +OVS_VSWITCHD_START > +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) > + > +# Check default > +CHECK_ALB_PARAM([improvement threshold], [25%], []) > + > +# Set new value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=60]) > +CHECK_ALB_PARAM([improvement threshold], [60%], [+$LINENUM]) > + > +# Set min value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=0]) > +CHECK_ALB_PARAM([improvement threshold], [0%], [+$LINENUM]) > + > +# Set below min value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=-1]) > +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) > + > +# Set max value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=100]) > +CHECK_ALB_PARAM([improvement threshold], [100%], [+$LINENUM]) > + > +# Set above max value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=101]) > +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > + > +AT_SETUP([ALB - load param]) > +OVS_VSWITCHD_START > +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) > + > +# Check default > +CHECK_ALB_PARAM([load threshold], [95%], []) > + > +# Set to new value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=70]) > +CHECK_ALB_PARAM([load threshold], [70%], [+$LINENUM]) > + > +# Set to min value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=0]) > +CHECK_ALB_PARAM([load threshold], [0%], [+$LINENUM]) > + > +# Set to below min > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=-1]) > +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) > + > +# Set to max > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=100]) > +CHECK_ALB_PARAM([load threshold], [100%], [+$LINENUM]) > + > +# Set above max value > +get_log_line_num > +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=101]) > +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) > + > +OVS_VSWITCHD_STOP > +AT_CLEANUP > diff --git a/tests/automake.mk b/tests/automake.mk > index 44a65849c..b9e841843 100644 > --- a/tests/automake.mk > +++ b/tests/automake.mk > @@ -63,4 +63,5 @@ TESTSUITE_AT = \ > tests/jsonrpc-py.at \ > tests/pmd.at \ > + tests/alb.at \ > tests/tunnel.at \ > tests/tunnel-push-pop.at \ > diff --git a/tests/testsuite.at b/tests/testsuite.at > index 73699918d..58adfa09c 100644 > --- a/tests/testsuite.at > +++ b/tests/testsuite.at > @@ -61,4 +61,5 @@ m4_include([tests/ofproto.at]) > m4_include([tests/dpif-netdev.at]) > m4_include([tests/pmd.at]) > +m4_include([tests/alb.at]) > m4_include([tests/dpctl.at]) > m4_include([tests/ofproto-dpif.at]) >
Ping On 05/05/2021 14:34, Kevin Traynor wrote: > Ping. Any objection to adding these unit tests? > > On 16/03/2021 15:45, Kevin Traynor wrote: >> These tests focus on enabling/disabling and user parameters. >> >> Co-Authored-by: David Marchand <david.marchand@redhat.com> >> Signed-off-by: David Marchand <david.marchand@redhat.com> >> Signed-off-by: Kevin Traynor <ktraynor@redhat.com> >> >> --- >> v2: >> - Remove above max documented interval test >> - Add David's code to combine param checks and add as co-author >> --- >> tests/alb.at | 218 +++++++++++++++++++++++++++++++++++++++++++++ >> tests/automake.mk | 1 + >> tests/testsuite.at | 1 + >> 3 files changed, 220 insertions(+) >> create mode 100644 tests/alb.at >> >> diff --git a/tests/alb.at b/tests/alb.at >> new file mode 100644 >> index 000000000..0ea1bbdd1 >> --- /dev/null >> +++ b/tests/alb.at >> @@ -0,0 +1,218 @@ >> +AT_BANNER([PMD Auto Load Balance]) >> + >> +m4_divert_push([PREPARE_TESTS]) >> + >> +get_log_line_num () { >> + LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) >> +} >> + >> +m4_divert_pop([PREPARE_TESTS]) >> + >> +m4_define([DUMMY_NUMA], [--dummy-numa="0,0"]) >> + >> +dnl CHECK_ALB_PARAM([param], [value], [+line]) >> +dnl >> +dnl Waits for ALB logs for 'param' in logs and checks if value matches >> +dnl 'value'. Checking starts from line number 'line' in ovs-vswithd.log. >> +m4_define([CHECK_ALB_PARAM], [ >> + line_st=$3 >> + if [[ -z "$line_st" ]] >> + then >> + line_st="+0" >> + fi >> + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) >> + AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl >> +PMD auto load balance $1 set to $2 >> +]) >> +]) >> + >> +AT_SETUP([ALB - default state]) >> +OVS_VSWITCHD_START >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - enable/disable]) >> +OVS_VSWITCHD_START([add-port br0 p0 \ >> + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ >> + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ >> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >> + [], [], [DUMMY_NUMA]) >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) >> + >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> + >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - min num PMD/RxQ]) >> +OVS_VSWITCHD_START([add-port br0 p0 \ >> + -- set Interface p0 type=dummy-pmd options:n_rxq=2 \ >> + -- set Open_vSwitch . other_config:pmd-cpu-mask=1 \ >> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >> + [], [], [DUMMY_NUMA]) >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >> + >> +# Add more PMD >> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) >> +OVS_WAIT_UNTIL([grep "There are 2 pmd threads on numa node" ovs-vswitchd.log]) >> + >> +# Add one more rxq to have 2 rxq on a PMD >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=3]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >> + >> +# Reduce PMD >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> + >> +# Check logs when try to enable but min PMD/RxQ prevents >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - PMD/RxQ assignment type]) >> +OVS_VSWITCHD_START([add-port br0 p0 \ >> + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ >> + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ >> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >> + [], [], [DUMMY_NUMA]) >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) >> + >> +# Change assignment type >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> + >> +# Change back assignment type >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >> + >> +# Check logs when try to enable but assignment prevents >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - interval param]) >> +OVS_VSWITCHD_START >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >> + >> +# Check default >> +CHECK_ALB_PARAM([interval], [1 mins], []) >> + >> +# Set new value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="10"]) >> +CHECK_ALB_PARAM([interval], [10 mins], [+$LINENUM]) >> + >> +# Set min value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="1"]) >> +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) >> + >> +# Set max value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20000"]) >> +CHECK_ALB_PARAM([interval], [20000 mins], [+$LINENUM]) >> + >> +# Set below min value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="0"]) >> +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) >> + >> +# No check for above max as it is only a documented max value and not a hard limit >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - improvement param]) >> +OVS_VSWITCHD_START >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >> + >> +# Check default >> +CHECK_ALB_PARAM([improvement threshold], [25%], []) >> + >> +# Set new value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=60]) >> +CHECK_ALB_PARAM([improvement threshold], [60%], [+$LINENUM]) >> + >> +# Set min value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=0]) >> +CHECK_ALB_PARAM([improvement threshold], [0%], [+$LINENUM]) >> + >> +# Set below min value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=-1]) >> +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) >> + >> +# Set max value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=100]) >> +CHECK_ALB_PARAM([improvement threshold], [100%], [+$LINENUM]) >> + >> +# Set above max value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=101]) >> +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> + >> +AT_SETUP([ALB - load param]) >> +OVS_VSWITCHD_START >> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >> + >> +# Check default >> +CHECK_ALB_PARAM([load threshold], [95%], []) >> + >> +# Set to new value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=70]) >> +CHECK_ALB_PARAM([load threshold], [70%], [+$LINENUM]) >> + >> +# Set to min value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=0]) >> +CHECK_ALB_PARAM([load threshold], [0%], [+$LINENUM]) >> + >> +# Set to below min >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=-1]) >> +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) >> + >> +# Set to max >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=100]) >> +CHECK_ALB_PARAM([load threshold], [100%], [+$LINENUM]) >> + >> +# Set above max value >> +get_log_line_num >> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=101]) >> +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) >> + >> +OVS_VSWITCHD_STOP >> +AT_CLEANUP >> diff --git a/tests/automake.mk b/tests/automake.mk >> index 44a65849c..b9e841843 100644 >> --- a/tests/automake.mk >> +++ b/tests/automake.mk >> @@ -63,4 +63,5 @@ TESTSUITE_AT = \ >> tests/jsonrpc-py.at \ >> tests/pmd.at \ >> + tests/alb.at \ >> tests/tunnel.at \ >> tests/tunnel-push-pop.at \ >> diff --git a/tests/testsuite.at b/tests/testsuite.at >> index 73699918d..58adfa09c 100644 >> --- a/tests/testsuite.at >> +++ b/tests/testsuite.at >> @@ -61,4 +61,5 @@ m4_include([tests/ofproto.at]) >> m4_include([tests/dpif-netdev.at]) >> m4_include([tests/pmd.at]) >> +m4_include([tests/alb.at]) >> m4_include([tests/dpctl.at]) >> m4_include([tests/ofproto-dpif.at]) >> >
Not sure why some names seemed dropped out of CC. Re-adding. On 08/06/2021 13:47, Kevin Traynor wrote: > Ping > > On 05/05/2021 14:34, Kevin Traynor wrote: >> Ping. Any objection to adding these unit tests? >> >> On 16/03/2021 15:45, Kevin Traynor wrote: >>> These tests focus on enabling/disabling and user parameters. >>> >>> Co-Authored-by: David Marchand <david.marchand@redhat.com> >>> Signed-off-by: David Marchand <david.marchand@redhat.com> >>> Signed-off-by: Kevin Traynor <ktraynor@redhat.com> >>> >>> --- >>> v2: >>> - Remove above max documented interval test >>> - Add David's code to combine param checks and add as co-author >>> --- >>> tests/alb.at | 218 +++++++++++++++++++++++++++++++++++++++++++++ >>> tests/automake.mk | 1 + >>> tests/testsuite.at | 1 + >>> 3 files changed, 220 insertions(+) >>> create mode 100644 tests/alb.at >>> >>> diff --git a/tests/alb.at b/tests/alb.at >>> new file mode 100644 >>> index 000000000..0ea1bbdd1 >>> --- /dev/null >>> +++ b/tests/alb.at >>> @@ -0,0 +1,218 @@ >>> +AT_BANNER([PMD Auto Load Balance]) >>> + >>> +m4_divert_push([PREPARE_TESTS]) >>> + >>> +get_log_line_num () { >>> + LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) >>> +} >>> + >>> +m4_divert_pop([PREPARE_TESTS]) >>> + >>> +m4_define([DUMMY_NUMA], [--dummy-numa="0,0"]) >>> + >>> +dnl CHECK_ALB_PARAM([param], [value], [+line]) >>> +dnl >>> +dnl Waits for ALB logs for 'param' in logs and checks if value matches >>> +dnl 'value'. Checking starts from line number 'line' in ovs-vswithd.log. >>> +m4_define([CHECK_ALB_PARAM], [ >>> + line_st=$3 >>> + if [[ -z "$line_st" ]] >>> + then >>> + line_st="+0" >>> + fi >>> + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) >>> + AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl >>> +PMD auto load balance $1 set to $2 >>> +]) >>> +]) >>> + >>> +AT_SETUP([ALB - default state]) >>> +OVS_VSWITCHD_START >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - enable/disable]) >>> +OVS_VSWITCHD_START([add-port br0 p0 \ >>> + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ >>> + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ >>> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >>> + [], [], [DUMMY_NUMA]) >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) >>> + >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> + >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - min num PMD/RxQ]) >>> +OVS_VSWITCHD_START([add-port br0 p0 \ >>> + -- set Interface p0 type=dummy-pmd options:n_rxq=2 \ >>> + -- set Open_vSwitch . other_config:pmd-cpu-mask=1 \ >>> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >>> + [], [], [DUMMY_NUMA]) >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >>> + >>> +# Add more PMD >>> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) >>> +OVS_WAIT_UNTIL([grep "There are 2 pmd threads on numa node" ovs-vswitchd.log]) >>> + >>> +# Add one more rxq to have 2 rxq on a PMD >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=3]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >>> + >>> +# Reduce PMD >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> + >>> +# Check logs when try to enable but min PMD/RxQ prevents >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - PMD/RxQ assignment type]) >>> +OVS_VSWITCHD_START([add-port br0 p0 \ >>> + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ >>> + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ >>> + -- set open_vswitch . other_config:pmd-auto-lb="true"], >>> + [], [], [DUMMY_NUMA]) >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) >>> + >>> +# Change assignment type >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> + >>> +# Change back assignment type >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) >>> + >>> +# Check logs when try to enable but assignment prevents >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) >>> +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - interval param]) >>> +OVS_VSWITCHD_START >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >>> + >>> +# Check default >>> +CHECK_ALB_PARAM([interval], [1 mins], []) >>> + >>> +# Set new value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="10"]) >>> +CHECK_ALB_PARAM([interval], [10 mins], [+$LINENUM]) >>> + >>> +# Set min value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="1"]) >>> +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) >>> + >>> +# Set max value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20000"]) >>> +CHECK_ALB_PARAM([interval], [20000 mins], [+$LINENUM]) >>> + >>> +# Set below min value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="0"]) >>> +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) >>> + >>> +# No check for above max as it is only a documented max value and not a hard limit >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - improvement param]) >>> +OVS_VSWITCHD_START >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >>> + >>> +# Check default >>> +CHECK_ALB_PARAM([improvement threshold], [25%], []) >>> + >>> +# Set new value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=60]) >>> +CHECK_ALB_PARAM([improvement threshold], [60%], [+$LINENUM]) >>> + >>> +# Set min value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=0]) >>> +CHECK_ALB_PARAM([improvement threshold], [0%], [+$LINENUM]) >>> + >>> +# Set below min value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=-1]) >>> +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) >>> + >>> +# Set max value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=100]) >>> +CHECK_ALB_PARAM([improvement threshold], [100%], [+$LINENUM]) >>> + >>> +# Set above max value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=101]) >>> +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> + >>> +AT_SETUP([ALB - load param]) >>> +OVS_VSWITCHD_START >>> +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) >>> + >>> +# Check default >>> +CHECK_ALB_PARAM([load threshold], [95%], []) >>> + >>> +# Set to new value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=70]) >>> +CHECK_ALB_PARAM([load threshold], [70%], [+$LINENUM]) >>> + >>> +# Set to min value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=0]) >>> +CHECK_ALB_PARAM([load threshold], [0%], [+$LINENUM]) >>> + >>> +# Set to below min >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=-1]) >>> +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) >>> + >>> +# Set to max >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=100]) >>> +CHECK_ALB_PARAM([load threshold], [100%], [+$LINENUM]) >>> + >>> +# Set above max value >>> +get_log_line_num >>> +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=101]) >>> +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) >>> + >>> +OVS_VSWITCHD_STOP >>> +AT_CLEANUP >>> diff --git a/tests/automake.mk b/tests/automake.mk >>> index 44a65849c..b9e841843 100644 >>> --- a/tests/automake.mk >>> +++ b/tests/automake.mk >>> @@ -63,4 +63,5 @@ TESTSUITE_AT = \ >>> tests/jsonrpc-py.at \ >>> tests/pmd.at \ >>> + tests/alb.at \ >>> tests/tunnel.at \ >>> tests/tunnel-push-pop.at \ >>> diff --git a/tests/testsuite.at b/tests/testsuite.at >>> index 73699918d..58adfa09c 100644 >>> --- a/tests/testsuite.at >>> +++ b/tests/testsuite.at >>> @@ -61,4 +61,5 @@ m4_include([tests/ofproto.at]) >>> m4_include([tests/dpif-netdev.at]) >>> m4_include([tests/pmd.at]) >>> +m4_include([tests/alb.at]) >>> m4_include([tests/dpctl.at]) >>> m4_include([tests/ofproto-dpif.at]) >>> >> > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
On 3/16/21 4:45 PM, Kevin Traynor wrote: > These tests focus on enabling/disabling and user parameters. > > Co-Authored-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: David Marchand <david.marchand@redhat.com> > Signed-off-by: Kevin Traynor <ktraynor@redhat.com> > > --- > v2: > - Remove above max documented interval test > - Add David's code to combine param checks and add as co-author > --- > tests/alb.at | 218 +++++++++++++++++++++++++++++++++++++++++++++ > tests/automake.mk | 1 + > tests/testsuite.at | 1 + > 3 files changed, 220 insertions(+) > create mode 100644 tests/alb.at Hi, Kevin. While testing these tests I noticed one thing: get_log_line_num() returns current line and not the next one, so if log didn't change, several subsequent get_log_line_num + OVS_WAIT_UNTIL will succeed. Meaning that it maybe unreliable to test for the same text in a log two times in a row with some command in-between, because command may return faster than logs printed to a file and the check will be performed with the previous line in a log. Suggesting to increase the line number by one to avoid that. I understand that you ported this part from the pmd.at, so we, probably, need to fix that there too in a separate change. Suggesting following incremental: diff --git a/tests/alb.at b/tests/alb.at index 0ea1bbdd1..1331b742c 100644 --- a/tests/alb.at +++ b/tests/alb.at @@ -3,7 +3,7 @@ AT_BANNER([PMD Auto Load Balance]) m4_divert_push([PREPARE_TESTS]) get_log_line_num () { - LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) + LINENUM=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) } m4_divert_pop([PREPARE_TESTS]) @@ -21,7 +21,8 @@ m4_define([CHECK_ALB_PARAM], [ line_st="+0" fi OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) - AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl + AT_CHECK([tail -n $line_st ovs-vswitchd.log dnl + | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl PMD auto load balance $1 set to $2 ]) ]) @@ -107,7 +108,9 @@ OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance get_log_line_num AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) +get_log_line_num AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "mode changed to: 'roundrobin'"]) get_log_line_num AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) --- What do you think? The check around 'roundrobin' is just in case, to be sure that log actually updated. Best regards, Ilya Maximets.
On 23/06/2021 21:49, Ilya Maximets wrote: > On 3/16/21 4:45 PM, Kevin Traynor wrote: >> These tests focus on enabling/disabling and user parameters. >> >> Co-Authored-by: David Marchand <david.marchand@redhat.com> >> Signed-off-by: David Marchand <david.marchand@redhat.com> >> Signed-off-by: Kevin Traynor <ktraynor@redhat.com> >> >> --- >> v2: >> - Remove above max documented interval test >> - Add David's code to combine param checks and add as co-author >> --- >> tests/alb.at | 218 +++++++++++++++++++++++++++++++++++++++++++++ >> tests/automake.mk | 1 + >> tests/testsuite.at | 1 + >> 3 files changed, 220 insertions(+) >> create mode 100644 tests/alb.at > > Hi, Kevin. While testing these tests I noticed one thing: > > get_log_line_num() returns current line and not the next one, so if log > didn't change, several subsequent get_log_line_num + OVS_WAIT_UNTIL > will succeed. Meaning that it maybe unreliable to test for the same > text in a log two times in a row with some command in-between, because > command may return faster than logs printed to a file and the check > will be performed with the previous line in a log. Suggesting to > increase the line number by one to avoid that. I understand that you > ported this part from the pmd.at, so we, probably, need to fix that > there too in a separate change. > Hi Ilya, that makes sense. Even if it was ok for the current tests due to the particular logs, there is a danger that it would be reused again and cause an issue then. I will update here and send a patch for pmd.at. > Suggesting following incremental: > > diff --git a/tests/alb.at b/tests/alb.at > index 0ea1bbdd1..1331b742c 100644 > --- a/tests/alb.at > +++ b/tests/alb.at > @@ -3,7 +3,7 @@ AT_BANNER([PMD Auto Load Balance]) > m4_divert_push([PREPARE_TESTS]) > > get_log_line_num () { > - LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) > + LINENUM=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) > } > > m4_divert_pop([PREPARE_TESTS]) > @@ -21,7 +21,8 @@ m4_define([CHECK_ALB_PARAM], [ > line_st="+0" > fi > OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) > - AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl > + AT_CHECK([tail -n $line_st ovs-vswitchd.log dnl > + | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl > PMD auto load balance $1 set to $2 > ]) > ]) > @@ -107,7 +108,9 @@ OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance > get_log_line_num > AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) > OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > +get_log_line_num > AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) > +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "mode changed to: 'roundrobin'"]) > get_log_line_num > AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) > OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) > --- > > What do you think? > The check around 'roundrobin' is just in case, to be sure that > log actually updated. > Yeah, good idea. In earlier cases it is changing between enable/disable, but I also added similar check on assignment mode change, just to be explicit that it is the reason. thanks, Kevin. > Best regards, Ilya Maximets. >
diff --git a/tests/alb.at b/tests/alb.at new file mode 100644 index 000000000..0ea1bbdd1 --- /dev/null +++ b/tests/alb.at @@ -0,0 +1,218 @@ +AT_BANNER([PMD Auto Load Balance]) + +m4_divert_push([PREPARE_TESTS]) + +get_log_line_num () { + LINENUM=$(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]]) +} + +m4_divert_pop([PREPARE_TESTS]) + +m4_define([DUMMY_NUMA], [--dummy-numa="0,0"]) + +dnl CHECK_ALB_PARAM([param], [value], [+line]) +dnl +dnl Waits for ALB logs for 'param' in logs and checks if value matches +dnl 'value'. Checking starts from line number 'line' in ovs-vswithd.log. +m4_define([CHECK_ALB_PARAM], [ + line_st=$3 + if [[ -z "$line_st" ]] + then + line_st="+0" + fi + OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log | grep "PMD auto load balance $1 set to"]) + AT_CHECK([tail -n $line_st ovs-vswitchd.log | sed -n "s#.*\(PMD auto load balance $1 set to.*\)#\1#p" | tail -1], [0], [dnl +PMD auto load balance $1 set to $2 +]) +]) + +AT_SETUP([ALB - default state]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - enable/disable]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) + +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - min num PMD/RxQ]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=2 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=1 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Add more PMD +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x3]) +OVS_WAIT_UNTIL([grep "There are 2 pmd threads on numa node" ovs-vswitchd.log]) + +# Add one more rxq to have 2 rxq on a PMD +get_log_line_num +AT_CHECK([ovs-vsctl set interface p0 options:n_rxq=3]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +# Reduce PMD +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x1]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +# Check logs when try to enable but min PMD/RxQ prevents +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - PMD/RxQ assignment type]) +OVS_VSWITCHD_START([add-port br0 p0 \ + -- set Interface p0 type=dummy-pmd options:n_rxq=3 \ + -- set Open_vSwitch . other_config:pmd-cpu-mask=3 \ + -- set open_vswitch . other_config:pmd-auto-lb="true"], + [], [], [DUMMY_NUMA]) +OVS_WAIT_UNTIL([grep "PMD auto load balance is enabled" ovs-vswitchd.log]) + +# Change assignment type +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +# Change back assignment type +get_log_line_num +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=cycles]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is enabled"]) + +# Check logs when try to enable but assignment prevents +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="false"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) +AT_CHECK([ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=roundrobin]) +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"]) +OVS_WAIT_UNTIL([tail -n +$LINENUM ovs-vswitchd.log | grep "PMD auto load balance is disabled"]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - interval param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_ALB_PARAM([interval], [1 mins], []) + +# Set new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="10"]) +CHECK_ALB_PARAM([interval], [10 mins], [+$LINENUM]) + +# Set min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="1"]) +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) + +# Set max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="20000"]) +CHECK_ALB_PARAM([interval], [20000 mins], [+$LINENUM]) + +# Set below min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="0"]) +CHECK_ALB_PARAM([interval], [1 mins], [+$LINENUM]) + +# No check for above max as it is only a documented max value and not a hard limit + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - improvement param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_ALB_PARAM([improvement threshold], [25%], []) + +# Set new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=60]) +CHECK_ALB_PARAM([improvement threshold], [60%], [+$LINENUM]) + +# Set min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=0]) +CHECK_ALB_PARAM([improvement threshold], [0%], [+$LINENUM]) + +# Set below min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=-1]) +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) + +# Set max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=100]) +CHECK_ALB_PARAM([improvement threshold], [100%], [+$LINENUM]) + +# Set above max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold=101]) +CHECK_ALB_PARAM([improvement threshold], [25%], [+$LINENUM]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + +AT_SETUP([ALB - load param]) +OVS_VSWITCHD_START +OVS_WAIT_UNTIL([grep "PMD auto load balance is disabled" ovs-vswitchd.log]) + +# Check default +CHECK_ALB_PARAM([load threshold], [95%], []) + +# Set to new value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=70]) +CHECK_ALB_PARAM([load threshold], [70%], [+$LINENUM]) + +# Set to min value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=0]) +CHECK_ALB_PARAM([load threshold], [0%], [+$LINENUM]) + +# Set to below min +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=-1]) +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) + +# Set to max +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=100]) +CHECK_ALB_PARAM([load threshold], [100%], [+$LINENUM]) + +# Set above max value +get_log_line_num +AT_CHECK([ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold=101]) +CHECK_ALB_PARAM([load threshold], [95%], [+$LINENUM]) + +OVS_VSWITCHD_STOP +AT_CLEANUP diff --git a/tests/automake.mk b/tests/automake.mk index 44a65849c..b9e841843 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -63,4 +63,5 @@ TESTSUITE_AT = \ tests/jsonrpc-py.at \ tests/pmd.at \ + tests/alb.at \ tests/tunnel.at \ tests/tunnel-push-pop.at \ diff --git a/tests/testsuite.at b/tests/testsuite.at index 73699918d..58adfa09c 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -61,4 +61,5 @@ m4_include([tests/ofproto.at]) m4_include([tests/dpif-netdev.at]) m4_include([tests/pmd.at]) +m4_include([tests/alb.at]) m4_include([tests/dpctl.at]) m4_include([tests/ofproto-dpif.at])