平均查找性能提高了 715 倍,Linux 6.2 合并华为贡献的代码,华为OD火到国外!...

华为工程师郑磊的代码优化使Linux6.2中kallsyms_lookup_name()函数的平均查找性能提升了715倍,该函数用于根据符号名称查询其地址。

点击“开发者技术前线”,选择“星标”

让一部分开发者看到未来

IT之家 12 月 14 日消息,Linux 6.2 今日合并了来自华为郑磊(Zhen Lei,音译)的代码,将核心内核功能的速度提高了 715 倍。

在合并代码模块介绍中写道:“得益于 Zhen Lei 的代码,Tux(Linux 的吉祥物,这里指 Linux)在 kallsyms_lookup_name () 平均查找性能提高了 715 倍,将我们的旧实现从 O (n) 升级到 O (log (n)),同时还保留了 / proc / kallsyms 上的旧实现支持”。

b4ca1ecf90ef66150b039c58f30ad50c.jpeg

IT之家了解到,kallsyms_lookup_name () 函数用于根据一个符号的名称查询其地址,并可用于内核符号表内任何符号的查询。

华为的 Zhen Lei 在之前的补丁贴中描述了对 kallsyms_lookup_name 的优化:

目前,为了搜索一个符号,我们需要将 'kallsyms_names' 中的符号逐一展开,然后使用展开后的字符串进行比较。这是 O (n)。

如果我们像地址一样将名字按升序排序,我们也可以使用二进制搜索。而这就是 O (log (n))。

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

增加数组 kallsyms_seqs_of_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 的情况。

优化前:

min=234, max=10364402, avg=5206926

min=267, max=11168517, avg=5207587

优化后:

min=1016, max=90894, avg=7272

min=1014, max=93470, avg=7293

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

于是某社交App上开始 传言 ,系统代码其中与不少OD(外包)参与开发,某部要求的OD同学转正。

74701f451958f86ca303f7fec24882f1.png

脉脉社区一直有学技术就得选OD的言论, 互联网有句话: “先有华为后有天,鸿蒙代码OD编”。

b8b316cfef313056b3e7384c091ffc8c.jpeg

4450184c5ab969c08c9fc0954e1b2825.jpeg

— 完 —
点这里👇关注我,记得标星呀~

历史推荐

C++ 首超 Java!

Windows Subsystem For Linux 正式发布 1.0 版本

爆火的ChatGPT太强了!改周报、写代码、改bug,网友:谷歌搜索或GG,Stack Overflow被取代了!

好文点个在看吧

什么是LFS?   LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的linux,不单单是个性的桌面。   LFS 有什么优势呢?现在看来,它可以提供最快和最小的Linux。但是最大的优势就是,安装LFS是菜鸟变成高手的捷径。第一次安装,需要按照LFS文档安装,如果在此期间所有文档内容你都认真的阅读,保证你受益匪浅;然后发现很多地方可以不按照别人的老路操作,这个时候用自己的方式参考第一次安装的经验,再一次建立linux,完成的时候,你会发现你在LinuxSir.Org 上已经再也不是菜鸟了。   安装两次LFS,总共要用去你一个多礼拜(说不定一个多礼拜还装不完)的业余时间。但是这一个多礼拜将是你linux水平进步最快的一个多礼拜。   当然,不是说LFS要装两遍,也没有说,一定要装那么长时间。如果闷头装,什么都不管,大概一共十个小时就有一个高效的完整的linux系统呈现在你面前。(根据机器速度不同时间上会有差异)   最后,在我们开始之前,你想一下,丰富的 Linux 知识对于你来说比在 Mplayer 上看片,用 KDE 作PP桌面等来说是不是更重要。如果是,我们期盼你成功完成LFS系统加入我们LFS爱好者的行列! lfs-详细信息   LFS 存在的一个重要原因是可以帮助人们学习 linux 系统的内部是如何工作的。构建一个 LFS 系统会帮助演示是什么使 linux 运转,各种组件如何在一起互相依赖的工作。最好的事情之一,是这种学习的经历给予的是一种能力,能够定制满足您自己需要的 linux。   LFS 的一个关键的好处是它让用户对于系统有更多的控制,而不是依赖于某些人的 linux 实现。在 LFS 的世界里,你是坐在司机的位置,掌控系统的每一个细节,比如目录层次和启动脚本配置。你也能掌控程序在哪里,为何,以及怎样被安装。   LFS 的另一个好处是可以创建一个非常紧凑的 linux 系统。当安装一个常规的发行版时,人们经常要被迫安装一些可能永远不会用到的程序。这些程序浪费宝贵的磁盘空间,或更糟的是占用 CPU资源。要构建一个少于100兆(MB)的 LFS 系统不是一件难事,这相比较目前大多数的发行版要小很多。这听起来是不是仍然占许多空间?我们中一些人的工作是创建一个非常小的嵌入式的 LFS 系统。我们成功的构建了一个系统,在只运行 Apache 服务器的情况下,大约占8MB磁盘空间。进一步的缩减能够减至5MB或更少。你用一个常规的分发版本试试?这也只是设计你自己的 linux 所带来的好处之一。   我们可以拿 linux 发行版与快餐店出售的汉堡打比喻,您不能决定您应该吃什么。相反,LFS 没有给您一个汉堡。而是给您一张制作汉堡的配方。用户可以查阅配方,减掉不想要的配料,增加你自己的配料以增强汉堡的口味。当你对配方满意的时候,开始去做准备。您可以采用确定的方式:或烤,或烘,或炸,或焙。   另外一个比方是把 LFS 与建筑房子比较。LFS 提供房子的框架蓝图,但是需要您去建筑它。LFS 包含了在这过程中调整计划的自由,定制满足用户的需要和参考。   用户定制的 linux 系统的另一个好处是安全性。通过从源码编译整个系统,您能够审查任何东西,打上所有的安全补丁,而不需要等待别人去编译好修补了安全漏洞的二进制包。除非是您发现并制作的补丁,否则您得不到任何的保证,新的二进制包是否正确编译或修正了问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值