在valgrind上运行DPDK应用程序时出错

时间:2016-05-23 08:58:50

标签: c memory-leaks valgrind dpdk

当我在valgrind上运行基于DPDK的应用程序时,它无法执行它并抛出错误

  

错误:此系统不支持" RDRAND"。请检查一下   RTE_MACHINE设置正确。

我的CPU支持RDRAND,但仍然会抛出相同的错误。对于valgrind来支持我的应用程序正在使用的大页面,我使用了以下修补版本的valgrind。 https://github.com/bisdn/valgrind-hugepages.git

3 个答案:

答案 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。