----- Original Message -----
> From: "Aaron Conole" <acon...@redhat.com>
> To: "Bala Sankaran" <bsank...@redhat.com>
> Cc: "Tiago Lam" <tiago....@intel.com>, d...@openvswitch.org
> Sent: Wednesday, 29 August, 2018 5:14:41 PM
> Subject: Re: [ovs-dev] [PATCH v3 6/6] system-dpdk: Connect network namespaces 
> via dpdkvhostuser ports
> 
> Bala Sankaran <bsank...@redhat.com> writes:
> 
> > ----- Original Message -----
> >> From: "Tiago Lam" <tiago....@intel.com>
> >> To: "Bala Sankaran" <bsank...@redhat.com>, d...@openvswitch.org
> >> Sent: Wednesday, 29 August, 2018 1:36:13 PM
> >> Subject: Re: [ovs-dev] [PATCH v3 6/6] system-dpdk: Connect network
> >> namespaces via dpdkvhostuser ports
> >> 
> >> Hi Bala,
> >> 
> >> Thanks to both you and Aaron for working on this. Seems to be a great
> >> addition.
> >> 
> >> As a general comment I agree with Ian that running everything on v17.11
> >> would be preferable, as this would enable us to run this test on any
> >> given system, and not only when v18.11 is installed. But after reading
> >> through your thread on the DPDK users list on the 2MB hugepages
> >> limitations around virtio_user, it seems this will have to be a
> >> dependency until OvS-DPDK moves to v18.11.
> > Hello Tiago,
> >
> > I agree, I did not happen to notice a workaround for this.
> >
> >> 
> >> On 28/08/2018 18:47, Bala Sankaran wrote:
> >> > This adds a new test to the 'check-dpdk' subsystem that will exercise
> >> > allocations, PMDs, and the vhost-user code path.
> >> > 
> >> > Signed-off-by: Bala Sankaran <bsank...@redhat.com>
> >> > Co-authored-by: Aaron Conole <acon...@redhat.com>
> >> > Signed-off-by: Aaron Conole <acon...@redhat.com>
> >> > ---
> >> >  tests/system-dpdk.at | 77 ++++++++++++++++++++++++++++++++++++++++++++
> >> >  1 file changed, 77 insertions(+)
> >> > 
> >> > diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at
> >> > index 58dc8aaae..914a1b644 100644
> >> > --- a/tests/system-dpdk.at
> >> > +++ b/tests/system-dpdk.at
> >> > @@ -1,3 +1,6 @@
> >> > +m4_define([CONFIGURE_VETH_OFFLOADS],
> >> > +   [AT_CHECK([ethtool -K $1 tx off], [0], [ignore], [ignore])])
> >> > +
> >> >  AT_BANNER([OVS-DPDK unit tests])
> >> >  
> >> >  dnl
> >> >  
> >> > --------------------------------------------------------------------------
> >> > @@ -74,3 +77,77 @@ OVS_VSWITCHD_STOP(["\@does not exist. The Open
> >> > vSwitch
> >> > kernel module is probably
> >> >  \@EAL: No free hugepages reported in hugepages-1048576kB@d"])
> >> >  AT_CLEANUP
> >> >  dnl
> >> >  
> >> > --------------------------------------------------------------------------
> >> > +
> >> > +
> >> > +
> >> > +dnl
> >> > --------------------------------------------------------------------------
> >> > +dnl Ping vhost-user-client port
> >> > +AT_SETUP([OVS-DPDK datapath - ping vhost-user-client ports])
> 
> @bala:
> 
> This is wrong here.  These are vhost-user ports, not vhost-user-client ports.

Sorry about that, I will make the correction.
> 
> >> 
> >> Any reason why you're using vhost-user instead of vhost-user-client? If
> >> we change it to "type=dpdkvhostuserclient" in the vhu0 interface added
> >> to OvS and append ",server=1" to the net_virtio_user --vdev in the
> >> testpmd arguments, doesn't it just work the same?
> >
> > I believe I encountered an error while running the tests with a vhost-user
> > client ports. That's when I switched over to vhost-user instead. I do not
> > remember the error at this moment, but now that you mentioned it, I am
> > thinking
> > of adding another unit test that use vhost-user-client port which would
> > give
> > me the error and then skip to vhost-user instead.
> 
> I also don't remember which error we hit and whether it had anything to
> do with the type of port.  Maybe it makes sense to have both.  That way
> we cover both.  And if we ever completely remove the server mode ports,
> we can just drop the test as well (I like that it helps us also catch
> the cleanup error in that case).
> 
> >> 
> >> > +AT_KEYWORDS([dpdk])
> >> > +OVS_DPDK_PRE_CHECK()
> >> > +OVS_DPDK_START()
> >> > +
> >> > +dnl Add userspace bridge and attach it to OVS
> >> > +AT_CHECK([ovs-vsctl add-br br10 -- set bridge br10
> >> > datapath_type=netdev])
> >> > +AT_CHECK([ovs-vsctl add-port br10 vhu0 -- set Interface vhu0 \
> >> > +          type=dpdkvhostuser], [],
> >> > +         [stdout], [stderr])
> >> > +AT_CHECK([ovs-vsctl show], [], [stdout])
> >> > +
> >> > +dnl Parse log file
> >> > +AT_CHECK([grep "VHOST_CONFIG: vhost-user server: socket created" \
> >> > +          ovs-vswitchd.log], [], [stdout])
> >> > +AT_CHECK([grep "Socket $OVS_RUNDIR/vhu0 created for vhost-user port
> >> > vhu0"
> >> > \
> >> > +          ovs-vswitchd.log], [], [stdout])
> >> > +AT_CHECK([grep "VHOST_CONFIG: bind to $OVS_RUNDIR/vhu0"
> >> > ovs-vswitchd.log],
> >> > [],
> >> > +         [stdout])
> >> > +
> >> > +dnl Set up namespaces
> >> > +ADD_NAMESPACES(ns1, ns2)
> >> > +
> >> > +dnl execute testpmd in background
> >> > +on_exit "pkill -f -x -9 'tail -f /dev/null'"
> >> > +tail -f /dev/null | testpmd --socket-mem=512 \
> >> > +           --vdev="net_virtio_user,path=$OVS_RUNDIR/vhu0" \
> >> > +           --vdev="net_tap0,iface=tap0" --file-prefix page0 \
> >> > +           --single-file-segments -- -a >$OVS_RUNDIR/testpmd-vhu0.log
> >> > 2>&1
> >> > &
> >> > +
> >> 
> >> I've seen your reply to Ian's comment on the $PATH environment variable
> >> on v2; That could be enough if there wasn't a requirement for DPDK
> >> v18.11 for the `testpmd` bin. Since there is a separate environment
> >> variable will be needed to guarantee we're executing the correct one
> >> (and not the v17.11 that's currently linked with OvS, as an example). It
> >> would also enable us to detect if the variable is set or not, and if
> >> not, skip the test altogether. At the moment the test will just fail, if
> >> the binary doesn't exist.
> >
> > I do not have complete familiarity on this note, I have copied Aaron along
> > in this email. I suppose that he would be able to comment on this.
> 
> I think it's okay to just use PATH, and rely on the path lookup order.
> 
> After all, it's quite possible to have a different environment for
> testpmd and put that in the path, and it should link to the correct
> library versions.
> 
>   PATH=/path/to/dpdk-18.11:$PATH
> 
> I'm hesitant to add a workaround to a problem that will disappear once
> the next LTS comes along and gets integrated (since we'll need to then
> revert that workaround, or deal with it appropriately).  I guess Ian has
> the final say on what he wants to accept into the tree for the dpdk
> checks, but I like using the path in this case (and we were able to use
> it even with this complicated environment).
> 
> I do agree we shouldn't fail for missing testpmd - we should 'skip'
> 
> @bala:
> 
> Please add to this test:
> 
>   AT_SKIP_IF([! which testpmd >/dev/null 2>/dev/null])

Sure!

> 
> >> 
> >> 
> >> > +dnl add veth device
> >> > +ADD_VETH(tap1, ns2, br10, "172.31.110.12/24")
> >> 
> >> The ADD_VETH() macro skips the test if $1 already exists. It would be
> >> better to set up tap1 at the beginning, thus skipping the test if it
> >> can't b set up, and this way it wouldn't be starting the `testpmd`
> >> process unnecessarily.
> >
> > I had given it some thought too. I will test it out at my end and make the
> > change if deemed necessary.
> >
> >> 
> >> > +
> >> > +dnl give settling time to the testpmd processes - NOTE: this is bad
> >> > form.
> >> > +sleep 10
> >> > +
> >> > +dnl move the tap devices to the namespaces
> >> > +AT_CHECK([ps aux | grep testpmd], [], [stdout], [stderr])
> >> > +AT_CHECK([ip link show], [], [stdout], [stderr])
> >> > +AT_CHECK([ip link set tap0 netns ns1], [], [stdout], [stderr])
> >> > +
> >> > +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr])
> >> > +AT_CHECK([ip netns exec ns1 ip link show | grep tap0], [], [stdout],
> >> > [stderr])
> >> > +AT_CHECK([ip netns exec ns1 ip link set tap0 up], [], [stdout],
> >> > [stderr])
> >> > +AT_CHECK([ip netns exec ns1 ip addr add 172.31.110.11/24 dev tap0], [],
> >> > +         [stdout], [stderr])
> >> > +
> >> > +AT_CHECK([ip netns exec ns1 ip link show], [], [stdout], [stderr])
> >> > +AT_CHECK([ip netns exec ns2 ip link show], [], [stdout], [stderr])
> >> > +AT_CHECK([ip netns exec ns1 arping -c 4 -I tap0 172.31.110.12], [],
> >> > [stdout],
> >> > +         [stderr])
> >> 
> >> Any specific requirement on arping? I for one didn't have it installed
> >> on my system.
> >
> > Agreed, we could either replace arping with ping, or rather add
> > functionality to install arping. The former would be preferred as
> > the user might not want the tests to install tools unnecessarily.
> 
> The tests shouldn't install anything.  I think switching to ping is
> fine, as it should be more commonly available.

Sure, will change it to ping.

Best,
Bala.

> 
> > I am glad you noticed our work. I appreciate your feedback and I
> > look to working towards it.
> >
> > Thanks,
> > Bala.
> >
> >> 
> >> 
> >> Tiago.
> >> 
> >> > +
> >> > +dnl clean up the testpmd now
> >> > +pkill -f -x -9 'tail -f /dev/null'
> >> > +
> >> > +dnl Clean up
> >> > +AT_CHECK([ovs-vsctl del-port br10 vhu0], [], [stdout], [stderr])
> >> > +OVS_VSWITCHD_STOP(["\@does not exist. The Open vSwitch kernel module is
> >> > probably not loaded.@d
> >> > +\@Failed to enable flow control@d
> >> > +\@VHOST_CONFIG: recvmsg failed@d
> >> > +\@VHOST_CONFIG: failed to connect to $OVS_RUNDIR/vhu0: No such file or
> >> > directory@d
> >> > +\@Global register is changed during@d
> >> > +\@dpdkvhostuser ports are considered deprecated;  please migrate to
> >> > dpdkvhostuserclient ports.@d
> >> > +\@failed to enumerate system datapaths: No such file or directory@d
> >> > +\@EAL:   Invalid NUMA socket, default to 0@d
> >> > +\@EAL: WARNING: cpu flags constant_tsc=yes nonstop_tsc=no -> using
> >> > unreliable clock cycles !@d
> >> > +\@EAL: No free hugepages reported in hugepages-1048576kB@d"])
> >> > +AT_CLEANUP
> >> > +dnl
> >> > --------------------------------------------------------------------------
> >> > 
> >> 
> 
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to