对于通过路径名执行程序的execve()系统调用,Linux6.8内核将进行新的优化,以“显著”加速路径搜索。
的 执行更新对于Linux6.8,引入了新的快速失败检查来加速基于execve的路径搜索。
Linux开发人员Josh Triplett编写了这个优化并评论了补丁:
“目前,execve分配mm并在检查路径是否存在之前解析argv和envp。但是,通常情况下,$PATH搜索可能在一次成功之前多次调用EXEC失败。在执行更昂贵的操作之前,执行文件名查找的目的是返回ENOENT。
..。
为了测量性能,我运行了2000个fork和execvpe调用,其中一个七元素的PATH中的文件位于第七个目录中(常见情况的代表是/usr/bin是我的$PATH上的第七个目录),以及2000个fork和execve调用,其中一个绝对路径指向现有的二进制文件。我记录了每一个的最短时间,以消除上下文切换和类似的噪音。没有快速通道:
叉子/执行器:49876 ns
叉子/execve:32773 ns使用快速路径:
叉子/叉子:36890 ns
fork/execve:32069ns对于成功的EXEC来说,额外查找的成本似乎微不足道,但它为路径搜索提供了26%的改进
加快了六个失败的高管。”
对于基于execve的PATH搜索来说,这是一个相当不错的胜利,速度快了26%,特别是对于这是一个常见的操作。在该补丁中提出,shell脚本倾向于使用stat()来检查PATH中的文件,而GNU C库(glibc)和Musl libc,Python,Perl等倾向于使用基于execve的方法,从而受益于这种内核优化。
Nothing beats a small patch for a nice performance win.
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!