LD_PRELOAD从根本上降低了Linux下C的进程创建性能?

时间:2014-05-02 21:54:20

标签: c linux malloc ld-preload

我正在研究UNIXBENCH spawn.c部分基准中的严重性能损失,该基准测量过程创建速度:

https://code.google.com/p/byte-unixbench/source/browse/trunk/UnixBench/src/spawn.c

我无法理解为什么当在centos下运行时我的数字非常低(甚至停止或停止进程)然后如果我暂时启动到debian,性能会呈指数级增长。

我最终通过jemalloc来预测/etc/ld.so.preload 3.6这是一个替代的高性能内存分配器:

https://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

这个性能是否会受到影响,因为每个衍生进程都会加载它自己的jemalloc副本?

有没有办法避免这种情况并仍然有jemalloc自动加载?为什么不共享图书馆?

1 个答案:

答案 0 :(得分:1)

jemalloc是否有任何其他依赖项(如pthread)?如果是这样,额外的加载时间成本可能会增加,并且在pthread的情况下,它可能会导致一些在单线程应用程序中可以无锁的函数实际上获取锁定,从而减慢它们的速度。在任何情况下,即使只是将一个额外的库映射到进程的地址空间并执行重定位也需要花费大量的时间,因此如果定时的程序很少(我无法从链接中确切地知道正在计时的是什么)那么执行时间可能由动态链接器的工作主导。