Update relevant artifacts to add support for DPDK v2.0.0 - INSTALL.DPDK.md - travis build script - acinclude.m4: add 'mssse3' flag to OVS_CFLAGS - netdev-dpdk: fix build with unified offload types in DPDK v2.0.0
Note that this breaks compatibility with DPDK v1.8.0 v1: - update DPDK version & build instructions in INSTALL.DPDK.md - update DPDK version and remove compile flags in travis/build.sh - fix build with unified offload types in DPDK v2.0.0 v2: - add mssse3 flag to OVS_CFLAGS in acinclude.m4 - reinstate '-Wno-cast-align' compile flag for clang - add details of vhost user support limitations to INSTALL.DPDK.md - refactor travis/build.sh to reflect these changes v3: -correct minor typos in commit message Signed-off-by: Mark Kavanagh <mark.b.kavan...@intel.com> Signed-off-by: Panu Matilainen <pmati...@redhat.com> --- .travis/build.sh | 11 +++++++---- INSTALL.DPDK.md | 13 +++++++++---- acinclude.m4 | 2 +- lib/netdev-dpdk.c | 3 +-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.travis/build.sh b/.travis/build.sh index 46c5c4d..c7796e1 100755 --- a/.travis/build.sh +++ b/.travis/build.sh @@ -49,6 +49,7 @@ function install_dpdk() find ./ -type f | xargs sed -i 's/max-inline-insns-single=100/max-inline-insns-single=400/' sed -ri 's,(CONFIG_RTE_BUILD_COMBINE_LIBS=).*,\1y,' config/common_linuxapp sed -ri 's,(CONFIG_RTE_LIBRTE_VHOST=).*,\1y,' config/common_linuxapp + sed -ri 's,(CONFIG_RTE_LIBRTE_VHOST_USER=).*,\1n,' config/common_linuxapp sed -ri '/CONFIG_RTE_LIBNAME/a CONFIG_RTE_BUILD_FPIC=y' config/common_linuxapp sed -ri '/EXECENV_CFLAGS = -pthread -fPIC/{s/$/\nelse ifeq ($(CONFIG_RTE_BUILD_FPIC),y)/;s/$/\nEXECENV_CFLAGS = -pthread -fPIC/}' mk/exec-env/linuxapp/rte.vars.mk make config CC=gcc T=x86_64-native-linuxapp-gcc @@ -68,12 +69,14 @@ fi if [ "$DPDK" ]; then if [ -z "$DPDK_VER" ]; then - DPDK_VER="1.8.0" + DPDK_VER="2.0.0" fi install_dpdk $DPDK_VER - # Disregard bad function casts until DPDK is fixed - CFLAGS="$CFLAGS -Wno-error=bad-function-cast -Wno-error=cast-align" - EXTRA_OPTS+="--with-dpdk=./dpdk-$DPDK_VER/build" + if [ "$CC" = "clang" ]; then + # Disregard cast alignment errors until DPDK is fixed + EXTRA_OPTS="$EXTRA_OPTS -Wno-cast-align" + fi + EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=./dpdk-$DPDK_VER/build" elif [ "$CC" != "clang" ]; then # DPDK headers currently trigger sparse errors SPARSE_FLAGS="$SPARSE_FLAGS -Wsparse-error" diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md index aae97a5..899763f 100644 --- a/INSTALL.DPDK.md +++ b/INSTALL.DPDK.md @@ -16,13 +16,13 @@ OVS needs a system with 1GB hugepages support. Building and Installing: ------------------------ -Required DPDK 1.8.0, `fuse`, `fuse-devel` (`libfuse-dev` on Debian/Ubuntu) +Required DPDK 2.0, `fuse`, `fuse-devel` (`libfuse-dev` on Debian/Ubuntu) 1. Configure build & install DPDK: 1. Set `$DPDK_DIR` ``` - export DPDK_DIR=/usr/src/dpdk-1.8.0 + export DPDK_DIR=/usr/src/dpdk-2.0 cd $DPDK_DIR ``` @@ -32,9 +32,12 @@ Required DPDK 1.8.0, `fuse`, `fuse-devel` (`libfuse-dev` on Debian/Ubuntu) `CONFIG_RTE_BUILD_COMBINE_LIBS=y` Update `config/common_linuxapp` so that DPDK is built with vhost - libraries: + libraries; currently, OVS only supports vhost-cuse, so DPDK vhost-user + libraries should be explicitly turned off (they are enabled by default + in DPDK 2.0). `CONFIG_RTE_LIBRTE_VHOST=y` + `CONFIG_RTE_LIBRTE_VHOST_USER=n` Then run `make install` to build and install the library. For default install without IVSHMEM: @@ -65,10 +68,12 @@ Required DPDK 1.8.0, `fuse`, `fuse-devel` (`libfuse-dev` on Debian/Ubuntu) ``` cd $(OVS_DIR)/openvswitch ./boot.sh - ./configure --with-dpdk=$DPDK_BUILD + ./configure --with-dpdk=$DPDK_BUILD [CFLAGS="-g -O2 -Wno-cast-align"] make ``` + Note: 'clang' users may specify the '-Wno-cast-align' flag to suppress DPDK cast-align warnings. + To have better performance one can enable aggressive compiler optimizations and use the special instructions(popcnt, crc32) that may not be available on all machines. Instead of typing `make`, type: diff --git a/acinclude.m4 b/acinclude.m4 index b09f2f2..5988c1f 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -205,7 +205,7 @@ AC_DEFUN([OVS_CHECK_DPDK], [ CFLAGS="$ovs_save_CFLAGS" LDFLAGS="$ovs_save_LDFLAGS" OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" - OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE" + OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE -mssse3" # DPDK pmd drivers are not linked unless --whole-archive is used. # diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index f69154b..5ab119a 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -117,8 +117,7 @@ static const struct rte_eth_conf port_conf = { .rx_adv_conf = { .rss_conf = { .rss_key = NULL, - .rss_hf = ETH_RSS_IPV4_TCP | ETH_RSS_IPV4 | ETH_RSS_IPV6 - | ETH_RSS_IPV4_UDP | ETH_RSS_IPV6_TCP | ETH_RSS_IPV6_UDP, + .rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP, }, }, .txmode = { -- 1.9.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev