华为开发者贡献 Linux 内核补丁,将核心内核函数速度提升 715 倍


Linux 6.2 近日合并了一个重要补丁,该补丁能够将一个核心内核函数速度提升 715 倍。

从合并的注释可知,贡献此补丁的维护者 Zhen Lei 来自华为,他将 kallsyms_lookup_name() 的平均查找性能提高了 715 倍,从而使内核里面旧实现的时间复杂度从 O(n) 升级到 O(log(n)),大幅减少查找时间,同时还保留了 /proc/kallsyms 上旧的实现支持。

kallsyms_lookup_name() 函数用于根据名称查找符号的地址,并可用于查找内核符号表中的任何符号。

Zhen Lei 曾在较早的补丁中描述了 kallsyms_lookup_name() 的优化思路:

目前,要搜索一个符号,我们需要将'kallsyms_names'中的符号一个一个展开,然后使用展开后的字符串进行比较。这种算法的时间复杂度是 O(n)。

如果我们像地址一样按升序对名称进行排序,则可以使用二分查找。这种算法的时间复杂度是 O(log(n))。

为了不改变“/proc/kallsyms”的实现,表 kallsyms_names[] 仍然按照升序与地址一一对应存储。

添加数组 kallsyms_seqs_of_names[],以排序后的 names 序号为索引,对应的内容为排序后的地址序号。例如:假设 NameX 在数组 kallsyms_seqs_of_names[] 中的索引为 'i',kallsyms_seqs_of_names[i] 的内容为'k',则 NameX 对应的地址为 kallsyms_addresses[k]。kallsyms_names[] 中的偏移量是 get_symbol_offset(k)。

请注意,使用此方法内存使用量将增加 (4 * kallsyms_num_syms) 字节,接下来的两个补丁将减少 (1 * kallsyms_num_syms) 字节并正确处理 CONFIG_LTO_CLANG=y 的情况。

性能测试结果:(x86)
Before:
min=234, max=10364402, avg=5206926
min=267, max=11168517, avg=5207587
After:
min=1016, max=90894, avg=7272
min=1014, max=93470, avg=7293

kallsyms_lookup_name() 的平均查找性能提高了 715 倍。

因此,该补丁带来的唯一缺点是将内存占用量增加 3 * kallsyms_num_syms。

Linux 6.2 的模块代码还包含一个小的启动优化,将启动时间缩短了大约 30 毫秒。


相關推薦

2022-11-25

inux 3.10 内核发布以来,Linaro 一直被列为 Linux 内核的十大贡献者之一。自 2014 年以来,Linaro 与高通也一直保持着密切合作,这也是他们能这么快提交支持代码的一个原因。 此次支持工作大部分都是由 Linaro 的工程师 Abel Vesa 和 N

2022-05-26

Android 13,使其成为默认的只读文件系统。该文件系统由华为开发,与现有的文件系统相比,EROFS 具有明显的优势,能够显著节省存储空间并带来速度与性能提升。 EROFS 是 Enhanced Read-Only File System 的首字母缩写,最初由华为开

2022-10-11

多样性计算的操作系统构建了丰富的软件生态。 1265 名开发者参与了 openEuler 22.09 的版本贡献,相较于上一个版本,参与版本贡献的开发者数量新增 63%,是 openEuler 已经发布的发行版中,开发者数量最多的一次。openEuler 22.09 的

2023-03-01

是取代 ext3 文件系统,改善 ext3 的限制。 去年,SUSE 的开发者 David Sterba 为 Linux 6.0 内核更新了 Btrfs 文件系统,当时将直接 I/O 读取限制增加到 256 个扇区的更改使工作负载的吞吐量提高了 3 倍。 近日 David Sterba 再向 Linux 6.3 内

2022-01-07

lnar 介绍了「Fast Kernel Headers」的诞生背景:“大多数内核开发者应该都知道,Linux 内核有大约 1 万个 main.h 头文件,它们位于 include/ 和 arch/*/include/ 这样的层次结构中。过去的 30 多年里,这些头文件已经发展成为复杂而痛苦的交

2023-04-27

系统加密框架进行了各种清理和修复,已准备好在未来的内核版本中使用 CephFS 文件系统进行 FSCRYPT 加密。

2022-10-11

持部分引用的 pclusters,用于全局压缩的重复数据删除。开发者在邮件列表中表示,希望 Linus 可以在 6.1-rc1 中合并这个 PR。  

2023-05-27

来”为主题的openGauss Developer Day 2023(openGauss开发者大会2023)在北京举办。本届大会在中国计算机学会、国家工业信息安全发展研究中心指导下,由openGauss开源社区主办,联合海量数据、云和恩墨、南大通用共同举办

2023-03-17

展线上开源协作和线下社区互动等方面合作,努力为全球开发者提供一流的行业解决方案。 了解更多 openGemini 咨询,欢迎关注 openGemini 公众号

2023-11-07

。共有2220位贡献者为 4.0 Release版本做出了贡献。其中,华为贡献者1800名,累计2000+名,共增删改代码8849882行,占比80.03%。 华为的5名顶级贡献者和华为以外的15名顶级贡献者如下: 以下的单位参与了OpenHarmony 4.0 Release版本的

2022-11-08

近日微软为了扩展内核支持,为 Linux 内核提供了一系列的补丁,其中一个值得注意的地方是微软为 Linux 带来了运行嵌套监控程序(Hyper-V)或嵌套虚拟化的功能。 这组补丁是由微软的 Linux 高级工程师 Jinank Jain 在本周三发出的

2022-09-17

举行的  Linux Plumbers 大会 (LPC 2022)上介绍了新的 Linux 内核调度方法 “Nest”, Nest 调度程序由 Inria  研究所、 oracle Labs 、悉尼大学合作开发。据  Julia 介绍称,Nest 调度程序可利用现代硬件“将性能提高了 10%-2 倍,

2022-05-11

有重大更新,对于维护者的邮件反馈也没有回应,因此有开发者担心它成为了“孤儿项目”。近日 Paragon Software 创始人兼 CEO Konstantin Komarov 对社区的担忧进行了回应。 Konstantin Komarov 说,Paragon 并没有停止 NTFS3 驱动的开发工作

2023-02-24

由英特尔发起的最新内核性能补丁改进了 Linux 内核的公平调度程序代码,这个补丁系列的重点是避免不必要的跨 CPU 唤醒,可增强搭载高核心数 CPU 的 Linux 系统性能。 该 Linux 内核调度补丁主要是将短任务放在当前 CPU 上,以避