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

标签 c memory-leaks valgrind dpdk

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

ERROR: This system does not support "RDRAND". Please check that RTE_MACHINE is set correctly.

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

最佳答案

我在 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

关于c - 在 valgrind 上运行 DPDK 应用程序时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386738/

相关文章:

c++ - 使用临时数据表修复内存泄漏(堆与堆栈)

delphi - Delphi for QA 的免费内存检测工具

c - Valgrind 报告一个非常简单的 C 程序的错误

xcode - 在Xcode环境中,Valgrind等效于什么?

c - 常量与变量不匹配

c - 如何使用指针访问存储在物理内存最后一个字节中的数据?

c - 基于子目录的Makefile

C - 将字符与换行符进行比较

c++ - 检查内存泄漏问题

c++ - 在阅读 callgrind 输出时需要帮助