deepin 助力开源桌面生态:mesa LLVMpipe ORCJIT 上游化的台前幕后
内容来源:deepin(深度)社区
近日,mesa 开源图形驱动合并了 llvmpipe 的 ORCJIT 后端的 Merge Request (MR),并实现了对 riscv64 架构的支持。
LLVMpipe 是什么?
LLVMpipe 是 mesa 驱动中的一种软件渲染器,它不使用 GPU 硬件,而是利用 LLVM 中的 JIT 编译器,动态地将待渲染的图形相关代码转译为栅格化的数据用于显示,相对于 softpipe 而言性能更优。
饱受诟病的闭源驱动从始至终都是阻碍 riscv64 架构桌面生态的一大原罪,导致大部分 riscv64 架构的开发板的内置 GPU 完全或部分不可用,桌面发行版只能使用软件渲染作为替代方案。
然而,在很长一段时间,mesa 的 LLVMpipe 使用的 JIT 后端是老旧的、缺乏架构支持的 MCJIT,而非更新的、架构支持更加广泛的 ORCJIT。由于前者已经明确由后者替代接续,不再接受新的架构更新,这使得 mesa 在 riscv64 等架构上使用软件渲染时只能使用性能更加低下的 softpipe,最终导致桌面环境几乎无法使用,使得桌面生态遭受毁灭性的打击。
正因如此,开源社区急切地渴望在 riscv64 架构上拥有一个更快的软件渲染器。
ORCJIT 的首次尝试
时间推进到了 2022 年 7 月。一位 Alex Fan (@alexfanqi) 的开发者提交了 MR 17801,为 mesa 引入了新的 ORCJIT 后端,同时还为其加上了 riscv64 支持,这使得在 riscv64 上使用 LLVMpipe 软件渲染成为了可能。
这个 MR 并没有第一时间被合并,因为有开发者指出它没有一个开关用以在编译时切换后端、代码不够简洁需要优化、缺少着色器缓存等问题,还需要进一步优化。
从此开始,长达两年的 LLVMpipe ORCJIT 后端合并的长跑开始了。
2022 年 7 月,openEuler 社区的 RISC-V SIG 发现了这个 PR 并将其并集成,发布了一篇文章介绍了它的性能提升效果。
然而,就在 riscv64 平台的开源桌面生态即将迎来曙光的时候,世事难料,随着 mesa 开发分支的高速推进,原来的 Merge Request 缺乏维护,与主线的差异和冲突越来越大,渐渐的被淹没在冗长的 MR 列表中,逐渐被人淡忘。
社区的接力:开源软件不灭的火种
2023 年 11 月,一位名为 Yukari Chiba (@YukariChiba) 的开发者在维护自己的发行版时,遇到了同样的问题。她受够了大部分主线发行版在遇到这个问题时切换到 softpipe 的忍让态度,决定着手解决这个问题。
被尘封在 MR 列表中的 patch,再一次化作荧幕上的光芒。
11 月 1 日,@YukariChiba 在某个群组里发布了一张在飞腾派上以开启了 ORCJIT 的主线 mesa 使用 LLVMpipe 运行 glxinfo 的截图,并在次日发布了一张在 PineTab-V 上使用 LLVMpipe 运行 glmark 的截图。
11 月 8 日,@YukariChiba 以相同的 ID,在 mesa 主线中重新提交了 MR 26018,旨在为主线版本 mesa 提供参考 patch 的同时,推进 mesa 主线的合并。
很快,deepin、ArchLinux RISC-V、AOSC OS 等发行版也先后使用了这一版 MR 的补丁,RISC-V 主线化的桌面体验再一次达到了可用的状态。
2024 年 4 月,Icenowy Zheng (@icenowy) 在 ORCJIT MR 的基础上增加了着色器缓存和 loongarch 架构的支持,这意味着 ORCJIT 后端一旦合入,所有的主流桌面架构都能实现性能优异的 LLVMpipe 支持。
众人拾柴火焰高,长风破浪会有时,LLVMpipe ORCJIT 这一突破性进展受到越来越多开发者的关注,合并进入主线逐渐被提上了日程。
MR 的接力冲刺和最终合并
6 月 19 日,有开发者评论:
Is there anything outstanding that is preventing this from being merged into the main mesa branch?
而这打破了 MR 评论区的宁静。在后续的 1 个月里,社区贡献者们对该 MR 提出了数十条修改意见;Dave Airlie (@airlied) 为帮助 ORCJIT 最终落地提交了数个前序修改和代码结构优化;MR 提交者 @YukariChiba 根据修改意见对 MR 提交内容修改了数十个版本,并最终在 6 月 28 日提交了最终版本。
最终,7 月 16 日,Merge Request 26018 完成了合并前 CI 检查,被 mesa 主线合入,标志这这一场由全球无数开发者参与、持续两年的开源马拉松圆满落幕。
deepin的持续跟踪与维护:幕后故事
在 mesa 提交 MR 的这位 ID 称作 @YukariChiba 的开发者还有另外的身份:deepin(深度)开源社区的研发工程师,deepin-ports SIG 开发者,deepin RISC-V port 的维护者之一。
deepin-ports SIG 在 2023 年成功将 RISC-V 的支持合并到了主线,同时也对主流的开发板进行了适配。与其它开源社区一样,deepin 也饱受无法主线化、依赖闭源驱动组件的 GPU 图形驱动的困扰,mesa 的 ORCJIT 后端支持此时无异于雪中送炭。
deepin 在 2023 年 12 月 6 日便对这一份更新的 patch 做了内部的打包验证,并在 VisionFive2、LicheePi4A、SG2042 EVB 等开发板上做了实机验证和性能测试。
次日,deepin 合并了此 MR 的 patch 到 mesa 主线仓库,为 riscv64 架构默认打开了 ORCJIT 支持,并在后续所有的 riscv64 设备镜像中启用。
从 2023 年 11 月的初版补丁,直到 2024 年 7 月 16 日的最终合并,deepin 的 mesa 版本也相应的从 23.1.2 一路升级到了 24.1.0。在这过程中,deepin-ports SIG 积极适配新版 mesa 并刷新补丁,做到了在版本迭代的过程中补丁持续有效,助力了此特性的测试和维护,客观上为 mesa 上游的最终合并提供了社区支持。
在此期间,deepin 同时也超前引入了尚未合并、基于 ORCJIT 提交的 loongarch 支持补丁和着色器缓存补丁,为 deepin-ports 两大架构 riscv64 和 loong64 提供了更高性能的软件渲染,完善了 deepin 的桌面生态。
未来,deepin 还将继续跟进 mesa 等开源软件的上游更新和后续的性能优化,为完善 amd64/arm64/riscv64/loong64 四大架构的开源桌面体验而不懈努力。
附录:
(1)deepin 全版本镜像(含 deepin V15):https://distrowatch.com/index.php?distribution=deepin
(2)deepin RISC-V 架构镜像(LicheePi 4A、VisionFive 等):https://www.deepin.org/zh/download/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
“鸿蒙之父”王成录计划建立鸿蒙操作系统理论体系系统
深圳开鸿数字产业发展有限公司 CEO 王成录近日发表微博,称已收到哈尔滨工业大学博士研究生录取通知书,专业为电子信息。他表示,将跟随徐晓飞教授学习,计划用三年时间把鸿蒙操作系统理论体系系统全面建立起来。 王成录曾主导鸿蒙系统开发,也曾担任华为终端 BG 软件部总裁、华为消费者业务 AI 与智慧全场景业务部总裁。2022 年 5 月,王成录正式从华为离职,就职深圳开鸿数字产业发展有限公司(简称 “深开鸿”),出任 CEO。 有网友在该微博的评论区留言询问,“今年能买到鸿蒙 PC 吗?”,王成录回复“会有的”。 延伸阅读 王成录:开源鸿蒙是我国基础软件领域唯一一次架构创新 “鸿蒙之父” 王成录:明年推出鸿蒙 PC 版系统
- 下一篇
中共中央:完善生成式人工智能发展和管理机制
新华社受权发布《中共中央关于进一步全面深化改革推进中国式现代化的决定》,其中提到要健全网络综合治理体系,深化网络管理体制改革,整合网络内容建设和管理职能,推进新闻宣传和网络舆论一体化管理。 完善生成式人工智能发展和管理机制,加强网络空间法治建设,健全网络生态治理长效机制,健全未成年人网络保护工作体系。要加强网络安全体制建设,建立人工智能安全监管制度。 此外,决定还提到要深化人才发展体制机制改革,实施更加积极、更加开放、更加有效的人才政策,完善人才自主培养机制,加快建设国家高水平人才高地和吸引集聚人才平台。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块