我正在调查UNIXBENCH
的基准测试中spawn.c
部分的严重性能影响,该基准测试衡量进程创建速度:
https://code.google.com/p/byte-unixbench/source/browse/trunk/UnixBench/src/spawn.c
我不明白为什么在 centos 下运行时,我得到的数字非常低(甚至进程停滞或停止(,然后如果我暂时启动到 debian,性能会成倍增加。
我最终将其追溯到我通过/etc/ld.so.preload
预加载jemalloc
3.6 的事实,这是一个替代的高性能内存分配器:
https://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919
这种性能是否受到影响,因为每个生成的进程都在加载它自己的 jemalloc 副本?
有没有办法避免这种情况并且仍然有 jemalloc 自动加载?为什么它不共享库?
jemalloc 是否有任何其他依赖项(如 pthread(?如果是这样,额外的加载时间成本可能会增加,在 pthread 的情况下,它可能会导致一些在单线程应用程序中可能无锁的函数实际上采用锁,从而减慢它们的速度。在任何情况下,即使只是将一个额外的库映射到进程的地址空间并执行重定位也需要大量时间,因此,如果定时的程序很小(我无法从您的链接中确切地判断出正在计时的内容(,那么执行时间可能由动态链接器所做的工作决定。