当我在valgrind上运行基于DPDK的应用程序时,它无法执行它并抛出错误
错误:此系统不支持" RDRAND"。请检查一下 RTE_MACHINE设置正确。
我的CPU支持RDRAND,但仍然会抛出相同的错误。对于valgrind来支持我的应用程序正在使用的大页面,我使用了以下修补版本的valgrind。 https://github.com/bisdn/valgrind-hugepages.git
答案 0 :(得分:4)
我在Haswell架构CPU上遇到了同样的问题,并且能够通过修改其中一个makefile来修复它,以删除一些选项。具体来说,AVX / AVX2,RDRND,FSGSBASE和F16C。您可能需要删除valgrind正在关注的其他选项并重新编译DPDK,这对我来说是一个迭代过程。使用.config文件可能有更优雅的方法,但我找不到它。看到这个补丁:
diff -u dpdk-2.2.0-orig/mk/rte.cpuflags.mk dpdk-2.2.0/mk/rte.cpuflags.mk
--- dpdk-2.2.0-orig/mk/rte.cpuflags.mk^I2015-12-15 12:06:58.000000000 -0500
+++ dpdk-2.2.0/mk/rte.cpuflags.mk^I2016-08-24 08:53:22.911258783 -0400
@@ -69,26 +69,6 @@
CPUFLAGS += PCLMULQDQ
endif
-ifneq ($(filter $(AUTO_CPUFLAGS),__AVX__),)
-CPUFLAGS += AVX
-endif
-
-ifneq ($(filter $(AUTO_CPUFLAGS),__RDRND__),)
-CPUFLAGS += RDRAND
-endif
-
-ifneq ($(filter $(AUTO_CPUFLAGS),__FSGSBASE__),)
-CPUFLAGS += FSGSBASE
-endif
-
-ifneq ($(filter $(AUTO_CPUFLAGS),__F16C__),)
-CPUFLAGS += F16C
-endif
-
-ifneq ($(filter $(AUTO_CPUFLAGS),__AVX2__),)
-CPUFLAGS += AVX2
-endif
-
# IBM Power CPU flags
ifneq ($(filter $(AUTO_CPUFLAGS),__PPC64__),)
CPUFLAGS += PPC64
答案 1 :(得分:2)
RDRAND是在IvyBridge上引入的,您可以使用“CONFIG_RTE_MACHINE”使用特定的指令子集构建dpdk。在这种情况下,您可以使用SandyBridge作为机器。
修改$ RTE_SDK / $ RTE_TARGET / .config,设置CONFIG_RTE_MACHINE =“snb”,并重建DPDK库(make -C $ RTE_SDK / $ RTE_TARGET)。
答案 2 :(得分:0)
我找到了另一个解决这个问题的方法。 DPDK支持EXTRA_CFLAGS
变量,您可以使用该变量为GCC指定自己的标志。初始makefile使用选项-dN -E
运行gcc以检查平台支持的内容。如果要禁用某些指令集,例如RDRAND,您可以指定选项
export EXTRA_CFLAGS=-mno-rdrnd
这将禁用已构建的DPDK库二进制文件中的RDRAND。