diff mbox series

[ovs-dev,v5,3/3] system-dpdk: Add unit test for user configured mempools.

Message ID 20220624101325.1792748-4-ktraynor@redhat.com
State Accepted
Commit 70a9f9e96c2f727a2d9743357f9c2570394572a7
Headers show
Series DPDK shared mempool config. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Kevin Traynor June 24, 2022, 10:13 a.m. UTC
Test that user configured mempool params have been stored.

Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
 tests/system-dpdk.at | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

Comments

Pai G, Sunil July 8, 2022, 9:16 p.m. UTC | #1
Hi Kevin, 

Thanks for the patch, one comment below, let me know your thoughts.

> -----Original Message-----
> From: dev <ovs-dev-bounces@openvswitch.org> On Behalf Of Kevin Traynor
> Sent: Friday, June 24, 2022 3:43 PM
> To: dev@openvswitch.org
> Cc: david.marchand@redhat.com
> Subject: [ovs-dev] [PATCH v5 3/3] system-dpdk: Add unit test for user
> configured mempools.
> 
> Test that user configured mempool params have been stored.
> 
> Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
> Reviewed-by: David Marchand <david.marchand@redhat.com>
> ---
>  tests/system-dpdk.at | 34 ++++++++++++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
> 
> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index
> 7d2715c4a..8889861a2 100644
> --- a/tests/system-dpdk.at
> +++ b/tests/system-dpdk.at
> @@ -13,4 +13,19 @@ m4_define([SYSTEM_DPDK_ALLOWED_LOGS],[
>  ])
> 
> +dnl CHECK_MEMPOOL_PARAM([mtu], [numa], [+line]) dnl dnl Waits for logs
> +to indicate that the user has configured a mempool dnl for 'mtu' on
> +'numa'. Checking starts from line number 'line' in dnl
> +ovs-vswitchd.log.
> +m4_define([CHECK_MEMPOOL_PARAM], [
> +    line_st=$3
> +    if [[ -z "$line_st" ]]
> +    then
> +        line_st="+0"
> +    fi
> +    OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log dnl
> +                   | grep "User configured shared mempool set for: MTU
> +$1, NUMA $2."])
> +])
> +
>  dnl ---------------------------------------------------------------------
> -----
>  dnl Check if EAL init is successful
> @@ -405,2 +420,21 @@ OVS_VSWITCHD_STOP("m4_join([],
> [SYSTEM_DPDK_ALLOWED_LOGS], [  AT_CLEANUP dnl  dnl -----------------------
> ---------------------------------------------------
> +
> +dnl
> +-----------------------------------------------------------------------
> +---
> +dnl Setup user configured mempools
> +AT_SETUP([OVS-DPDK - user configured mempool])
> +AT_KEYWORDS([dpdk])
> +OVS_DPDK_PRE_CHECK()
> +OVS_DPDK_START_OVSDB()
> +OVS_DPDK_START_VSWITCHD()
> +
> +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch .
> +other_config:shared-mempool-config=9000,6000,1500])
> +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch .
> +other_config:dpdk-init=true])
> +
> +CHECK_MEMPOOL_PARAM([9000], [ALL], [])
> +CHECK_MEMPOOL_PARAM([6000], [ALL], [])
> +CHECK_MEMPOOL_PARAM([1500], [ALL], [])
> +
> +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> +AT_CLEANUP
> +dnl
> +-----------------------------------------------------------------------
> +---
> --


The test case seems to be quite simple, how about the following change to test few more cases ?

diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
index 8c36ae655..7f6a0e16f 100644
--- a/tests/system-dpdk.at
+++ b/tests/system-dpdk.at
@@ -596,13 +596,65 @@ OVS_DPDK_PRE_CHECK()
 OVS_DPDK_START_OVSDB()
 OVS_DPDK_START_VSWITCHD()

-AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=9000,6000,1500])
+AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=8000,6000,1500])
 AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])

-CHECK_MEMPOOL_PARAM([9000], [ALL], [])
+CHECK_MEMPOOL_PARAM([8000], [ALL], [])
 CHECK_MEMPOOL_PARAM([6000], [ALL], [])
 CHECK_MEMPOOL_PARAM([1500], [ALL], [])

-OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
+AT_CHECK(ovs-appctl vlog/set netdev_dpdk:dbg)
+
+dnl Find number of sockets
+AT_CHECK([lscpu], [], [stdout])
+AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
+
+
+dnl Add userspace bridge and vhostuser-client port
+AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
+AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
+AT_CHECK([ovs-vsctl show], [], [stdout])
+sleep 2
+
+dnl Parse log file for vhost init
+AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "VHOST_CONFIG: $OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [], [stdout])
+
+dnl Execute testpmd in background
+on_exit "pkill -f -x -9 'tail -f /dev/null'"
+tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
+           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
+           --file-prefix page0 --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
+
+OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
+
+dnl Check if the right user configured mempool is found
+AT_CHECK([grep "Found user configured shared mempool .* suitable for port with MTU 1500" ovs-vswitchd.log], [], [stdout])
+AT_CHECK([grep "Port dpdkvhostuserclient0: Requesting a mempool" ovs-vswitchd.log], [], [stdout])
+
+dnl Change the MTU value to 7000 to trigger mempool change
+TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
+AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=7000)
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Found user configured shared mempool .* suitable for port with MTU 7000"])
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Port dpdkvhostuserclient0: Requesting a mempool"])
+
+dnl Change back the MTU value to 1500 to trigger mempool change(re-use)
+TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
+AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=1500)
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Found user configured shared mempool .* suitable for port with MTU 1500"])
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Reusing mempool"])
+
+dnl Change the MTU value beyond the max value in shared-mempool-config list
+TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
+AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9000)
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "No user configured shared mempool mbuf sizes found suitable for port with MTU 9000"])
+OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Port dpdkvhostuserclient0: Requesting a mempool"])
+
+dnl Clean up
+AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
+OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
+\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
+])")
 AT_CLEANUP
 dnl --------------------------------------------------------------------------


Thanks and regards,
Sunil
Kevin Traynor Sept. 2, 2022, 9:14 a.m. UTC | #2
On 08/07/2022 22:16, Pai G, Sunil wrote:
> Hi Kevin,
> 
> Thanks for the patch, one comment below, let me know your thoughts.
> 

Hi Sunil,

Thanks for the suggestion. These tests look like a good addition. If you 
want to send them formally to the mailing list, I can Ack them.

thanks,
Kevin.

