diff mbox series

[ovs-dev,v2] tests: Add PMD auto load balance unit tests.

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

Commit Message

Kevin Traynor March 16, 2021, 3:45 p.m. UTC
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

Comments

Pai G, Sunil March 16, 2021, 5:46 p.m. UTC | #1
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>
Kevin Traynor May 5, 2021, 1:34 p.m. UTC | #2
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])
>
Kevin Traynor June 8, 2021, 12:47 p.m. UTC | #3
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])
>>
>
Kevin Traynor June 8, 2021, 1:05 p.m. UTC | #4
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
>
Ilya Maximets June 23, 2021, 8:49 p.m. UTC | #5
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.
Kevin Traynor June 24, 2021, 1:05 p.m. UTC | #6
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 mbox series

Patch

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])