From 30d75a0778d825fa13eecea7d352eedfe35bd4ed Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Mon, 9 May 2016 09:48:30 +0100 Subject: dpdk: Support of DPDK v16.04 Configuration options modified by VSPERF were split between config_base and config_linuxapp files. Makefile was modified to reflect this change. Additional changes: * content of qemu shared dir is copied without preservation of attributes to avoid compilation issues due misaligned clocks => could produce broken igb_uio module * added support of new testpmd "Bye.." message * DPDK sources are copied from RTE_SDK_USER directory for all VNF variants - this has been wrongly reverted by inttest patch Change-Id: Id502a072c1f843258496decbf031e7ba7264d459 JIRA: VSPERF-297 Signed-off-by: Martin Klozik Reviewed-by: Maryam Tahhan Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Brian Castelli Reviewed-by: Michal Weglicki --- docs/release/NEWS.rst | 3 ++- src/dpdk/Makefile | 50 ++++++++++++++++++++++++++++++++++++++++---------- testcases/testcase.py | 2 +- vnfs/qemu/qemu.py | 4 ++-- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/docs/release/NEWS.rst b/docs/release/NEWS.rst index 493725a6..19ad3240 100644 --- a/docs/release/NEWS.rst +++ b/docs/release/NEWS.rst @@ -3,8 +3,9 @@ .. (c) OPNFV, Intel Corporation, AT&T and others. OPNFV Colorado Release -========================= +====================== * Support for OVS version 2.5 + DPDK 2.2. +* Support for DPDK v16.04 * Support for Xena traffic generator. * Support for Integration tests for OVS with DPDK including: * Physical ports. diff --git a/src/dpdk/Makefile b/src/dpdk/Makefile index e21e7999..69255f75 100755 --- a/src/dpdk/Makefile +++ b/src/dpdk/Makefile @@ -1,7 +1,7 @@ # makefile to manage dpdk package # -# Copyright 2015 OPNFV +# Copyright 2015-2016 OPNFV # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ # # Contributors: # Aihua Li, Huawei Technologies. +# Martin Klozik, Intel Corporation. include ../mk/master.mk include ../package-list.mk @@ -31,13 +32,29 @@ WORK_DIR = dpdk TAG_DONE_FLAG = $(WORK_DIR)/.$(DPDK_TAG).tag.done DPDK_CUSE = ../../src_cuse/dpdk -# the name has been changed from version to version -ifeq ($(DPDK_TAG),v1.6.0r0) +# VHOST configuration options are stored in different files based on DPDK version +# v1.2.3r0-v1.6.0r2 - configuration inside config/defconfig_x86_64-default-linuxapp-gcc +# v1.7.0-rc1-v2.2.0 - configuration inside config/common_linuxapp +# v16 and newer - configuration split between config/common_linuxapp and config/common_base +DPDK_TAG_MAJOR = $(shell echo $(DPDK_TAG) | cut -d. -f1) +DPDK_TAG_MINOR = $(shell echo $(DPDK_TAG) | cut -d. -f2) +ifeq ($(DPDK_TAG_MAJOR),v1) +ifeq ($(DPDK_TAG_MINOR), $(filter $(DPDK_TAG_MINOR), 7 8)) + DPDK_TARGET = x86_64-native-linuxapp-gcc + CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linuxapp +else DPDK_TARGET = x86_64-default-linuxapp-gcc - CONFIG_FILE = $(WORK_DIR)/config/defconfig_x86_64-default-linuxapp-gcc + CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/defconfig_x86_64-default-linuxapp-gcc +endif +else +ifeq ($(DPDK_TAG_MAJOR),v2) + DPDK_TARGET = x86_64-native-linuxapp-gcc + CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linuxapp else DPDK_TARGET = x86_64-native-linuxapp-gcc - CONFIG_FILE = $(WORK_DIR)/config/common_linuxapp + CONFIG_FILE_BASE = $(WORK_DIR)/config/common_base + CONFIG_FILE_LINUXAPP = $(WORK_DIR)/config/common_linuxapp +endif endif all: force_make @@ -46,14 +63,27 @@ all: force_make INSTALL_TARGET = force_make # modify CONFIG_FILE to enable VHOST_USER build and restore original CONFIG_FILE after the build +# DPDK v16 comments: +## CONFIG_RTE_BUILD_COMBINE_LIBS has been obsoleted +## CONFIG_RTE_LIBRTE_VHOST and CONFIG_RTE_LIBRTE_KNI are listed in both config_base and config_linuxapp, +## values from config_linuxapp will be used, but options are modified at both places to avoid confusion. force_make: $(TAG_DONE_FLAG) $(AT)cd $(WORK_DIR) && git pull $(DPDK_URL) $(DPDK_TAG) - $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE) - $(AT)sed -i -e 's/CONFIG_RTE_BUILD_COMBINE_LIBS=./CONFIG_RTE_BUILD_COMBINE_LIBS=y/g' $(CONFIG_FILE) - $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE) - $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE) +ifdef CONFIG_FILE_BASE + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE_BASE) + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE_BASE) + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE_BASE) +else + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE_LINUXAPP) + $(AT)sed -i -e 's/CONFIG_RTE_BUILD_COMBINE_LIBS=./CONFIG_RTE_BUILD_COMBINE_LIBS=y/g' $(CONFIG_FILE_LINUXAPP) +endif + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE_LINUXAPP) + $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE_LINUXAPP) $(AT)cd $(WORK_DIR); make install T=$(DPDK_TARGET) -j DESTDIR=$(WORK_DIR) - $(AT)cd `dirname $(CONFIG_FILE)` && git checkout `basename $(CONFIG_FILE)` && cd - + $(AT)cd `dirname $(CONFIG_FILE_LINUXAPP)` && git checkout `basename $(CONFIG_FILE_LINUXAPP)` && cd - +ifdef CONFIG_FILE_BASE + $(AT)cd `dirname $(CONFIG_FILE_BASE)` && git checkout `basename $(CONFIG_FILE_BASE)` && cd - +endif $(AT)echo "VHOST_USER = $(VHOST_USER)" ifeq ($(VHOST_USER),n) $(AT)cd $(WORK_DIR)/lib/librte_vhost/eventfd_link; make diff --git a/testcases/testcase.py b/testcases/testcase.py index 1437aeae..d76858d5 100644 --- a/testcases/testcase.py +++ b/testcases/testcase.py @@ -357,7 +357,7 @@ class TestCase(object): if 'testpmd' in self.guest_loopback or 'l2fwd' in self.guest_loopback: try: tasks.run_task(['rsync', '-a', '-r', '-l', r'--exclude="\.git"', - os.path.join(S.getValue('RTE_SDK'), ''), + os.path.join(S.getValue('RTE_SDK_USER'), ''), os.path.join(guest_dir, 'DPDK')], self._logger, 'Copying DPDK to shared directory...', diff --git a/vnfs/qemu/qemu.py b/vnfs/qemu/qemu.py index d108dc9a..87f77583 100644 --- a/vnfs/qemu/qemu.py +++ b/vnfs/qemu/qemu.py @@ -138,7 +138,7 @@ class IVnfQemu(IVnf): # exit testpmd if needed if self._guest_loopback == 'testpmd': self.execute_and_wait('stop', 120, "Done") - self.execute_and_wait('quit', 120, "bye") + self.execute_and_wait('quit', 120, "[bB]ye") # turn off VM self.execute_and_wait('poweroff', 120, "Power down") @@ -276,7 +276,7 @@ class IVnfQemu(IVnf): self.execute_and_wait('mount -o ro,iocharset=utf8 /dev/sdb1 ' + S.getValue('OVS_DPDK_SHARE')) self.execute_and_wait('mkdir -p ' + S.getValue('GUEST_OVS_DPDK_DIR')) - self.execute_and_wait('cp -ra ' + os.path.join(S.getValue('OVS_DPDK_SHARE'), dirname) + + self.execute_and_wait('cp -r ' + os.path.join(S.getValue('OVS_DPDK_SHARE'), dirname) + ' ' + S.getValue('GUEST_OVS_DPDK_DIR')) self.execute_and_wait('umount /dev/sdb1') -- cgit 1.2.3-korg