>> -----Original Message-----
>> From: dev <ovs-dev-bounces@openvswitch.org> On Behalf Of Kevin Traynor
>> Sent: Friday, June 24, 2022 3:43 PM
>> To: dev@openvswitch.org
>> Cc: david.marchand@redhat.com
>> Subject: [ovs-dev] [PATCH v5 3/3] system-dpdk: Add unit test for user
>> configured mempools.
>>
>> Test that user configured mempool params have been stored.
>>
>> Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
>> Reviewed-by: David Marchand <david.marchand@redhat.com>
>> ---
>>   tests/system-dpdk.at | 34 ++++++++++++++++++++++++++++++++++
>>   1 file changed, 34 insertions(+)
>>
>> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index
>> 7d2715c4a..8889861a2 100644
>> --- a/tests/system-dpdk.at
>> +++ b/tests/system-dpdk.at
>> @@ -13,4 +13,19 @@ m4_define([SYSTEM_DPDK_ALLOWED_LOGS],[
>>   ])
>>
>> +dnl CHECK_MEMPOOL_PARAM([mtu], [numa], [+line]) dnl dnl Waits for logs
>> +to indicate that the user has configured a mempool dnl for 'mtu' on
>> +'numa'. Checking starts from line number 'line' in dnl
>> +ovs-vswitchd.log.
>> +m4_define([CHECK_MEMPOOL_PARAM], [
>> +    line_st=$3
>> +    if [[ -z "$line_st" ]]
>> +    then
>> +        line_st="+0"
>> +    fi
>> +    OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log dnl
>> +                   | grep "User configured shared mempool set for: MTU
>> +$1, NUMA $2."])
>> +])
>> +
>>   dnl ---------------------------------------------------------------------
>> -----
>>   dnl Check if EAL init is successful
>> @@ -405,2 +420,21 @@ OVS_VSWITCHD_STOP("m4_join([],
>> [SYSTEM_DPDK_ALLOWED_LOGS], [  AT_CLEANUP dnl  dnl -----------------------
>> ---------------------------------------------------
>> +
>> +dnl
>> +-----------------------------------------------------------------------
>> +---
>> +dnl Setup user configured mempools
>> +AT_SETUP([OVS-DPDK - user configured mempool])
>> +AT_KEYWORDS([dpdk])
>> +OVS_DPDK_PRE_CHECK()
>> +OVS_DPDK_START_OVSDB()
>> +OVS_DPDK_START_VSWITCHD()
>> +
>> +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch .
>> +other_config:shared-mempool-config=9000,6000,1500])
>> +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch .
>> +other_config:dpdk-init=true])
>> +
>> +CHECK_MEMPOOL_PARAM([9000], [ALL], [])
>> +CHECK_MEMPOOL_PARAM([6000], [ALL], [])
>> +CHECK_MEMPOOL_PARAM([1500], [ALL], [])
>> +
>> +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
>> +AT_CLEANUP
>> +dnl
>> +-----------------------------------------------------------------------
>> +---
>> --
> 
> 
> The test case seems to be quite simple, how about the following change to test few more cases ?
> 
> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
> index 8c36ae655..7f6a0e16f 100644
> --- a/tests/system-dpdk.at
> +++ b/tests/system-dpdk.at
> @@ -596,13 +596,65 @@ OVS_DPDK_PRE_CHECK()
>   OVS_DPDK_START_OVSDB()
>   OVS_DPDK_START_VSWITCHD()
> 
> -AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=9000,6000,1500])
> +AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=8000,6000,1500])
>   AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])
> 
> -CHECK_MEMPOOL_PARAM([9000], [ALL], [])
> +CHECK_MEMPOOL_PARAM([8000], [ALL], [])
>   CHECK_MEMPOOL_PARAM([6000], [ALL], [])
>   CHECK_MEMPOOL_PARAM([1500], [ALL], [])
> 
> -OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
> +AT_CHECK(ovs-appctl vlog/set netdev_dpdk:dbg)
> +
> +dnl Find number of sockets
> +AT_CHECK([lscpu], [], [stdout])
> +AT_CHECK([cat stdout | grep "NUMA node(s)" | awk '{c=1; while (c++<$(3)) {printf "512,"}; print "512"}' > NUMA_NODE])
> +
> +
> +dnl Add userspace bridge and vhostuser-client port
> +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 datapath_type=netdev])
> +AT_CHECK([ovs-vsctl add-port br10 dpdkvhostuserclient0 -- set Interface dpdkvhostuserclient0 type=dpdkvhostuserclient options:vhost-server-path=$OVS_RUNDIR/dpdkvhostclient0], [], [stdout], [stderr])
> +AT_CHECK([ovs-vsctl show], [], [stdout])
> +sleep 2
> +
> +dnl Parse log file for vhost init
> +AT_CHECK([grep "VHOST_CONFIG: vhost-user client: socket created" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "vHost User device 'dpdkvhostuserclient0' created in 'client' mode, using client socket" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "VHOST_CONFIG: $OVS_RUNDIR/dpdkvhostclient0: reconnecting..." ovs-vswitchd.log], [], [stdout])
> +
> +dnl Execute testpmd in background
> +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> +tail -f /dev/null | dpdk-testpmd --socket-mem="$(cat NUMA_NODE)" --no-pci\
> +           --vdev="net_virtio_user,path=$OVS_RUNDIR/dpdkvhostclient0,server=1" \
> +           --file-prefix page0 --single-file-segments -- -a >$OVS_RUNDIR/testpmd-dpdkvhostuserclient0.log 2>&1 &
> +
> +OVS_WAIT_UNTIL([grep "virtio is now ready for processing" ovs-vswitchd.log])
> +
> +dnl Check if the right user configured mempool is found
> +AT_CHECK([grep "Found user configured shared mempool .* suitable for port with MTU 1500" ovs-vswitchd.log], [], [stdout])
> +AT_CHECK([grep "Port dpdkvhostuserclient0: Requesting a mempool" ovs-vswitchd.log], [], [stdout])
> +
> +dnl Change the MTU value to 7000 to trigger mempool change
> +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
> +AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=7000)
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Found user configured shared mempool .* suitable for port with MTU 7000"])
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Port dpdkvhostuserclient0: Requesting a mempool"])
> +
> +dnl Change back the MTU value to 1500 to trigger mempool change(re-use)
> +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
> +AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=1500)
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Found user configured shared mempool .* suitable for port with MTU 1500"])
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Reusing mempool"])
> +
> +dnl Change the MTU value beyond the max value in shared-mempool-config list
> +TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1))
> +AT_CHECK(ovs-vsctl set Interface dpdkvhostuserclient0 mtu_request=9000)
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "No user configured shared mempool mbuf sizes found suitable for port with MTU 9000"])
> +OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "Port dpdkvhostuserclient0: Requesting a mempool"])
> +
> +dnl Clean up
> +AT_CHECK([ovs-vsctl del-port br10 dpdkvhostuserclient0], [], [stdout], [stderr])
> +OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
> +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/dpdkvhostclient0: No such file or directory@d
> +])")
>   AT_CLEANUP
>   dnl --------------------------------------------------------------------------
> 
> 
> Thanks and regards,
> Sunil
>
Pai G, Sunil Sept. 5, 2022, 10:58 a.m. UTC | #3
> Thanks for the suggestion. These tests look like a good addition. If you
> want to send them formally to the mailing list, I can Ack them.
> 
> thanks,
> Kevin.

