forked from OSchip/llvm-project
![]() It turned out that at dynamic shared library mode, the memory access pattern can increase memory footprint significantly on OS when transparent hugepages (THP) are enabled. This could cause >70x memory overhead than running a static linked binary. For example, a static binary with RSS overhead 300M can use > 23G RSS if it is built dynamically. /proc/../smaps shows in 6204552 kB RSS 6141952 kB relates to AnonHugePages. Also such a high RSS happens in some rate: around 25% runs may use > 23G RSS, the rest uses in between 6-23G. I guess this may relate to how user memory is allocated and distributted across huge pages. THP is a trade-off between time and space. We have a flag no_huge_pages_for_shadow for sanitizer. It is true by default but DFSan did not follow this. Depending on if a target is built statically or dynamically, maybe Clang can set no_huge_pages_for_shadow accordingly after this change. But it still seems fine to follow the default setting of no_huge_pages_for_shadow. If time is an issue, and users are fine with high RSS, this flag can be set to false selectively. |
||
---|---|---|
.. | ||
scripts | ||
.clang-format | ||
CMakeLists.txt | ||
dfsan.cpp | ||
dfsan.h | ||
dfsan.syms.extra | ||
dfsan_custom.cpp | ||
dfsan_flags.inc | ||
dfsan_interceptors.cpp | ||
dfsan_platform.h | ||
done_abilist.txt | ||
libc_ubuntu1404_abilist.txt |