|
马上注册登陆,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?用户注册
x
华为开发者贡献 L 内核补丁,将核心内核函数速度提升 715 倍Linux命令大全的相关资讯可以到我们网站了解一下,从专业角度出发为您解答相关问题,给您优质的服务!
从合并的注释可知,贡献此补丁的维护者 Z L 来自华为,他将 __ () 的平均查找性能提高了 715 倍,从而使内核里面旧现的时间复杂度从 O () 升级到 O ( ()),大幅减少查找时间,同时还保留了 上旧的现支持。
__ () 函数用于根据称查找符号的地址,并可用于查找内核符号表中的任何符号。
Z L 曾在较早的补丁中描述了 __ () 的化思路:目前,要搜索一个符号,我们需要将 '_' 中的符号一个一个展开,然后使用展开后的字符串进行比较。这种算法的时间复杂度是 O ()。
如果我们像地址一样按升序对称进行排序,则可以使用二分查找。这种算法的时间复杂度是 O ( ())。为了不改变 “” 的现,表 _ [] 仍然按照升序与地址一一对应存储。添加数组 ___ [],以排序后的 序号为索引,对应的内容为排序后的地址序号。例如:假设 NX 在数组 ___ [] 中的索引为 '',___ [] 的内容为 '',则 NX 对应的地址为 _ []。_ [] 中的偏移量是 __ ()。
请注意,使用此方法内存使用量将增加 (4 * __) 字节,接下来的两个补丁将减少 (1 * __) 字节并正确处理 CONFIG_LTO_CLANG= 的情况。
性能测试结果:(86)
B:
=234, =10364402, =5206926
=267, =11168517, =5207587
A:
=1016, =90894, =7272
=1014, =93470, =7293
__ () 的平均查找性能提高了 715 倍。因此,该补丁带来的仅有缺点是将内存占用量增加 3 * __。L 62 的模块代码还包含一个小的启动化,将启动时间缩短了大约 30 毫秒。 |
|