> Hey Sunil, > Thanks for the comments, I've left some responses inline. Let me know > what you think. > > > -----Original Message----- > > From: Pai G, Sunil <sunil.pa...@intel.com> > > Sent: Wednesday 13 July 2022 14:51 > > To: Phelan, Michael <michael.phe...@intel.com>; d...@openvswitch.org > > Cc: maxime.coque...@redhat.com; i.maxim...@ovn.org > > Subject: RE: [ovs-dev] [PATCH v2] tests: Add OVS-DPDK QoS unit tests > > > > Hi Mike, > > > > Thanks for adding more testcases ! > > Patch generally looks good, although it might require a rebase. > > Yep, will definitely need a rebase before merging. > > > Minor nits inline. > > > > > > > -----Original Message----- > > > From: dev <ovs-dev-boun...@openvswitch.org> On Behalf Of Michael > > > Phelan > > > Sent: Wednesday, June 29, 2022 4:19 PM > > > To: d...@openvswitch.org > > > Cc: maxime.coque...@redhat.com; i.maxim...@ovn.org > > > Subject: [ovs-dev] [PATCH v2] tests: Add OVS-DPDK QoS unit tests > > > > > > This adds 4 new unit tests to the 'check-dpdk' subsystem that will > > > test Quality of Service (QoS) functionality. > > > > > > Signed-off-by: Michael Phelan <michael.phe...@intel.com> > > > > > > --- > > > v2: > > > - Added check to confirm policer was removed correctly in phy and > > > vport tests. > > > - Removed unnecessary error catch in phy test. > > > - Added egress to various comments to improve clarity. > > > --- > > > --- > > > tests/system-dpdk.at | 147 > > > +++++++++++++++++++++++++++++++++++++++++++ > > > 1 file changed, 147 insertions(+) > > > > > > diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at index > > > 7d2715c4a..41987b7b5 100644 > > > --- a/tests/system-dpdk.at > > > +++ b/tests/system-dpdk.at > > > @@ -222,6 +222,153 @@ OVS_VSWITCHD_STOP("m4_join([], > > > [SYSTEM_DPDK_ALLOWED_LOGS], [ AT_CLEANUP dnl > > > --------------------------- > > > ----------------------------------------------- > > > > > > + > > > + > > > +dnl > > > +--------------------------------------------------------------------- > > > +-- > > > +--- > > > +dnl QoS create delete phy port > > > +AT_SETUP([OVS-DPDK - QoS create delete phy port]) > > > > Do we want to call this QOS or egress policing ? or both ? (QoS / Egress > policing) > > Don’t have a strong preference here but just to make the life of a tester > easier I > > would include egress policing in the name. > > This way: make check-dpdk TESTSUITEFLAGS="-k policing" would run all > policing > > test cases(ingress/rate limiting as well as egress/QOS) > > I agree with you here, I think it make sense to call them egress policing > tests > to keep it in line with the ingress tests and hopefully make it a bit easier > for > end users. I will change this is in the next version.
Not sure I agree with this, egress policing is specifically part of QoS which is handled separately to rate-limiting, even as part of the vswitch.xml these are separate concepts and separate in the code base for netdev-dpdk, it's just coincidence that there happens to be an egress policer implementation for QoS. I would prefer to see a section in the future for QoS specifically that runs all QoS tests if that makes sense rather than mixing the policers. > > > > > > > +AT_KEYWORDS([dpdk]) > > > + > > > +OVS_DPDK_PRE_PHY_SKIP() > > > +OVS_DPDK_START() > > > + > > > +dnl Add userspace bridge and attach it to OVS and add egress policer > > > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10 > > > +datapath_type=netdev]) AT_CHECK([ovs-vsctl add-port br10 phy0 -- > set > > > +Interface phy0 type=dpdk options:dpdk-devargs=$(cat PCI_ADDR)], [], > > > +[stdout], [stderr]) OVS_WAIT_UNTIL([ovs-vsctl set port phy0 > qos=@newqos > > > +-- --id=@newqos create qos type=egress-policer other- > config:cir=1250000 > > > +other-config:cbs=2048]) AT_CHECK([ovs-appctl -t ovs-vswitchd > qos/show > > > +phy0], [], [stdout]) sleep 2 > > > + > > > +dnl Fail if egress policer could not be created AT_FAIL_IF([grep "Could > > > +not create rte meter for egress policer" ovs-vswitchd.log], [], > > > +[stdout]) > > > + > > > +dnl remove egress policer > > > > Please capitalize the first word. [please check this on the entire patch] > > > > > +AT_CHECK([ovs-vsctl destroy QoS phy0 -- clear Port phy0 qos]) > > > + > > > +dnl check egress policer was removed correctly AT_CHECK([ovs-appctl - > t > > > +ovs-vswitchd qos/show phy0], [], [stdout]) AT_CHECK([egrep 'QoS not > > > +configured on phy0' stdout], [], [stdout]) > > > + > > > +dnl Clean up > > > +AT_CHECK([ovs-vsctl del-port br10 phy0], [], [stdout], [stderr]) > > > +OVS_VSWITCHD_STOP("[SYSTEM_DPDK_ALLOWED_LOGS]") > > > +AT_CLEANUP > > > +dnl > > > +----------------------------------------------------------------------- > > > +--- > > > + > > > + > > > + > > > +dnl > > > +----------------------------------------------------------------------- > > > +--- > > > +dnl QoS create delete vport port > > > +AT_SETUP([OVS-DPDK - QoS create delete vport port]) > > > +AT_KEYWORDS([dpdk]) > > > + > > > +OVS_DPDK_PRE_CHECK() > > > +OVS_DPDK_START() > > > + > > > +dnl Add userspace bridge and attach it to OVS and add egress policer > > > +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]) > > > OVS_WAIT_UNTIL([ovs-vsctl set port dpdkvhostuserclient0 > qos=@newqos -- -- > > > id=@newqos create qos type=egress-policer other-config:cir=1250000 \ > > > + other-config:cbs=2048]) AT_CHECK([ovs-appctl -t > > > +ovs-vswitchd qos/show dpdkvhostuserclient0], [], [stdout]) sleep 2 > > > + > > > +dnl Fail if egress policer could not be created AT_FAIL_IF([grep "Could > > > +not create rte meter for egress policer" ovs-vswitchd.log], [], > > > +[stdout]) > > > + > > > +dnl remove egress policer > > > +AT_CHECK([ovs-vsctl destroy QoS dpdkvhostuserclient0 -- clear Port > > > +dpdkvhostuserclient0 qos]) > > > + > > > +dnl check egress policer was removed correctly AT_CHECK([ovs-appctl - > t > > > +ovs-vswitchd qos/show dpdkvhostuserclient0], [], [stdout]) > > > +AT_CHECK([egrep 'QoS not configured on dpdkvhostuserclient0' > stdout], > > > +[], [stdout]) > > > + > > > +dnl Parse log file > > > +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]) > > > > Although this sequence works just fine, we could move the above > checks(Parse > > log file) just after adding the vhost port. > > Followed by qos port add and the checks for this addition. > > Makes sense, I will rearrange these in the next version. > > > > > > > > + > > > +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 > > > +----------------------------------------------------------------------- > > > +--- > > > + > > > + > > > + > > > +dnl > > > +----------------------------------------------------------------------- > > > +--- > > > +dnl QoS no cir > > > +AT_SETUP([OVS-DPDK - QoS no cir]) > > > +AT_KEYWORDS([dpdk]) > > > + > > > +OVS_DPDK_PRE_CHECK() > > > +OVS_DPDK_START() > > > + > > > +dnl Add userspace bridge and attach it to OVS and add egress policer > > > +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]) OVS_WAIT_UNTIL([ovs-vsctl set port dpdkvhostuserclient0 > > > +qos=@newqos -- --id=@newqos create qos type=egress-policer > > > +other-config:cbs=2048]) sleep 2 > > > + > > > +dnl check egress policer was not created AT_CHECK([ovs-appctl -t > > > +ovs-vswitchd qos/show dpdkvhostuserclient0], [], [stdout]) > > > +AT_CHECK([egrep 'QoS not configured on dpdkvhostuserclient0' > stdout], > > > +[], [stdout]) > > > + > > > +dnl Parse log file > > > +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 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 \@Could not create rte meter for egress > > > +policer@d \@Failed to set QoS type egress-policer on port > > > +dpdkvhostuserclient0: Invalid argument@d > > > +])") > > > +AT_CLEANUP > > > +dnl > > > +----------------------------------------------------------------------- > > > > Maybe we should combine last three test cases into 1 ? WDYT ? > > But here we must be careful while we grep the string in ovs-vswitchd.log > as logs > > might be repetitive. > > We could borrow the following trick used for few testscases in pmd.at to > grep > > from the logical end of the prev part of the test: > > TMP=$(($(cat ovs-vswitchd.log | wc -l | tr -d [[:blank:]])+1)) > > OVS_WAIT_UNTIL([tail -n +$TMP ovs-vswitchd.log | grep "<any_string>"]) > > I'm open to doing that as there is a lot of repetition of commands in the 3 > tests but I thought it was better to make unit tests test a specific > functionality to allow for easy debugging on a failure. Ilya or Ian do you > have any thoughts on the best course of action? +1 on making unit tests specific functionality, this follows what we have already for the rate-limiting tests so is in keeping with what is already in place. > > > > > > > > +--- > > > + > > > + > > > + > > > +dnl > > > +----------------------------------------------------------------------- > > > +--- > > > +dnl QoS no cbs > > > +AT_SETUP([OVS-DPDK - QoS no cbs]) > > > +AT_KEYWORDS([dpdk]) > > > + > > > +OVS_DPDK_PRE_CHECK() > > > +OVS_DPDK_START() > > > + > > > +dnl Add userspace bridge and attach it to OVS and add egress policer > > > +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]) OVS_WAIT_UNTIL([ovs-vsctl set port dpdkvhostuserclient0 > > > +qos=@newqos -- --id=@newqos create qos type=egress-policer > > > +other-config:cir=1250000]) sleep 2 > > > + > > > +dnl check egress policer was not created AT_CHECK([ovs-appctl -t > > > +ovs-vswitchd qos/show dpdkvhostuserclient0], [], [stdout]) > > > +AT_CHECK([egrep 'QoS not configured on dpdkvhostuserclient0' > stdout], > > > +[], [stdout]) > > > + > > > + > > > +dnl Parse log file > > > +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 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 \@Could not create rte meter for egress > > > +policer@d \@Failed to set QoS type egress-policer on port > > > +dpdkvhostuserclient0: Invalid argument@d > > > +])") > > > +AT_CLEANUP > > > +dnl > > > +----------------------------------------------------------------------- > > > +--- > > > + > > > > > > We should also consider adding trtcm-policer tests too in future. But > these are > > good additions for now 😊 Agree here, I think this will be targeted for 2.19. Thanks Ian > > > > > > Thanks and regards > > Sunil > Thanks, > Michael. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev