整理 | 王启隆

出品 | CSDN(ID:CSDNnews)

作为送给全球开发者的圣诞礼物,Linux 在前日发布了 Linux 6.1 内核的稳定版,并开启了 Linux 6.2 的合并窗口。这次更新不仅为广大用户带来了不少新功能与改进,还让许多人开始期盼 Linux 6.2 将会合并哪些令人兴奋雀跃的内容。那么,Linux 6.2 的合并窗口现在都有什么新动向呢?

合并华为代码,平均查找性能再提升

12 月 14 日,Linux 6.2 合并了一段来源于华为的代码,这段代码将 Linux 6.2 内核函数的速度提高了 715 倍。代码的注释写道:

通过华为 Zhen Lei 的贡献,Tux(Linux 的吉祥物小企鹅,全称为 tuxedo,此处代指 Linux)在圣诞节期间将 kallsyms_lookup_name() 的平均查找性能提高了 715 倍。这份代码将我们那个 O(n) 的旧实现升级到了 O(log(n)),同时还支持以前 /proc/kallsyms 上的旧实现。

唯一的不足是,这么做将会让内存的占用量增加 3 * kallsyms_num_syms。

文中,kallsyms_lookup_name() 是一个函数,用于根据名称查找符号的地址,并可用于查找内核符号表中的任何符号。这段代码将另一个包含索引的数组添加到原始数组,从线性查找变为二分查找,从 O(n) 变为 O(log(n)),以便可以在不影响原始数组顺序的情况下对其进行排序,并提供显着的加速。

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  时的情况。

通过在 X86 平台上的性能测试,可以得出 kallsyms_lookup_name() 的平均查找性能确实提高了 715 倍:

以前:

Min =234, max=10364402, avg=5206926

Min =267, max=11168517, avg=5207587

现在:

Min =1016, max=90894, avg=7272

Min =1014, max=93470, avg=7293

扩展 ARMSoC 支持,面向更多用户

同样在 12 月 14 日,Linux 6.2 的合并窗口新增了 Arm SoC 支持和 DeviceTree 的更新。6.2 内核将会支持多达 7 种高通骁龙 SoC,甚至还在 Mainline 里提供了对 Apple M1 Pro/Ultra/Max SoC 的初步支持。

在假期合并窗口期间,Linux 内核开发者 Arnd Bergmann 为 Linux 6.2 完成了这次 SoC 更新,而 Linux 之父 Linus Torvalds 已经接受了这些合并请求。

本次更新将加入的七种高通骁龙 SoC 分别是:

MSM8996 Pro(骁龙 821)

SM6115(骁龙 662)

SM4250(骁龙 460)

SM6375(骁龙 695)

SDM670(骁龙 670)

MSM8976(骁龙 652)

MSM8956(骁龙 650)

这些骁龙 SoC 和 Linux 内核目前已支持的高通硬件都有着不少共同之处。与此同时,一些使用这些 SoC 的新设备也成功得到了上游化。包括:

索尼的 Xperia 10 IV、5 IV、X 和 X Compact;一加的 OnePlus One、OnePlus 3、OnePlus 3T 和 OnePlus Nord N100;小米的 Mi6;华为手表;谷歌的 Pixel 3a。

另外,Linux 6.2 Mainline 终于开始了对 苹果 M1 Pro、M1 Max 和 M1 Ultra SoC 的初步支持。研究 Linux for Apple Silicon macs 的组织群体 Asahi Linux 团队正在开发相关的内核代码,该团体的目标便是将 Linux 移植到更新的 Apple Silicon 驱动的 Mac。

如今,更多的代码被上游化至 Linux 6.2,而 Linux 上对苹果 M1 / M2 设备的最佳硬件支持也是来自于 Asahi Linux。

图形驱动改进,拥抱 RTX 30 系显卡

还是在 12 月 14 日,Linux 6.2 合并了开源内核图形/显示驱动程序 Direct Rendering Manager(DRM)。英特尔的锐炫系列显卡(DG2/Alchemist)所使用的 Arc Graphics 驱动也终于不再是“实验性”了。

以前的 Linux 内核如果想支持锐炫 Arc 系列显卡,那就必须通过选项 i915.force_probe= 来强制启用“实验性”硬件支持。但是,在 Linux 6.2 及以后版本中,锐炫 的离散图形处理器被认为足够稳定,可以在默认情况下启用。

从此以后,运行 Linux 6.2+ 和 Mesa 22.3+ 时也可以享受 Arc Graphics 驱动带来的图形优化了。

另一个重大更新自然就是 Linux 6.2 开始初步支持英伟达 RTX 30 “Ampere” 的加速,将其进行了上游化。虽然 RTX 40 早已发布,但还有不少人仍持有着 30 系显卡;使用 Nouveau 的 RTX 30 系列依赖于英伟达几个月前发布的纯二进制固件进行加速,并且 Nouveau Gallium3D 还在 Mesa 中支持 OpenGL。

这是 Linux 6.2 为广大开发者准备的圣诞礼物。值得一提的是,Linux 6.2 的模块代码还包含一个次要的引导优化,可以减少大约 30 毫秒的引导时间。

