diff --git a/0001-dpdk-optimize-the-efficiency-of-dpdk.patch b/0001-dpdk-optimize-the-efficiency-of-dpdk.patch new file mode 100644 index 0000000000000000000000000000000000000000..3a23de0e3553f148c63be5f25ef30c38bace38a1 --- /dev/null +++ b/0001-dpdk-optimize-the-efficiency-of-dpdk.patch @@ -0,0 +1,195 @@ +From 5e554c15982617a89b85aeb71592c20bfa7bdecd Mon Sep 17 00:00:00 2001 +From: Renmingshuai +Date: Tue, 13 Apr 2021 16:25:43 +0800 +Subject: [PATCH] optimize the efficiency of compiling dpdk + +--- + config/common_base | 5 +++ + mk/rte.combinedlib.mk | 10 +++++ + mk/rte.lib.mk | 102 +++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 110 insertions(+), 7 deletions(-) + +diff --git a/config/common_base b/config/common_base +index 57b1349..392e6c3 100644 +--- a/config/common_base ++++ b/config/common_base +@@ -59,6 +59,11 @@ CONFIG_RTE_ENABLE_LTO=n + # + CONFIG_RTE_BUILD_SHARED_LIB=n + ++# ++# Compile to both static library and share library ++# ++CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS=n ++ + # + # Use newest code breaking previous ABI + # +diff --git a/mk/rte.combinedlib.mk b/mk/rte.combinedlib.mk +index 9d0f935..1088543 100644 +--- a/mk/rte.combinedlib.mk ++++ b/mk/rte.combinedlib.mk +@@ -15,9 +15,16 @@ RTE_LIBNAME := dpdk + COMBINEDLIB := lib$(RTE_LIBNAME)$(EXT) + + LIBS := $(filter-out $(COMBINEDLIB), $(sort $(notdir $(wildcard $(RTE_OUTPUT)/lib/*$(EXT))))) ++ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y) ++COMBINEDLIB_SO := lib$(RTE_LIBNAME).so ++LIBS_SO := $(filter-out $(COMBINEDLIB_SO), $(sort $(notdir $(wildcard $(RTE_OUTPUT)/lib/*.so)))) ++endif + + all: FORCE + $(Q)echo "GROUP ( $(LIBS) )" > $(RTE_OUTPUT)/lib/$(COMBINEDLIB) ++ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y) ++ $(Q)echo "GROUP ( $(LIBS_SO) )" > $(RTE_OUTPUT)/lib/$(COMBINEDLIB_SO) ++endif + + # + # Clean all generated files +@@ -25,6 +32,9 @@ all: FORCE + .PHONY: clean + clean: + $(Q)rm -f $(RTE_OUTPUT)/lib/$(COMBINEDLIB) ++ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y) ++ $(Q)rm -f $(RTE_OUTPUT)/lib/$(COMBINEDLIB_SO) ++endif + + .PHONY: FORCE + FORCE: +diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk +index 4516d1c..78f3c27 100644 +--- a/mk/rte.lib.mk ++++ b/mk/rte.lib.mk +@@ -19,13 +19,6 @@ else ifeq ($(LIBABIVER),) + LIBABIVER := 0.$(shell cat $(RTE_SRCDIR)/ABI_VERSION | tr -d '.') + endif + +-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) +-LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB)) +-ifeq ($(EXTLIB_BUILD),n) +-CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP) +-endif +-endif +- + + _BUILD = $(LIB) + PREINSTALL = $(SYMLINK-FILES-y) +@@ -34,6 +27,16 @@ _CLEAN = doclean + + LDLIBS += $(EXECENV_LDLIBS-y) + ++ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y) ++LIB_SO = $(LIB) ++LIB_SO := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB_SO)) ++ifeq ($(EXTLIB_BUILD),n) ++CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP) ++endif ++_BUILD += $(LIB_SO) ++_INSTALL += $(INSTALL-FILES-y) $(RTE_OUTPUT)/lib/$(LIB_SO) ++endif ++ + .PHONY: all + all: install + +@@ -74,6 +77,89 @@ ifneq ($(CC_SUPPORTS_Z),false) + NO_UNDEFINED := -z defs + endif + ++ifeq ($(CONFIG_RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS),y) ++O_TO_S = $(LD) -L$(RTE_SDK_BIN)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \ ++ -shared $(OBJS-y) $(NO_UNDEFINED) $(LDLIBS) -Wl,-soname,$(LIB_SO) -o $(LIB_SO) ++O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight ++O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)"," LD $(@)") ++O_TO_S_DO = @set -e; \ ++ echo $(O_TO_S_DISP); \ ++ $(O_TO_S) && \ ++ echo $(O_TO_S_CMD) > $(call exe2cmd,$(@)) ++ ++-include .$(LIB_SO).cmd ++ ++# ++# Archive objects in .a file if needed ++# ++$(LIB): $(OBJS-y) $(DEP_$(LIB)) FORCE ++ @[ -d $(dir $@) ] || mkdir -p $(dir $@) ++ $(if $(D),\ ++ @echo -n "$< -> $@ " ; \ ++ echo -n "file_missing=$(call boolean,$(file_missing)) " ; \ ++ echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_A_STR))) " ; \ ++ echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \ ++ echo "depfile_newer=$(call boolean,$(depfile_newer)) ") ++ $(if $(or \ ++ $(file_missing),\ ++ $(call cmdline_changed,$(O_TO_A_STR)),\ ++ $(depfile_missing),\ ++ $(depfile_newer)),\ ++ $(O_TO_A_DO)) ++ ++$(LIB_SO): $(OBJS-y) $(DEP_$(LIB_SO)) FORCE ++ifeq ($(LIBABIVER),) ++ @echo "Must Specify a $(LIB_SO) ABI version" ++ @false ++endif ++ @[ -d $(dir $@) ] || mkdir -p $(dir $@) ++ $(if $(D),\ ++ @echo -n "$< -> $@ " ; \ ++ echo -n "file_missing=$(call boolean,$(file_missing)) " ; \ ++ echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_S_STR))) " ; \ ++ echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \ ++ echo "depfile_newer=$(call boolean,$(depfile_newer)) ") ++ $(if $(or \ ++ $(file_missing),\ ++ $(call cmdline_changed,$(O_TO_S_STR)),\ ++ $(depfile_missing),\ ++ $(depfile_newer)),\ ++ $(O_TO_S_DO)) ++ ++# ++# install lib in $(RTE_OUTPUT)/lib ++# ++$(RTE_OUTPUT)/lib/$(LIB): $(LIB) ++ @echo " INSTALL-LIB $(LIB)" ++ @[ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib ++ cp -f $(LIB) $(RTE_OUTPUT)/lib ++ ++$(RTE_OUTPUT)/lib/$(LIB_SO): $(LIB_SO) ++ @echo " INSTALL-LIB $(LIB_SO)" ++ @[ -d $(RTE_OUTPUT)/lib ] || mkdir -p $(RTE_OUTPUT)/lib ++ cp -f $(LIB_SO) $(RTE_OUTPUT)/lib ++ ln -s -f $< $(shell echo $@ | sed 's/\.so.*/.so/') ++ ++# ++# Clean all generated files ++# ++.PHONY: clean ++clean: _postclean ++ ++.PHONY: doclean ++doclean: ++ $(Q)rm -rf $(LIB) $(LIB_SO) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \ ++ $(CMDS-all) .$(LIB).cmd $(INSTALL-FILES-all) *.pmd.c *.pmd.o ++ $(Q)rm -f $(_BUILD_TARGETS) $(_INSTALL_TARGETS) $(_CLEAN_TARGETS) ++ ++else ++ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) ++LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB)) ++ifeq ($(EXTLIB_BUILD),n) ++CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP) ++endif ++endif ++ + O_TO_S = $(LD) -L$(RTE_SDK_BIN)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \ + -shared $(OBJS-y) $(NO_UNDEFINED) $(LDLIBS) -Wl,-soname,$(LIB) -o $(LIB) + O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight +@@ -148,6 +234,8 @@ doclean: + $(CMDS-all) .$(LIB).cmd $(INSTALL-FILES-all) *.pmd.c *.pmd.o + $(Q)rm -f $(_BUILD_TARGETS) $(_INSTALL_TARGETS) $(_CLEAN_TARGETS) + ++endif ++ + include $(RTE_SDK)/mk/internal/rte.compile-post.mk + include $(RTE_SDK)/mk/internal/rte.install-post.mk + include $(RTE_SDK)/mk/internal/rte.clean-post.mk +-- +2.19.1 + diff --git a/dpdk.spec b/dpdk.spec index f8af9b03548755708a756397bed94a3cc1de75c1..8d013666abcf0b69f0001810aeadde68c28d712b 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,6 +1,6 @@ Name: dpdk Version: 19.11 -Release: 11 +Release: 12 Packager: packaging@6wind.com URL: http://dpdk.org %global source_version 19.11 @@ -20,6 +20,7 @@ Patch10: CVE-2020-14374.patch Patch11: CVE-2020-14375.patch Patch12: fix-compilation-error-of-max-inline-insns-single-o2-.patch Patch13: fix-populate-with-small-virtual-chunks.patch +Patch14: 0001-dpdk-optimize-the-efficiency-of-dpdk.patch Summary: Data Plane Development Kit core Group: System Environment/Libraries @@ -36,12 +37,10 @@ ExclusiveArch: i686 x86_64 aarch64 %global config x86_64-%{machine}-linux-gcc %endif -BuildRequires: kernel-devel, kernel, libpcap-devel -BuildRequires: kernel-source +BuildRequires: kernel-devel, libpcap-devel BuildRequires: numactl-devel libconfig-devel BuildRequires: module-init-tools uname-build-checks libnl3 libmnl BuildRequires: glibc glibc-devel libibverbs libibverbs-devel libmnl-devel -BuildRequires: texlive Requires: python3-pyelftools @@ -90,16 +89,21 @@ This package contains the pdump tool for capture the dpdk network packets. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 %build namer=%{kern_devel_ver} export RTE_KERNELDIR=/lib/modules/${namer}/build export EXTRA_CFLAGS="-fstack-protector-strong" make O=%{target} T=%{config} config -#make .so libraries for spdk -sed -ri 's,(CONFIG_RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config -sed -ri 's,(CONFIG_RTE_LIB_LIBOS=).*,\1n,' %{target}/.config -make O=%{target} %{?_smp_mflags} +#make .so lnd .a ibraries for spdk +sed -ri 's,(RTE_BUILD_BOTH_STATIC_AND_SHARED_LIBS=).*,\1y,' %{target}/.config +sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config +sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config +sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config +sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config +#sed -ri 's,(LIBRTE_PMD_PCAP=).*,\1y,' %{target}/.config +make O=%{target} -j16 %install namer=%{kern_devel_ver} @@ -125,22 +129,8 @@ cp -ar ./%{target}/lib/librte_cmdline.so* $RPM_BUILD_ROOT/lib64/ cp -ar ./%{target}/lib/librte_net.so* $RPM_BUILD_ROOT/lib64/ cp -ar ./%{target}/lib/librte_meter.so* $RPM_BUILD_ROOT/lib64/ -sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config -sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config -sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config -sed -ri 's,(RTE_NEXT_ABI=).*,\1n,' %{target}/.config -sed -ri 's,(LIBRTE_VHOST=).*,\1y,' %{target}/.config -#sed -ri 's,(LIBRTE_PMD_PCAP=).*,\1y,' %{target}/.config -sed -ri 's,(CONFIG_RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config -make O=%{target} %{?_smp_mflags} #make O=%{target} doc -make install O=%{target} RTE_KERNELDIR=/lib/modules/${namer}/build \ - kerneldir=/lib/modules/${namer}/extra/dpdk DESTDIR=%{buildroot} \ - prefix=%{_prefix} bindir=%{_bindir} sbindir=%{_sbindir} \ - includedir=%{_includedir}/dpdk libdir=%{_libdir} \ - datadir=%{_datadir}/dpdk docdir=%{_docdir}/dpdk - mkdir -p $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/ ln -s /usr/share/dpdk/mk $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/ ln -s /usr/share/dpdk/%{target} $RPM_BUILD_ROOT/usr/include/%{name}-%{version}/ @@ -193,6 +183,9 @@ strip -g $RPM_BUILD_ROOT/lib/modules/${namer}/extra/dpdk/rte_kni.ko /usr/sbin/depmod %changelog +* Wed May 19 2021 renmingshuai - 19.11-12 +- optimize the efficiency of compiling dpdk + * Mon Mar 15 2021 wutao - 19.11-11 - add fstack-protector-strong gcc flags