From: Timo Puha Date: Fri, 4 Sep 2015 12:35:57 +0000 (+0100) Subject: dpdk: add support for v2.1.0 X-Git-Tag: v2.5.0~618 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=18f777b2870a12431741ad37f95316bfe78989e5 dpdk: add support for v2.1.0 Update relevant artifacts to add support for DPDK v2.1.0 - INSTALL.DPDK.md - acinclude.m4: Change DPDK library name - netdev-dpdk: Limit minimum mbuf size to to adapt to DPDK bug fix that changes the treatment of the requested mbuf size - build.sh: Change DPDK version number Note that this breaks compatibility with DPDK v2.0.0 although only for the library name change. Note that throughput for vhost ports with mergeable buffers is reduced about 10% due to a necessary bug fix in DPDK vhost code. Signed-off-by: Mark Kavanagh Signed-off-by: Michal Weglicki Signed-off-by: Timo Puha Acked-by: Daniele Di Proietto --- diff --git a/.travis/build.sh b/.travis/build.sh index e90f4d08b..3cadbf0ce 100755 --- a/.travis/build.sh +++ b/.travis/build.sh @@ -71,7 +71,7 @@ fi if [ "$DPDK" ]; then if [ -z "$DPDK_VER" ]; then - DPDK_VER="2.0.0" + DPDK_VER="2.1.0" fi install_dpdk $DPDK_VER if [ "$CC" = "clang" ]; then diff --git a/AUTHORS b/AUTHORS index 2eb5adf21..a7f40bb5a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -125,6 +125,7 @@ Martin Casado casado@nicira.com Martino Fornasa mf@fornasa.it Maryam Tahhan maryam.tahhan@intel.com Mehak Mahajan mmahajan@nicira.com +Michal Weglicki michalx.weglicki@intel.com Mijo Safradin mijo@linux.vnet.ibm.com Minoru TAKAHASHI takahashi.minoru7@gmail.com Murphy McCauley murphy.mccauley@gmail.com @@ -183,6 +184,7 @@ Thomas F. Herbert thomasfherbert@gmail.com Thomas Goirand zigo@debian.org Thomas Graf tgraf@noironetworks.com Thomas Lacroix thomas.lacroix@citrix.com +Timo Puha timox.puha@intel.com Todd Deshane deshantm@gmail.com Tom Everman teverman@google.com Tsvi Slonim tsvi@toroki.com diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md index 20bd1c69e..6026217c2 100644 --- a/INSTALL.DPDK.md +++ b/INSTALL.DPDK.md @@ -16,7 +16,7 @@ OVS needs a system with 1GB hugepages support. Building and Installing: ------------------------ -Required: DPDK 2.0 +Required: DPDK 2.1 Optional (if building with vhost-cuse): `fuse`, `fuse-devel` (`libfuse-dev` on Debian/Ubuntu) @@ -24,7 +24,7 @@ on Debian/Ubuntu) 1. Set `$DPDK_DIR` ``` - export DPDK_DIR=/usr/src/dpdk-2.0 + export DPDK_DIR=/usr/src/dpdk-2.1 cd $DPDK_DIR ``` @@ -33,11 +33,6 @@ on Debian/Ubuntu) `CONFIG_RTE_BUILD_COMBINE_LIBS=y` - Update `config/common_linuxapp` so that DPDK is built with vhost - libraries. - - `CONFIG_RTE_LIBRTE_VHOST=y` - Then run `make install` to build and install the library. For default install without IVSHMEM: @@ -112,7 +107,7 @@ Using the DPDK with ovs-vswitchd: 3. Bind network device to vfio-pci: `$DPDK_DIR/tools/dpdk_nic_bind.py --bind=vfio-pci eth1` -3. Mount the hugetable filsystem +3. Mount the hugetable filesystem `mount -t hugetlbfs -o pagesize=1G none /dev/hugepages` @@ -315,7 +310,7 @@ the vswitchd. DPDK vhost: ----------- -DPDK 2.0 supports two types of vhost: +DPDK 2.1 supports two types of vhost: 1. vhost-user 2. vhost-cuse @@ -336,7 +331,7 @@ with OVS. DPDK vhost-user Prerequisites: ------------------------- -1. DPDK 2.0 with vhost support enabled as documented in the "Building and +1. DPDK 2.1 with vhost support enabled as documented in the "Building and Installing section" 2. QEMU version v2.1.0+ @@ -418,7 +413,7 @@ with OVS. DPDK vhost-cuse Prerequisites: ------------------------- -1. DPDK 2.0 with vhost support enabled as documented in the "Building and +1. DPDK 2.1 with vhost support enabled as documented in the "Building and Installing section" As an additional step, you must enable vhost-cuse in DPDK by setting the following additional flag in `config/common_linuxapp`: diff --git a/acinclude.m4 b/acinclude.m4 index dbaee29c0..68e556a97 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -172,7 +172,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [ DPDK_INCLUDE=$RTE_SDK/include DPDK_LIB_DIR=$RTE_SDK/lib - DPDK_LIB="-lintel_dpdk" + DPDK_LIB="-ldpdk" DPDK_EXTRA_LIB="" AC_COMPILE_IFELSE( diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index afe1c4517..ca09e681c 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -65,11 +65,17 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); /* * need to reserve tons of extra space in the mbufs so we can align the * DMA addresses to 4KB. + * The minimum mbuf size is limited to avoid scatter behaviour and drop in + * performance for standard Ethernet MTU. */ - #define MTU_TO_MAX_LEN(mtu) ((mtu) + ETHER_HDR_LEN + ETHER_CRC_LEN) -#define MBUF_SIZE(mtu) (MTU_TO_MAX_LEN(mtu) + (512) + \ - sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) +#define MBUF_SIZE_MTU(mtu) (MTU_TO_MAX_LEN(mtu) \ + + sizeof(struct dp_packet) \ + + RTE_PKTMBUF_HEADROOM) +#define MBUF_SIZE_DRIVER (2048 \ + + sizeof (struct rte_mbuf) \ + + RTE_PKTMBUF_HEADROOM) +#define MBUF_SIZE(mtu) MAX(MBUF_SIZE_MTU(mtu), MBUF_SIZE_DRIVER) /* Max and min number of packets in the mempool. OVS tries to allocate a * mempool with MAX_NB_MBUF: if this fails (because the system doesn't have