linux6.2:华为代码加速核心功能715倍!

CSDN云计算 CSDN云计算     2022-12-16     481

关键词:

整理 | 王启隆

出品 | 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内核补丁,将核心内核函数速度提升715倍

Linux6.2近日合并了一个重要补丁,该补丁能够将一个核心内核函数速度提升715倍。从合并的注释可知,贡献此补丁的维护者ZhenLei来自华为,他将kallsyms_lookup_name()的平均查找性能提高了715倍,从而使内核里面旧实现... 查看详情

linux6.2已正式发布

...p;6.2内核,这是2023年的第一个主要内核版本。硬件方面,Linux6.2提升了IntelArc显卡(DG2/Alchemist)的稳定性,真正做到开箱即用。英特尔的OnDemand驱动程序现在状态良好,适用于第4代Xeon可扩展“SapphireRapids”CPU。其次,Linux6.2初步支持... 查看详情

linux6.2已正式发布

...p;6.2内核,这是2023年的第一个主要内核版本。硬件方面,Linux6.2提升了IntelArc显卡(DG2/Alchemist)的稳定性,真正做到开箱即用。英特尔的OnDemand驱动程序现在状态良好,适用于第4代Xeon可扩展“SapphireRapids”CPU。其次,Linux6.2初步支持... 查看详情

一行代码加速sklearn运算上千倍(代码片段)

作者| 费弗里来源|Python大数据分析❞1、简介scikit-learn作为经典的机器学习框架,从诞生至今已发展了十余年,但其运算速度一直广受用户的诟病。熟悉scikit-learn的朋友应该清楚,scikit-learn中自带的一些基于joblib等库... 查看详情

pytorch宣布支持苹果m1芯片gpu加速!训练快6倍,推理提升21倍!(代码片段)

点击上方“迈微AI研习社”,选择“星标★”公众号重磅干货,第一时间送达转载自:机器之心|编辑:泽南、蛋酱对于Mac用户来说,这是令人激动的一天。今年3月,苹果发布了其自研M1芯片的最终型号M1Ultr... 查看详情

用taichi加速python:提速100+倍!(代码片段)

Python已经成为世界上最流行的编程语言,尤其在深度学习、数据科学等领域占据主导地位。但是由于其解释执行的属性,Python较低的性能很影响它在计算密集(比如多重for循环)的场景下发挥作用,实在让人... 查看详情

你敢信!?几行代码让swift数组初始化提速440+倍!

功能需求在Swift中,我们有时需要初始化数组内容,这往往是一个耗时操作,数组越大时间越长。那么,如何最大限度的缩短数组的初始化时间呢?如上所示,在初始化1w个元素的数组时,我们的3种方法分别耗时为:53.855秒0.36秒... 查看详情

测量 NVIDIA 张量核心加速

...构(V100GPU)上使用NVIDIATensorCores。我想测量张量核心对我的代码的影响(用于测试目的的Tensorflow/Python中的卷积神经网络)。如何测量张量核心加速?是否可以禁用张量核心并在有/没有它们的情况下运行相同的代码?我尝试过 查看详情

glm国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手(代码片段)

作者|BBuf、谢子鹏、冯文2017年,Google提出了Transformer架构,随后BERT、GPT、T5等预训练模型不断涌现,并在各项任务中都不断刷新SOTA纪录。去年,清华提出了GLM模型(https://github.com/THUDM/GLM),不同... 查看详情

两行代码自动压缩vit模型!模型体积减小3.9倍,推理加速7.1倍

...工具(ACT,AutoCompressionToolkit)。ACT无需修改训练源代码,调用两行压缩API,通过几十分钟量化训练,保证模型精度的同时,极大的减小模型体积,降低显存占用,提升模型推理速度,助力AI模型... 查看详情

python技巧!可以将numpy加速700倍!

...f0c;Numpy的速度已经较Python有了很大的提升。当你发现Python代码运行较慢,尤其出现大量的for-loops循环时,通常可以将数据处理 查看详情

150倍加速机械盘,ucloud云主机io加速技术揭秘

...针对机械盘IO性能低下的问题,我们通过自研的云主机IO加速方案,使4K随机写的最高性能由原来的300IOPS提升至4.5WIOPS,提高了150倍,即用机械盘的成本获得了SSD的性能。13年上线至今,该方案已历经五年的运营实践,并成功应用... 查看详情

python代码加速100倍,针对excel自动化处理的加速实战!(代码片段)

...f09;指的就是在同一时刻,有两个或两个以上的任务的代码在处理器上执行。从这个概念我们也可以知道,多个处理器或多核处理器是并行执行的必要条件。在单个CPU核上,线程或进程通过时间片或者让出控制权来实... 查看详情

Cython 似乎通过减少时间分析器而不是核心代码的开销来提供加速?

】Cython似乎通过减少时间分析器而不是核心代码的开销来提供加速?【英文标题】:Cythonseemstoprovidespeed-upbyreducingtheoverheadintimeprofilerratherthanthecorecode?【发布时间】:2018-03-1423:57:32【问题描述】:我试图学习和使用cython来加速我... 查看详情

715.rangemodule(代码片段)

ARangeModuleisamodulethattracksrangesofnumbers.Yourtaskistodesignandimplementthefollowinginterfacesinanefficientmanner. addRange(intleft,intright) Addsthehalf-openinterval [left,right), 查看详情

百度网盘视频播放速度修改(代码片段)

chrome:右上角设置->moretools->developertools->console:加速1.5倍核心代码:videojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(1.5)可修改加速倍数videojs.getPlayers("video-player").html5player.tech 查看详情

使用numba加速opencvpython视频流代码。提升6.5倍性能(代码片段)

使用Numba对OpenCVPython视频处理代码加速。性能提升6.5倍目标问题:在OpenCVPython中视频处理是比较耗资源的,从而造成画面卡顿,如果跳帧处理可能造成丢失关键数据。用Numba对OpenCV代码加速是1个较好的改进方法。只须... 查看详情

pytorch实现苹果m1芯片gpu加速:训练速度提升7倍,性能最高提升21倍

...队合作,目前已可以支持在搭载M1芯片的Mac上使用GPU加速PyTorch训练。而在此之前,在Mac上进行PyTorch训练仅能利用CPU。但随着PyTorchv1.12版本的发布,开发和研究人员可以利用AppleSiliconCPU的优势,大大加快模型训练速... 查看详情