跳转到主要内容

超越 amd64 与 arm64

客机架构如何决定 Barn 使用的模拟器、机器类型、固件、设备与验收测试。

Barn 当前支持 amd64 与 arm64 Linux 客机。QEMU 可以模拟更多架构,但每个新增 Barn 目标都需要镜像和完整的启动、操作契约。本设计评估复核于 2026-11-08,区分已有运行时策略与未来候选架构。

硬件加速跟随宿主指令集

对于 Barn 当前的 64 位客机,原生虚拟化使用宿主指令集:macOS 使用 HVF,Linux 使用 KVM;跨架构客机由 QEMU TCG 翻译指令。Rosetta 可以在 Arm Linux VM 内翻译 Intel Linux 应用,但不能在 Apple Silicon 上提供 Intel Linux VM。详见 QEMU 模拟说明与 Apple Linux 二进制翻译指南。

宿主 amd64 客机 arm64 客机 当前原生运行发布证据
macOS arm64 TCG HVF,受镜像兼容性限制 Tier1
macOS amd64 HVF TCG Tier2
Linux amd64 KVM TCG Tier1
Linux arm64 TCG KVM Tier2

Barn 的 tier 表示发布证据等级。原生 Darwin arm64 与 Linux amd64 有主要的真机验收覆盖;Darwin amd64 和 Linux arm64 在补齐同等真机证据前仍为 Tier2。所有 TCG 配置也属于 Tier2。二进制交叉编译成功,不足以提升运行时的证据等级。

另有两条镜像限制:原版 EL8 arm64 因要求 64 KiB 地址转换粒度,在 Apple Silicon 上使用 TCG;EL7 仅限原生 Linux/amd64。原生加速发生预期外故障时,操作会失败,不会静默改用 TCG。实际策略以 platform.go和 selectRuntime为准。

保留完整的模拟启动配置

现有 arm64 TCG 配置使用 qemu-system-aarch64、virt 机器与 cortex-a72。Barn 的 arm64 镜像需要 UEFI,使用匹配的固件代码和每台 VM 独立可写的变量存储。即使宿主架构不同,也必须安装目标模拟器与固件;Linux setup 当前按宿主架构规划依赖。

arm64 宿主运行 amd64 客机时,Barn 显式使用 tcg,thread=single,以保留 x86 更强的内存顺序契约;其他模拟配置使用 tcg,thread=multi。因此,增加 vCPU 数量并不总意味着增加翻译线程。

QEMU 的 virt 文档将 cortex-a72 列为 64 位 CPU,并说明 max 模型可能随 QEMU 版本改变。此前 Barn 调查中,一组 max 配置停在固件阶段,而使用 cortex-a72 和显式 pflash code/vars 的配置成功启动。因为固件参数也变了,这项观察无法单独证明 CPU 模型是原因;应先保留已测试的配置,再通过控制变量的比较调查变更。

客机架构应在清单和目录元数据中显式记录。qcow2 元数据描述磁盘容器,无法识别客机指令集。选择异架构镜像时,镜像架构和运行时配置必须同时匹配。

每种新架构都有不同的引导条件

下列是 QEMU 接入候选,还不是 Barn 支持的参数值:

候选架构 QEMU 目标与机器 需要建立的启动契约
ppc64le qemu-system-ppc64、pseries 小端客机;SLOF 或已验证的 VOF/直接内核路径;pSeries 控制台和设备
s390x qemu-system-s390x、s390-ccw-virtio CCW/virtio 设备与显式 bootindex,替换 PC 式引导假设
riscv64 qemu-system-riscv64、virt OpenSBI/U-Boot 或已验证的 EFI 路径;设备树、CPU 扩展与串口
loongarch64 qemu-system-loongarch64、virt 经过验证的 CPU 模型,例如 la464,以及匹配的 EDK2 固件和客机镜像

机器与引导差异见 QEMU 的 pSeries、s390x 引导设备、RISC-V virt与 LoongArch virt文档。这四种候选在 Barn 当前 amd64/arm64 宿主上都需要 TCG;支持对应指令集的原生 Linux 宿主则是另一项工程。

发行版支持分为正式 CPU 端口、安装介质、根文件系统和通用云盘等层次。候选必须说明实际提供哪一种、固定来源与摘要,以及其引导程序和 cloud-init 配置是否匹配选定的 QEMU 机器。不能替换另一个文件名中的架构来拼出下载地址。候选进入目录前,应先完成镜像证据核查。

实现边界

只在架构解析器里增加一个名字,产品的其他部分仍不完整。每个目标都需要协调修改:

  • 平台与镜像 schema:规范架构名、别名、校验、目录条目和发布等级。现有目录读取器会拒绝未知字段和不支持的架构,发布方案还需明确旧客户端的兼容策略。
  • QEMU 启动参数:可执行文件、机器、CPU、固件/引导方式、控制台、磁盘和网卡传输方式,以及 QMP 身份。
  • 客机初始化:seed 交付、用户和密钥、网卡命名、数据盘识别与文件系统支持。
  • 宿主准备:依赖包、最低 QEMU 能力、预检诊断和可用固件。
  • 生命周期操作:冷启动、SSH 就绪、启停、resize 能力、持久盘、重建、取消与中断恢复。

现有实现入口包括 internal/platform、internal/qemu、internal/cloudinit、internal/setup和镜像流水线。

新增架构的验收

每个候选先选一份通用云镜像,记录来源、摘要、QEMU 版本、完整启动配置与固件。在全新临时数据目录中检查冷启动、预期的 uname -m、SSH 身份、出站流量、宿主访问、客机互通、数据挂载和重启,再测试 recreate/destroy 边界、持久盘保留和取消后的恢复。不支持的可选功能应给出明确诊断。

研究建议先评估 ppc64le 与 s390x,再评估 riscv64 和 loongarch64。这个顺序是依据镜像供给与启动接入工作量提出的工程假设,不是已承诺的路线图;更成熟的镜像或明确用户负载都可以改变顺序。

功能兼容和性能要分别测量。TCG 适合安装、打包和架构检查;数据库吞吐与编译基准需要在有代表性的原生硬件上测量,才能用于容量判断。

表格阅读