参考链接:

https://www.phoronix.com/forums/forum/phoronix/latest-phoronix-articles/1362114-linux-6-2-speeds-up-a-function-by-715x-kallsyms_lookup_name

https://www.phoronix.com/news/Linux-6.2-Arm-SoC-Updates

https://www.phoronix.com/news/Linux-6.2-DRM

Linux 6.2:华为代码加速核心功能 715 倍!相关推荐

  1. Linux 6.2 最新合并情况:拓展 ArmSoc 支持,华为代码加速核心功能 715 倍!

    整理 | 王启隆 作为送给全球开发者的圣诞礼物,Linux 在前日发布了 Linux 6.1 内核的稳定版,并开启了 Linux 6.2 的合并窗口.这次更新不仅为广大用户带来了不少新功能与改进,还让 ...

  2. 【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验

    可以基于IDEA的Spring Initializr进行SpringBoot项目的创建,或者移步至Boot官网构建一个简单的web starter项目:https://start.spring.io/ ...

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

    点击"开发者技术前线",选择"星标" 让一部分开发者看到未来 IT之家 12 月 14 日消息,Linux 6.2 今日合并了来自华为郑磊(Zhen Lei,音 ...

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

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Linux 6.2 近日合并了一个重要补丁,该补丁能够将一个核心内核函数速度提升 715 倍. 从合并的注释可知, ...

  5. linux 加速播放软件,VirtualBox 6.1首次推出Linux 5.4支持,加速的视频播放及更多功能...

    VirtualBox 6.1首次推出Linux 5.4支持,加速的视频播放及更多功能 Mark Do 2019年12月14日 暂无评论 阅读 7,329 次 现在可以下载VirtualBox的主要更新 ...

  6. 利用js加密保护核心功能代码

    前言 像很多大站,都有类似于站外链接跳转提示这类功能,这类功能应用范围广,如果被不法分子找到代码中可能被利用的漏洞,很容易利用xss攻击等行为达到非法的目的,导致众多用户信息可能遭受风险,自身产品也蒙 ...

  7. wkhtmltopdf 实现html 文档对象转换为pdf 文件核心功能代码

    环境说明 环境:windows10 客户端软件:wkhtmltopdf 记得配置wkhtmltopdf 全局环境变量,相关的安装步骤可以baidu或者google wkhtmltopdf 安装包已经上 ...

  8. 002 第一季SpringBoot2核心技术-核心功能:配置文件、Web开发(原生组件)、数据访问、单元测试、指标监控、原理解析:@Value、命令行参数、手动获取bean、自定义starter

    三.核心技术之- ->核心功能 1. 配置文件 1.1 文件类型 1.1.1 properties 同以前的properties用法 优先级高于yml的方式. 1.1.2 yaml 1) 简介 ...

  9. linux内核7大功能,Linux Kernel5.10十个值得关注的功能

    Linux Kernel 5.10 有望在本周末发布,外媒 Phoronix 盘点了 10 个值得关注的改进和新功能.5.10 不仅是 2020 年最后一个内核版本,而且还是长期支持(LTS)版本. ...

最新文章

  1. 剑指offer:数字在排序数组中出现的次数
  2. [Spring Data MongoDB]学习笔记--建立数据库的连接
  3. 【CodeForces】960 F. Pathwalks 主席树+动态规划
  4. Ajax中请求被缓存的问题
  5. 利用Python进行「基金投资组合优化」(一)
  6. 机器学习爬大树之决策树(ID3,C4.5)
  7. SecureCRT SSH 失败 Key exchange failed 解决方法
  8. 解决岛屿类问题(网格)通用解法DFS(附题)
  9. Collection的另外一个子类LinkedListSet集合
  10. LINUX操作系统练习题
  11. 2023年数据结构考研知识梳理视频哪里有
  12. quadro 2000专业显卡 win7计算机体验指数5.9,quadro显卡天梯图小虫_quadro专业显卡天梯图小虫2020年 - 系统家园...
  13. 什么叫断章取义,什么叫曲解——你被骗了多少年?
  14. 云计算基础平台iaas(openstack)超级详细搭建(三)安装服务
  15. mysql命令行导入csv_MySQL命令行导入CSV文件
  16. Excel表格如何设置下拉选项并应用到整列
  17. 程序员工作9年月薪从1.5K到24K,网友:不如刚毕业985
  18. RocketMQ消息生产者是如何选择Broker的
  19. matlab 已实现极差波动,关于黄金期货论文范文写作 中国黄金期货价格SVR智能预测相关论文写作资料...
  20. 程序员:品《漱玉词》看李清照生活审美

热门文章

  1. android:很抱歉,XXX已停止运行
  2. 数据表中常见的数据类型
  3. 单片机 STM32 HAL PCF8574 例子代码
  4. 送外卖优先级_【超新人\超现实】送外卖需要了解的那些事
  5. String task用法
  6. C语言程序(有一点pp)实现PVZ一代修改,探索记录 (随缘更新)
  7. mixin 和 mixins 区别 ?
  8. 原生js之运动函数的封装
  9. 数据结构_线段树 详解+模板
  10. 移动互联网时代电商如何突围?