如何在启动时加载共享库中的所有符号?

时间:2015-06-08 21:11:22

标签: c linux optimization shared-libraries glibc

美好的一天! 我有一个fork-on-connect守护进程。在使用perf工具对其进行分析后,我发现了该功能" do_lookup_x"消耗很多CPU时间。共享库函数的所有函数调用都在fork之后。

有没有办法在fork之前查找所有符号?

1 个答案:

答案 0 :(得分:1)

设置环境变量[-1.64285714 1.28571429] 应该有助于实现这一点。

设置

LD_BIND_NOW

然后执行你的程序。

摘录:

  

ELF平台(Linux,Solaris,FreeBSD,HP-UX,IRIX等)支持   延迟绑定过程地址,这是一种优化   产生更好的整体性能,但真正的问题   启动后需要统一性能的应用程序(例如:交易   系统。)当ELF应用程序启动时,加载器(默认情况下)   用一堆修复程序初始化过程链接表(PLT)   将在每个函数的第一次调用时运行的代码。在   fix-up call,函数在虚拟地址空间中的位置   查找并放入PLT以便将来调用   功能不需要再次查找。

可能的解决方案:

  

如果你关心启动后的延迟,你可以做一些事情   做:

export LD_BIND_NOW=1

有关完整文章,请参阅here,有关详细信息,请参阅here