Redis在与jemalloc的asan之下

时间:2016-01-16 16:45:37

标签: redis malloc sanitizer

我正在以四种不同的方式编译Redis 3.0.6:

  1. jemalloc
  2. libc malloc
  3. asan + jemalloc(-fsanitize=address -fno-omit-frame-pointer
  4. asan + libc malloc
  5. 然后我在所有这些二进制文件下运行标准redis-bench。我不明白的是,方案3的性能非常接近方案1

    有人可以向我解释这是怎么回事?我没有在asan手册中找到任何关于它不支持jemalloc或相关内容的东西。

1 个答案:

答案 0 :(得分:1)

你没有提供完全的复制案例,但我的猜测是你

  • 使用GCC
  • 使用LD_PRELOAD链接到jemalloc

在这种情况下,jemalloc的分配器将覆盖ASan的拦截器,并且不会检查堆分配(这可以解释您的运行没有减速)。相反,您应该将您的可执行文件与jemalloc静态链接:

LDFLAGS += -ljemalloc

我认为理想情况下,当ASan无法拦截堆分配器时,它应该报告一个有用的警告,因此您可能希望在其github上提交错误。