2016-08-10 7:29 GMT-07:00 Loftus, Ciara <ciara.lof...@intel.com>: > > > > This is interesting, thanks for working on this. > > The patch looks pretty simple, most of the magic happens in DPDK, so I > will > > comment only on the OvS side of things. > > Why is 'other_config:dpdk-pdump' required? Can't we always enable the > > feature? I tried running with it and I didn't notice any slowdown, > unless > > there's actually a listener (I'm not sure if this is true for every > driver, > > though). Having a feature switch that requires a restart makes it > really hard > > to debug production systems, which I'd say is one of the most > interesting use > > cases of such a facility. > > I had performed most of my performance regression testing with pre-16.07 > release candidates where I noticed a larger performance drop. I re-tested > with v16.07 and the performance decrease as you said is negligible. So I've > removed the flag in the v2. We always init if it is detected in the DPDK > build. > On another note, the patch in general introduces a 3-4% performance > decrease, even when DPDK_PDUMP=false ie. no extra code executed in > netdev-dpdk which is curious. >
Maybe the extra thread causes the linux scheduler to use more cores and the CPU frequency to be lowered? > > > Should we perhaps call rte_pdump_init() with a path in ovs_rundir()? > I'm not > > sure what's the best practice for DPDK apps in this regard > > I've included this in the v2. > > Thanks for the feedback, > Ciara > > > Thanks, > > Daniele > > > > 2016-08-04 3:47 GMT-07:00 Ciara Loftus <ciara.lof...@intel.com>: > > This commit provides the ability to 'listen' on DPDK ports and save > > packets to a pcap file with a DPDK app that uses the librte_pdump > > library. One such app is the 'pdump' app that can be found in the DPDK > > 'app' directory. Instructions on how to use this can be found in > > INSTALL.DPDK-ADVANCED.md > > > > The pdump feature is optional. Should you wish to use it, pcap libraries > > must to be installed on the system and the > > CONFIG_RTE_LIBRTE_PMD_PCAP=y > > > > Extra 'to' > > > > and CONFIG_RTE_LIBRTE_PDUMP=y options set in DPDK. Additionally you > > must > > set the 'dpdk-pdump' ovs other_config DB value to 'true'. > > > > Signed-off-by: Ciara Loftus <ciara.lof...@intel.com> > > --- > > INSTALL.DPDK-ADVANCED.md | 30 ++++++++++++++++++++++++++++-- > > NEWS | 1 + > > acinclude.m4 | 23 +++++++++++++++++++++++ > > lib/netdev-dpdk.c | 19 +++++++++++++++++++ > > vswitchd/vswitch.xml | 12 ++++++++++++ > > 5 files changed, 83 insertions(+), 2 deletions(-) > > > > diff --git a/INSTALL.DPDK-ADVANCED.md b/INSTALL.DPDK-ADVANCED.md > > index c8d69ae..877824b 100755 > > --- a/INSTALL.DPDK-ADVANCED.md > > +++ b/INSTALL.DPDK-ADVANCED.md > > @@ -12,7 +12,8 @@ OVS DPDK ADVANCED INSTALL GUIDE > > 7. [QOS](#qos) > > 8. [Rate Limiting](#rl) > > 9. [Flow Control](#fc) > > -10. [Vsperf](#vsperf) > > +10. [Pdump](#pdump) > > +11. [Vsperf](#vsperf) > > > > ## <a name="overview"></a> 1. Overview > > > > @@ -862,7 +863,32 @@ respective parameter. To disable the flow control at > > tx side, > > > > `ovs-vsctl set Interface dpdk0 options:tx-flow-ctrl=false` > > > > -## <a name="vsperf"></a> 10. Vsperf > > +## <a name="pdump"></a> 10. Pdump > > + > > +Pdump allows you to listen on DPDK ports and view the traffic that is > > +passing on them. To use this utility, one must have libpcap installed > > +on the system. Furthermore, DPDK must be built with > > CONFIG_RTE_LIBRTE_PDUMP=y > > +and CONFIG_RTE_LIBRTE_PMD_PCAP=y. And finally, the following > > database > > +value must be set before launching the switch, like so: > > + > > +`ovs-vsctl set Open_vSwitch . other_config:dpdk-pdump=true` > > + > > +To use pdump, simply launch OVS as usual. Then, navigate to the > > 'app/pdump' > > +directory in DPDK, 'make' the application and run like so: > > + > > +`sudo ./build/app/dpdk_pdump -- --pdump 'port=0,queue=0,rx- > > dev=/tmp/rx.pcap'` > > + > > +The above command captures traffic received on queue 0 of port 0 and > > stores > > +it in /tmp/rx.pcap. Other combinations of port numbers, queues numbers > > and > > +pcap locations are of course also available to use. More information on > the > > +pdump app and its usage can be found in the below link. > > + > > +http://dpdk.org/doc/guides/sample_app_ug/pdump.html > > + > > +A performance decrease is expected when using a monitoring application > > like > > +the DPDK pdump app. > > + > > +## <a name="vsperf"></a> 11. Vsperf > > > > Vsperf project goal is to develop vSwitch test framework that can be > used to > > validate the suitability of different vSwitch implementations in a Telco > > deployment > > diff --git a/NEWS b/NEWS > > index c2ed71d..3f40e23 100644 > > --- a/NEWS > > +++ b/NEWS > > @@ -69,6 +69,7 @@ Post-v2.5.0 > > * Basic connection tracking for the userspace datapath (no ALG, > > fragmentation or NAT support yet) > > * Support for DPDK 16.07 > > + * Optional support for DPDK pdump enabled. > > - Increase number of registers to 16. > > - ovs-benchmark: This utility has been removed due to lack of use and > > bitrot. > > diff --git a/acinclude.m4 b/acinclude.m4 > > index f02166d..b8f1850 100644 > > --- a/acinclude.m4 > > +++ b/acinclude.m4 > > @@ -211,6 +211,29 @@ AC_DEFUN([OVS_CHECK_DPDK], [ > > > > AC_SEARCH_LIBS([get_mempolicy],[numa],[],[AC_MSG_ERROR([unable > > to find libnuma, install the dependency package])]) > > > > + AC_COMPILE_IFELSE([ > > + AC_LANG_PROGRAM( > > + [ > > + #include <rte_config.h> > > +#if RTE_LIBRTE_PMD_PCAP > > +#error > > +#endif > > + ], []) > > + ], [], > > + [AC_SEARCH_LIBS([pcap_dump],[pcap],[],[AC_MSG_ERROR([unable to > > find libpcap, install the dependency package])]) > > + DPDK_EXTRA_LIB="-lpcap" > > + AC_COMPILE_IFELSE([ > > + AC_LANG_PROGRAM( > > + [ > > + #include <rte_config.h> > > +#if RTE_LIBRTE_PDUMP > > +#error > > +#endif > > + ], []) > > + ], [], > > + [AC_DEFINE([DPDK_PDUMP], [1], [DPDK pdump enabled in OVS.])]) > > + ]) > > + > > # On some systems we have to add -ldl to link with dpdk > > # > > # This code, at first, tries to link without -ldl (""), > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > > index aaac0d1..9e4abd9 100644 > > --- a/lib/netdev-dpdk.c > > +++ b/lib/netdev-dpdk.c > > @@ -57,6 +57,9 @@ > > #include "rte_config.h" > > #include "rte_mbuf.h" > > #include "rte_meter.h" > > +#ifdef DPDK_PDUMP > > +#include "rte_pdump.h" > > +#endif > > #include "rte_virtio_net.h" > > > > VLOG_DEFINE_THIS_MODULE(dpdk); > > @@ -3242,6 +3245,7 @@ dpdk_init__(const struct smap *ovs_other_config) > > #ifndef VHOST_CUSE > > char *sock_dir_subcomponent; > > #endif > > + bool set_pdump = false; > > > > if (!smap_get_bool(ovs_other_config, "dpdk-init", false)) { > > VLOG_INFO("DPDK Disabled - to change this requires a > restart.\n"); > > @@ -3382,6 +3386,21 @@ dpdk_init__(const struct smap > > *ovs_other_config) > > > > dpdk_vhost_class_init(); > > > > + set_pdump = smap_get_bool(ovs_other_config, "dpdk-pdump", false); > > + > > + if (set_pdump) { > > +#ifdef DPDK_PDUMP > > + VLOG_INFO("DPDK pdump packet capture enabled"); > > + err = rte_pdump_init(NULL); > > + if (err != 0) { > > + VLOG_INFO("Error initialising DPDK pdump"); > > + } > > +#else > > + VLOG_INFO("Cannot initialise DPDK pdump packet capture - option > not > > " > > + "enabled in the DPDK build"); > > +#endif > > + } > > + > > /* Finally, register the dpdk classes */ > > netdev_dpdk_register(); > > } > > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml > > index 65acdc7..a80b82a 100644 > > --- a/vswitchd/vswitch.xml > > +++ b/vswitchd/vswitch.xml > > @@ -311,6 +311,18 @@ > > </p> > > </column> > > > > + <column name="other_config" key="dpdk-pdump" > > + type='{"type": "boolean"}'> > > + <p> > > + Set this value to <code>true</code> to enable DPDK pdump > packet > > + capture capability on DPDK port types. > > + </p> > > + <p> > > + The default value is <code>false</code>. Changing this value > requires > > + restarting the daemon. > > + </p> > > + </column> > > + > > <column name="other_config" key="n-handler-threads" > > type='{"type": "integer", "minInteger": 1}'> > > <p> > > -- > > 2.4.3 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev