知名黑客长文拆解RISC-V:开放架构胜利全靠便宜

知名黑客长文拆解RISC-V:开放架构胜利全靠便宜

RISC-V芯片架构嵌入式系统开源硬件

数据源:HN + Lobsters + dmitrygr

零授权费掩盖下的架构缺陷

「RISC-V 需要清醒地认识到,它被选择是因为便宜,而不是因为优秀。」曾经将 Palm OS 移植到现代硬件的知名黑客 Dmitry.Gr 在其长篇批判文章中掷下这句话。这篇名为《RISC-V: They Should Have Known Better》的檄文随即登上 Hacker News 与 Lobsters 首页,引发了开源硬件社区的剧烈震荡。

RISC-V 宣扬的「一切皆可选」与委员会式设计,导致其作为统一标准的效力大幅下降,芯片厂商各自为政形成了不兼容的生态碎片。它在廉价 MCU(微控制器单元)市场的扩张,依赖的是授权费为零的经济杠杆。开放指令集的商业胜利建立在极低的使用成本上,并不代表其微架构设计具备技术优越性。

嵌入式与高性能场景的双重短板

在实时响应要求极高的嵌入式领域,RISC-V 的中断处理机制展现出了明显的效率劣势。硬件在执行中断时无法自动保存上下文,进入中断需要 21 个周期,退出需要 20 个周期,加上 JAL/RET 跳转花费 4 个周期,处理函数尚未开始干活就已经消耗掉 44 个周期。与之对比,十年前设计的 ARM Cortex-M0 依托硬件自动压栈机制,中断进出仅需 27 个周期且可以直接运行普通 C 语言函数。纯粹依赖软件保存寄存器的设计拖累了响应速度,厂商不得不引入非标的 CLIC(核心局部中断控制器)或私有拓展来弥补劣势。

压缩指令集的选择同样暴露出设计调控的失误。RISC-V 的 C 扩展在存储字节时仅支持 0 至 3 的偏移量,而 Cortex-M0 支持 0 至 31 的偏移范围。基本的字节与半字压缩存取指令甚至没有包含在标准 C 扩展中,而是被划归为可选的 Zcb 拓展。可选拓展的层层堆叠增加了编译器适配难度,使微控制器难以兼顾代码密度与译码效率。

在高端服务器与通用计算场景中,基础寻址模式的缺失构成了另一个性能瓶颈。RISC-V 缺乏「基址+移位寄存器」寻址能力,遍历数组需要交替执行移位、加法与加载 3 条指令,而 x86 与 ARM 均能通过单条指令完成对应操作。直到 2021 年冻结的 Zba 扩展才引入 SHxADD 指令补齐这一短板。早期设计过度寄希望于硬件指令融合技术,然而主流硅片实现极少能成功融合两条以上的连续指令,导致指令流执行效率落后于成熟架构。

特性检测失灵与编码混乱

RISC-V 试图赋予芯片设计者最大的自由度,却破坏了基础软件生态的通用保障。架构中的乘法、除法、用户模式、监管模式乃至 CSR(控制与状态寄存器)均为可选组件。作为特性检测核心的 misa 寄存器本身同样被设计为可选,且即便硬件实现了该寄存器也可默认返回全零。软件无法在运行时可靠获知 CPU 支持哪些扩展,迫使操作系统陷入盲从硬件假设的风险中。

在系统基础组件定义上,RISC-V 同样留下了巨大的不确定空间。系统定时器并未被设计为标准 CSR,而是采用内存映射方式,其物理地址完全由厂商自定。中断向量模式中的直接模式与向量模式均处于可选状态,没有任何一种模式被立为强约束基准。标准规范在核心功能上的留白,将适配兼容性的重担彻底转嫁给了下游软件开发团队。

基础指令集的编码规则更是引发了汇编开发者与硬件工程团队的困惑。32 位指令中的立即数位序被打散交错排列,压缩指令格式扩展至 9 种以上,Zcb 拓展甚至追加了另外 8 种格式。内核代码中高频出现的位字段插入提取指令以及按位测试跳转指令 TBZ/TBNZ 在基础规范中完全缺失。数据统计显示树莓派内核镜像中包含 35,393 个按位测试跳转实例与 15,165 个位字段操作实例。常用位操作指令的缺失迫使编译器使用多条冗余指令替代,抵消了精简指令集带来的面积优势。

规范层叠加与标准重塑

为了修补底层规范过度分裂带来的生态灾难,RISC-V 基金会不得不推出第二层 Profile 标准(如 RVA23),试图强制规定通用计算必须实现的指令集组合。然而大量的在售芯片依然无法完全达标,市场上甚至出现了「接近 RVA23」这种尴尬的模糊称谓。Ubuntu、Red Hat 与 Android 等主流操作系统已陆续宣布仅支持符合 RVA23 规范的硬件,大批早期芯片面临被主流发行版抛弃的命运。

投射在 RISC-V 总部上空的 Gentoo Bat-Signal 标志 图:投射在 RISC-V 总部上空的 Gentoo Bat-Signal 标志。来源:dmitry.gr

这一生态窘境引发了社区的戏谑。Dmitry.Gr 制作了一幅将 Gentoo 标志当作蝙蝠信号灯投射在 RISC-V 总部上空的插图,调侃 Gentoo 成为了当前唯一能完美适配 RISC-V 生态的 Linux 发行版,因为该系统依赖源码本地编译来应对千奇百怪的芯片组合。Profile 标准的二次封装暴露了原始规范的管控失效,产业界为了获得兼容性不得不重新走回集中统一约束的老路。

面对发酵的批评声浪,芯片社区也给出了不同的考量依据。早期主导者 Krste Asanović 等人坚持认为简化译码器并依靠硬件指令融合是提升能耗比的合理路径,屏蔽 misa 寄存器也是出于虚拟化监控与异常捕获的架构设计考量。部分芯片工程师强调 RV32IC 架构在极致低成本的单片机场景下拥有无可替代的面积优势。技术路线的争论反映出不同应用场景对指令集设计的诉求差异,纯粹的设计优雅并不等同于商业市场的实用选择。

商业逻辑与开放架构的边界

从产业格局的演变来看,Dmitry.Gr 明确指出 RISC-V 依然会取得巨大的商业成功。它正在快速取代 8051 等老旧架构,成为廉价 MCU 和机器学习加速器控制核心的首选方案。零专利费的成本优势足以抹平设计上的瑕疵,在对性能不敏感的低端领域提供了足够的性价比。

但在桌面与高性能服务器市场,开放规范本身并不能自动兑现出高性能的乱序执行核心。芯片架构的真正壁垒在于复杂的微架构实现与成熟的编译生态,而不是指令集手册本身的授权形式。RISC-V 的扩张历程证明了低成本是击穿市场的利刃,但试图凭借开放旗号改写高性能计算格局依然面临着严峻的工程考验。

参考链接:

  • Dmitry.Gr 个人博客:RISC-V: They Should Have Known Better
  • Hacker News 社区关于 RISC-V 架构缺陷的讨论
  • Lobsters 社区关于 RISC-V 指令集争议的讨论