RISC‑V 很慢
Source: Hacker News
故障排查
我浏览了 Fedora RISC‑V 追踪器 的条目,完成了大部分的分类(目前仍有 17 条 处于 NEW 状态),并尝试处理所有能够处理的事项。
Fedora 打包
我的常规工作流程是获取 Fedora 包的源码(fedpkg clone -a),然后使用以下命令进行构建:
fedpkg mockbuild -r fedora-43-riscv64
构建完成后,我会检查是否成功;如果失败,则查看构建日志以找出原因。
截至目前,我已经为 Fedora 包提交了 86 个 pull request(链接)。这些请求涵盖了从体积庞大的 llvm15 到像 iyfct(一个小型游戏)这样的轻量包。大多数已经合并并在 Fedora 43 上构建,我们会继续在 Fedora Koji 上跟踪 f43-updates 标签进行构建。
速度慢
包的构建突显了一个主要挑战:速度,或者说缺乏速度。当前的 RISC‑V 硬件较慢,导致构建时间极长。例如,binutils-2.45.1-4.fc43 包在不同架构上的构建时间如下:
| Architecture | Cores | Memory | Build time |
|---|---|---|---|
| aarch64 | 12 | 46 GB | 36 min |
| i686 | 8 | 29 GB | 25 min |
| ppc64le | 10 | 37 GB | 46 min |
| riscv64 | 8 | 16 GB | 143 min |
| s390x | 3 | 45 GB | 37 min |
| x86_64 | 8 | 29 GB | 29 min |
当前的 RISC‑V Fedora 移植在构建时关闭了 LTO,以降低内存占用和构建时间。RISC‑V 构建机通常只有 4 或 8 核,内存为 8、16 或 32 GB(取决于主板),常常相当于低端的 Arm Cortex‑A55 核心。
未来的硬件,例如 Milk‑V Titan 主板上的 UltraRISC UR‑DP1000 SoC(最高 64 GB RAM)或基于 SpacemiT K3 的系统(最高 32 GB RAM),将会改善这种情况,但仍不是根本解决方案。要把 binutils 的构建时间降到一小时以内,我们需要更强大的机架式服务器,并在全系统范围内启用 LTO。
我仍在使用 QEMU
由于原生构建时间过长,我依赖 QEMU 来加速构建。使用 80 个模拟核心,我可以在约 4 小时内编译 llvm15 包,而在 Banana Pi BPI‑F3 构建机上需要 10.5 小时(在 P550 上可能更快)。

LLVM 包能够真正利用所有可用的核心和内存,我很好奇如果在拥有 192 或 384 核的系统上(例如基于 Ampere One 的服务器)会有怎样的表现。
未来计划
我们计划开始构建 Fedora 44。如果一切顺利,我们将使用单一的内核镜像在所有构建机上进行构建(目前它们运行的是不同版本的内核)。LTO 暂时仍保持关闭。
为了解决速度问题,我们计划采购更新、更快的构建机,并将更重的包分配给它们。