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

LD_PRELOAD从根本上降低了linux下C的进程创建性能?,c,linux,malloc,ld-preload,C,Linux,Malloc,Ld Preload,我正在调查UNIXBENCH的spawn.c基准测试中衡量进程创建速度的部分的严重性能问题: 我不明白为什么在centos下运行时,我得到的数据非常少(甚至进程暂停或停止),然后如果我临时启动到debian,性能会成倍提高 我最终通过/etc/ld.so.preload预加载了jemalloc3.6,这是一个替代的高性能内存分配器: 这是因为每个派生进程都在加载自己的jemalloc副本而导致性能下降吗 有没有一种方法可以避免这种情况,并且让jemalloc自动加载?为什么它不共享库?jem

我正在调查UNIXBENCH的
spawn.c
基准测试中衡量进程创建速度的部分的严重性能问题:

我不明白为什么在centos下运行时,我得到的数据非常少(甚至进程暂停或停止),然后如果我临时启动到debian,性能会成倍提高

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

这是因为每个派生进程都在加载自己的jemalloc副本而导致性能下降吗


有没有一种方法可以避免这种情况,并且让jemalloc自动加载?为什么它不共享库?

jemalloc是否有其他依赖项(如pthread)?如果是这样,那么额外的加载时间成本可能会增加,在pthread的情况下,它可能会导致一些在单线程应用程序中可能是无锁的函数实际执行锁,从而降低它们的速度。在任何情况下,即使只是将一个额外的库映射到进程的地址空间并执行重新定位也需要大量的时间,因此,如果正在计时的程序是最小的(我无法从您的链接中准确地判断正在计时的程序)然后,执行时间可能由动态链接器所做的工作决定。

这可能与库预加载无关,很可能与操作系统清除文件备份内存的方式有关。