> -----Original Message----- > From: Stokes, Ian <ian.sto...@intel.com> > Sent: Friday 15 July 2022 11:25 > To: Phelan, Michael <michael.phe...@intel.com>; Pai G, Sunil > <sunil.pa...@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 > > > 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.
No problem, will leave the naming as QoS for the next version. > > > > > > > > > > > +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. Sounds good, I will leave them as is for the next version. > > > > > > > > > > > > > > +--- > > > > + > > > > + > > > > + > > > > +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