0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

OSC开源社区 来源:OSC开源社区 作者:OSC开源社区 2022-12-16 11:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

3701515a-7ce2-11ed-8abf-dac502259ad0.png

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

371909bc-7ce2-11ed-8abf-dac502259ad0.png

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 毫秒。 相关链接:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3ba2c3ff98ea8bfb219288dbacf2a23a902c751b

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218007
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66851

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

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GCC -O0 编译内核:调试党的 “救命神器”,这些优势 90% 开发者没吃透!

    )  作为“零优化” 选项,看似 “性能拉胯”,却在 kernel 开发调试场景中占据不可替代的地位。 今天就带大家深度拆解:用 O0 编译内核核心优势、实际应用场景,再通过真实案例让你秒懂 —— 为什么资深
    的头像 发表于 12-03 07:05 41次阅读
    GCC -O0 编译<b class='flag-5'>内核</b>:调试党的 “救命神器”,这些优势 90% <b class='flag-5'>开发者</b>没吃透!

    基于 DR1M90 的 Linux-RT 内核开发:从编译配置到 GPIO / 按键应用实现(1)

    ,及 rt_gpio_ctrl、rt_input 应用案例。含实操命令与测试方法,适配指定硬件,帮助开发者完成 Linux-RT 系统开发与优化,满足 DR1M90 产品实时性应用需求。
    的头像 发表于 12-02 10:38 304次阅读
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>内核</b><b class='flag-5'>开发</b>:从编译配置到 GPIO / 按键应用实现(1)

    Linux内核printk日志级别全解析:从参数解读到实操配置

    ”—— 它直接决定了 printk(内核打印函数)的日志输出行为。如果你是嵌入式开发者内核调试工程师,或经常需要排查驱动 / 系统问题,理解这串数字和 printk 输出等级,能让你
    的头像 发表于 11-20 15:54 1273次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>printk日志级别全解析:从参数解读到实操配置

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动开发
    的头像 发表于 11-18 08:06 462次阅读
    【免费送书】成为硬核<b class='flag-5'>Linux</b><b class='flag-5'>开发者</b>:《<b class='flag-5'>Linux</b> 设备驱动<b class='flag-5'>开发</b>(第 2 版)》

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    )。成为硬核Linux开发者Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、
    发表于 11-17 17:52

    deepin亮相2025中国Linux内核开发者大会

    11 月 1 日,第二十届中国 Linux 内核开发者大会(CLK)在深圳举办。CLK 作为国内 Linux 内核领域极具影响力的峰会,由清
    的头像 发表于 11-05 17:59 629次阅读

    RK3506开发板Xenomai内核RT-Linux实时性系统适配教程与性能实测,实测仅7μs稳定延时

    本文基于触觉智能RK3506核心板/开发板,介绍Xenomai内核RT-Linux实时性系统适配,并附性能实测。简介与实测数据Xenomai简介XEnomai是一个实时子系统,可与
    的头像 发表于 09-18 14:21 894次阅读
    RK3506<b class='flag-5'>开发</b>板Xenomai<b class='flag-5'>内核</b>RT-<b class='flag-5'>Linux</b>实时性系统适配教程与性能实测,实测仅7μs稳定延时

    Linux内核参数调优方案

    在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文深入探讨如何通过精细化的Linux内核参数调优,让你的K8s节点网络性能提升30%以上。
    的头像 发表于 08-06 17:50 719次阅读

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Linux-RT应用开发案例

    PREEMPT机制进行补丁。PREEMPT_RT补丁的关键是最小化不可抢占的内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。PREEMPT_RT补丁利用
    的头像 发表于 07-30 10:33 579次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业<b class='flag-5'>开发</b>板—<b class='flag-5'>Linux</b>-RT应用<b class='flag-5'>开发</b>案例

    迅为RK3568开发板OpeHarmony学习开发手册1.1-内核移植优化

    在上一小节的内核移植过程中,我们重新创建了内核补丁文件。然而,对于频繁修改内核源代码进行开发的情况来说,每次都制作
    发表于 07-26 10:37

    华为正式启动HarmonyOS 6开发者Beta

    在2025年华为开发者大会(HDC)上,华为正式启动HarmonyOS 6开发者Beta,并全面展示一年多以来与合作伙伴共建鸿蒙生态的创新成果。
    的头像 发表于 06-24 15:42 646次阅读

    物联网工程师为什么要学Linux

    Linux生态中已集成MQTT、TCP/IP、ZigBee等物联网常用协议栈,开发者可直接调用或移植,避免从零实现协议的复杂性。此外,庞大的开源社区(如Contiki、RT-Thread)提供了丰富
    发表于 05-26 10:32

    Linux内核编译失败?移动硬盘和虚拟机的那些事儿

    Linux开发中,编译内核是一项常见任务,但不少开发者在移动硬盘或虚拟机环境下尝试时会遭遇失败。本文简要探讨这些问题的成因,并介绍一些虚拟
    的头像 发表于 04-11 11:36 739次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>编译失败?移动硬盘和虚拟机的那些事儿

    树莓派4 性能大比拼:标准Linux与实时Linux 4.19内核的延迟测试

    引言本文是对我之前关于RaspberryPi3同一主题的帖子的更新。与之前的帖子一样,我使用的是随Raspbian镜像提供的标准内核,以及应用了RT补丁的相似内核版本。对于实时版,我
    的头像 发表于 03-25 09:39 659次阅读
    树莓派4 性能大比拼:标准<b class='flag-5'>Linux</b>与实时<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>内核</b>的延迟测试

    《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发

    ,为职业发展增添有力筹码。 目前,该课程成绩斐然,学习人次已超过150万,页面访问量突破440万,获4.8分用户好评,超50万开发者通过认证考试。 未来,华为持续丰富课程内容,帮助开发者
    发表于 01-02 14:24