Hi Kevin, 

Sure, patch available on the mailing list here:
https://patchwork.ozlabs.org/project/openvswitch/patch/20220905105022.107298-1-sunil.pai.g@intel.com/ 

Thanks and regards
Sunil

<snipped>
diff mbox series

Patch

diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
index 7d2715c4a..8889861a2 100644
--- a/tests/system-dpdk.at
+++ b/tests/system-dpdk.at
@@ -13,4 +13,19 @@  m4_define([SYSTEM_DPDK_ALLOWED_LOGS],[
 ])
 
+dnl CHECK_MEMPOOL_PARAM([mtu], [numa], [+line])
+dnl
+dnl Waits for logs to indicate that the user has configured a mempool
+dnl for 'mtu' on 'numa'. Checking starts from line number 'line' in
+dnl ovs-vswitchd.log.
+m4_define([CHECK_MEMPOOL_PARAM], [
+    line_st=$3
+    if [[ -z "$line_st" ]]
+    then
+        line_st="+0"
+    fi
+    OVS_WAIT_UNTIL([tail -n $line_st ovs-vswitchd.log dnl
+                   | grep "User configured shared mempool set for: MTU $1, NUMA $2."])
+])
+
 dnl --------------------------------------------------------------------------
 dnl Check if EAL init is successful
@@ -405,2 +420,21 @@  OVS_VSWITCHD_STOP("m4_join([], [SYSTEM_DPDK_ALLOWED_LOGS], [
 AT_CLEANUP dnl
 dnl --------------------------------------------------------------------------
+
+dnl --------------------------------------------------------------------------
+dnl Setup user configured mempools
+AT_SETUP([OVS-DPDK - user configured mempool])
+AT_KEYWORDS([dpdk])
+OVS_DPDK_PRE_CHECK()
+OVS_DPDK_START_OVSDB()
+OVS_DPDK_START_VSWITCHD()
+
+AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:shared-mempool-config=9000,6000,1500])
+AT_CHECK([ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true])
+
+CHECK_MEMPOOL_PARAM([9000], [ALL], [])
+CHECK_MEMPOOL_PARAM([6000], [ALL], [])
+CHECK_MEMPOOL_PARAM([1500], [ALL], [])
+
+OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]")
+AT_CLEANUP
+dnl --------------------------------------------------------------------------