【问题标题】:Redis under asan with jemalloc带有jemalloc的asan下的redis
【发布时间】:2016-01-16 16:45:36
【问题描述】:
我正在以 4 种不同的方式编译 Redis 3.0.6:
- jemalloc
- libc malloc
- asan + jemalloc (
-fsanitize=address -fno-omit-frame-pointer)
- asan + libc malloc
然后我在所有这些二进制文件下运行标准redis-bench。我不明白的是场景3 的性能非常接近场景1。
谁能向我解释这怎么可能?我没有在 asan 手册上找到任何不支持 jemalloc 或相关内容的内容。
【问题讨论】:
标签:
redis
malloc
sanitizer
【解决方案1】:
你没有提供确切的复制案例,但我猜是你
- 使用 GCC
- 使用 LD_PRELOAD 链接到 jemalloc
在这种情况下,jemalloc 的分配器将覆盖 ASan 的拦截器,并且不会检查堆分配(这将解释您的运行速度不会减慢)。相反,您应该将可执行文件与 jemalloc 静态链接:
LDFLAGS += -ljemalloc
我认为理想情况下,当 ASan 未能拦截堆分配器时,它应该报告一个有用的警告,因此您可能希望在他们的 github 上提交错误。