每周一龙:第 24 期
每周一都为大家报道 LoongArch 社区最前线的第一手新鲜资讯! 上周的进展主要有 Linux、工具链,以及 GSGPU 驱动向主线内核版本的移植成果。 详情点进来看!
如无特别说明,文中提及的日期、时间都为北京时间(UTC+8)。
先「马」再看
本栏目的内容具有一定延续性,将持续追踪报道 LoongArch 领域的重要或长期项目(坑)。
Linux
截至发稿时,Linux v6.7-rc1 已经发布。 龙架构的 PR 是在最后一天发出的。
原因据说是先前龙芯喜欢最后时刻更新分支,导致新代码在 linux-next 躺得不够久; 于是在本周期的 PR 发出之前,那些代码就老老实实躺了 4 天。
对那些瞄准主线的代码,确实应该在 linux-next 多呆几天: 这样这些代码才有机会触及更多的测试人员和自动化设施, 有助于发现跨子系统或架构产生不良影响的那些写法。
从前,在主线之外维护龙芯内核的年代,由于外界不感知龙芯变更,龙芯公司也不测其他架构, 因而龙芯公司之外的社区集成者(例如笔者)多次遭遇了龙芯相关变更炸掉其他架构的情况。 这种情况在龙芯也渐渐转向社区协作模式之后,便渐渐消失了——龙芯影响了别人龙芯会修;相应地,别人影响了龙芯别人也会修, 而每一方都只需跑自己环境的测试即可。
本开发周期中,较为引人注目的大块变更有:
- 合并了 bcachefs 的支持;
- 移除了 IA-64 架构的支持;
- 开源的 NVIDIA 显卡驱动
nouveau
获得了 GSP 支持。
啥叫 GSP?
GSP 是 GPU system processor 的缩写:GPU 系统处理器。
自从 2018 年面世的 Turing 微架构以来,新型号的 NVIDIA 显卡都新增了一块 RISC-V 微控制器,接管了从前由操作系统驱动 控制的许多硬件资源控制职责。 这使得 NVIDIA 得以开源其内核驱动:这个驱动只剩一个 C/S 架构的客户端空壳子了。
龙架构相关的主要变更有:
- 新增了 KVM 支持(Tianrui Zhao、Bibo Mao、Huacai Chen);
- 支持了动态抢占(
PREEMPT_DYNAMIC
)(Huacai Chen); - 在保证正确的前提下,适当放松了原子操作的约束, 使得 3A6000 的 8 线程 Unixbench 测试最终得分提升了 0.47%(WANG Rui);
- 跟进了 BPF 虚拟机指令集的 v4 新增, 为龙架构增加了相应支持(Hengqi Chen)。
Phoronix 也报道了此新版本, 感兴趣的读者可拓展阅读。
工具链
gcc
11 月 11 日,Xi Ruoyao 发现一些浮点数值计算的测试用例突然开始失败了, 排查下来是架构无关的优化错误,于是第二天发出了修复补丁。 过程中,顺带还发现了原「优化」在龙架构上其实是负优化;正在与上游一同想办法解决。
在折腾这个问题过程中,Xi Ruoyao 又被另一个新鲜问题坑到: 是阿里的编译器工程师同行改架构无关流水线优化代码改坏了。 好在第二天 GCC 维护者发现了问题,将问题补丁 revert 掉了, 保护了很多相关人士的睡眠时间(和发量)。
11 月 10 日,笔者在日常测试 Firefox 119 过程中,编译器崩溃了。 搞了一晚上,将触发问题的近 3MiB 源码精炼成了上游 bug PR112476。 两天后 Xi Ruoyao 将其修复了, 已进入主线。
11 月 7 日,chenxiaolong 给 GCC 补充了 LSX/LASX 的使用说明文档:
11 月 6 日(刚好错过上期),Xi Ruoyao 搞了三个补丁:
- 完善了 GCC 构建时对 linker relaxation 支持的判断: 简单来说,如果发现搭配的汇编器不支持 relax 条件分支指令, 那么就使即将被构建的 GCC 默认禁用 relaxation。 这有助于规避编译大型软件时有概率遇到的烦人的「重定位溢出」错误。 这修复了上游 bug PR112330。
- 优化了
-mexplicit-relocs=auto
配置下,仅单次使用的地址与fld
fst
搭配时的生成代码。 - 移植了 LLVM 的两组龙架构 LL/SC 代码片段优化:第 20 期报道过的 heiher 做的优化,以及 SixWeining 随后做的进一步完善。
Xi Ruoyao 准备赶在 GCC 14 stage 1 截止(笔者注:11 月 19 号)前加入一批 LA664 支持, 但是据卖家说 tā 的板子还在老化间里。 让我们期待他能早日拿到板子(当然社区同学包括笔者在内应该也会出手相助)!
本期的很大一部分 GCC 新闻都是 Xi Ruoyao 提供的,感谢 tā 从现场发回的报道。
LLVM
在周报第 8 期笔者打算做掉
model
属性支持,在上游讨论确定了技术方案。
但此后现实生活因素与各种工作优先级变化叠加,使得笔者不得不弃掉此坑。
一周前 heiher 出手相助,
将此工作冲过了终点线。
截至发稿时,相应的 LLVM PRs 已经新鲜建立:
非常感谢!
11 月 10 日,SixWeining 报告有用户碰巧遇上了 LLD 计算 page 偏移量的一处溢出
(只有当需求的偏移量恰好是 -4096
才会触发),
顺手修复了