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

    文章

    11814

    浏览量

    219527
  • 函数
    +关注

    关注

    3

    文章

    4421

    浏览量

    67822

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何理解Linux内核中的PCIe驱动

    各异的芯片组,加上各种 PCI 设备自身独特的功能需求,Linux 内核中的 PCI 支持远比我们希望的要复杂得多。今天这篇文章,我们将从驱动开发的视角,梳理 Linux PCI 设备
    的头像 发表于 04-11 17:22 1254次阅读

    Linux内核驱动开发的技术核心精要

    嵌入式Linux驱动开发是连接硬件与操作系统的关键环节。随着内核演进(如Linux 6.13)和硬件复杂度提升
    发表于 03-10 13:56

    Linux内核伙伴系统内存申请函数详解:从原理到实战

    Linux 内核中,内存管理是整个系统稳定运行的基石,而伙伴系统(Buddy System) 作为内核物理内存分配的核心机制,更是驱动开发
    的头像 发表于 02-10 16:58 3725次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>伙伴系统内存申请<b class='flag-5'>函数</b>详解:从原理到实战

    内核.config文件:嵌入式开发的“底层配置密码”,90%的开发者都在靠它掌控系统核心

    在嵌入式 Linux 开发中,尤其是瑞芯微 RK3588 这类高性能平台的底层开发内核编译是绕不开的核心环节。
    的头像 发表于 02-09 17:07 1529次阅读
    <b class='flag-5'>内核</b>.config文件:嵌入式<b class='flag-5'>开发</b>的“底层配置密码”,90%的<b class='flag-5'>开发者</b>都在靠它掌控系统<b class='flag-5'>核心</b>

    Linux内核编码风格权威总结:从缩进到底层设计,让你的代码更“内核味”

    作为全球最庞大的开源项目之一,Linux 内核的代码量早已突破千万行。要让来自世界各地的开发者高效协作,一套统一、严谨的编码风格必不可少 —— 这不仅是 “代码颜值” 的要求,更是可读性、可维护性的
    的头像 发表于 02-09 16:29 280次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>编码风格权威总结:从缩进到底层设计,让你的代码更“<b class='flag-5'>内核</b>味”

    深入RK3588内核:rockchip_linux_defconfig的作用与调试价值

    在 RK3588 芯片的 Linux 开发中,有一个文件始终是开发者绕不开的核心 ——kernel/arch/arm64/configs/rockchip_
    的头像 发表于 02-03 15:56 1365次阅读
    深入RK3588<b class='flag-5'>内核</b>:rockchip_<b class='flag-5'>linux</b>_defconfig的作用与调试价值

    Linux系统内核参数调优实战指南

    Linux 内核参数调优是系统性能优化的核心环节。随着云原生架构的普及和硬件性能的飞速提升,默认的内核参数配置往往无法充分发挥系统潜力。在高
    的头像 发表于 01-28 14:27 687次阅读

    【「Linux 设备驱动开发(第 2 版)」阅读体验】Linux内核开发基础

    ,本文介绍Linux内核开发基础 处理内核核心辅助函数 L
    发表于 01-12 22:45

    【「Linux 设备驱动开发(第 2 版)」阅读体验】+读内核处理的核心辅助函数

    上周收到《Linux 设备驱动开发(第 2 版)》书籍,这是一本介绍Linux内核开发的指导性书籍。全面了解
    发表于 01-10 22:08

    深入Linux内核:进程调度的核心逻辑与实现细节

    ,背后都离不开内核调度算法的精准操控。今天,我们就从优先级、调度算法、时间片分配到底层实现,全方位拆解Linux内核进程调度的核心逻辑。 一、进程调度的“身份标识”:优先级与分类 要理
    的头像 发表于 12-24 07:05 4570次阅读
    深入<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>:进程调度的<b class='flag-5'>核心</b>逻辑与实现细节

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

    )  作为“零优化” 选项,看似 “性能拉胯”,却在 kernel 开发调试场景中占据不可替代的地位。 今天就带大家深度拆解:用 O0 编译内核核心优势、实际应用场景,再通过真实案例让你秒懂 —— 为什么资深
    的头像 发表于 12-03 07:05 981次阅读
    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 1307次阅读
    基于 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 1951次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>printk日志级别全解析:从参数解读到实操配置

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

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

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

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