Hi Mike, Thanks for the patch - comments below.
Mike Pattrick <m...@redhat.com> writes: > Currently the ovs-tcpdump utility creates a virtual tunnel to send > packets to. This method functions perfectly fine, however, it can > greatly impact the performance of the monitored port. > > It has been reported to reduce packet throughput significantly. I was > able to reproduce a reduction in throughput of 70 percent with a very > simple setup of two hosts communicating through a single bridge. This > testing was performed on Linux both with and without the kernel module > module loaded. Another more complex DPDK test was configured with the > data path going from a port, through one OVS bridge, through a DPDK > enabled network card, then into a different OVS bridge, and finally > into another port. > > Using the dummy driver instead of a tunnel results in the following > reduction in throughput compared to no ovs-tcpdump. > > Kernel datapath - 5% > Usermode datapath - 10% > DPDK datapath - 17% What about before the dummy driver change? Can you add the numbers pre/post this patch? > Signed-off-by: Mike Pattrick <m...@redhat.com> > --- > utilities/ovs-tcpdump.in | 17 +++-------------- > 1 file changed, 3 insertions(+), 14 deletions(-) > > diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in > index 5ec02383c..9be39827e 100755 > --- a/utilities/ovs-tcpdump.in > +++ b/utilities/ovs-tcpdump.in > @@ -52,7 +52,6 @@ except Exception: > print(" the correct location.") > sys.exit(1) > > -tapdev_fd = None > _make_taps = {} > _make_mirror_name = {} > IFNAMSIZ_LINUX = 15 # this is the max name size, excluding the null > byte. > @@ -68,20 +67,10 @@ def _doexec(*args, **kwargs): > > > def _install_tap_linux(tap_name, mtu_value=None): One nit - this function doesn't install a tap device any longer. Maybe we should make it: def _install_net_device_linux(dev_name, mtu_value=None): WDYT? Otherwise, looks fine to me. > - """Uses /dev/net/tun to create a tap device""" > - global tapdev_fd > + _doexec( > + *['ip', 'link', 'add', str(tap_name), 'type', 'dummy'] > + ).wait() > > - IFF_TAP = 0x0002 > - IFF_NO_PI = 0x1000 > - TUNSETIFF = 0x400454CA # This is derived by printf() of TUNSETIFF > - TUNSETOWNER = TUNSETIFF + 2 > - > - tapdev_fd = os.open('/dev/net/tun', os.O_RDWR) > - ifr = struct.pack('16sH', tap_name.encode('utf8'), IFF_TAP | IFF_NO_PI) > - fcntl.ioctl(tapdev_fd, TUNSETIFF, ifr) > - fcntl.ioctl(tapdev_fd, TUNSETOWNER, os.getegid()) > - > - time.sleep(1) # required to give the new device settling time > if mtu_value is not None: > pipe = _doexec( > *(['ip', 'link', 'set', 'dev', str(tap_name), 'mtu', _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev