FreeBSD在亚马逊EC2平台的技术维护与发布工程实践

本文详细记录了作者Colin Percival在亚马逊EC2平台维护FreeBSD系统的技术实践,包括Graviton实例电源驱动开发、设备热插拔实现、启动性能优化等核心工作,同时阐述了作为FreeBSD发布工程负责人管理四个主要版本发布的完整历程。

亚马逊资助下的FreeBSD年度技术总结

自2010年首次在亚马逊EC2平台启动FreeBSD以来,我一直负责该平台的维护工作。2023年11月,我新增了FreeBSD发布工程负责人的角色——恰逢FreeBSD 14.0发布,虽然该版本的实际发布工作由Glen Barber完成。尽管获得Antithesis和FreeBSD/EC2 Patreon的少量资助,但很快发现发布工程职责正在挤占我用于FreeBSD/EC2开发的志愿时间:不仅长期的功能开发清单陷入停滞,对异常现象的调查也经常被迫推迟。到2024年初,我越来越担忧自己无法胜任FreeBSD/EC2平台"所有者"的角色。

经过多年断断续续的协商,2024年4月终于与亚马逊达成通过GitHub Sponsors提供一年资助的协议。亚马逊名义上资助我每月40小时用于FreeBSD发布工程和EC2开发(实际投入约50小时/月),其中20小时专用于EC2问题,20小时用于版本发布,10小时处理其他发布工程事务。

版本发布管理

按照我在2024年5月BSDCan开发者峰会上制定的季度发布计划,过去一年共管理四个版本发布:

  • FreeBSD 13.4(2024年9月)
  • FreeBSD 14.2(2024年12月)
  • FreeBSD 13.5(2025年3月)
  • FreeBSD 14.3(计划2025年6月10日)

每个版本的发布工作集中在"Beta月"(每季度第二个月),耗时从33.5小时(13.5版本)到79小时(14.2版本)不等。稳定分支后期的发布工作量显著降低,预计FreeBSD 15.0的发布将超过100小时。

EC2平台关键技术突破

Graviton电源驱动开发

在Graviton系统上,通过解析ACPI _AEI对象确定GPIO引脚配置,将其传递给PL061 GPIO控制器驱动。当该引脚被触发时,控制器生成中断引发ACPI"电源按钮"事件。值得注意的是,EC2提供的ACPI表中错误指定了"Pull Up"配置,而PL061控制器实际不具备上拉电阻。为此我们在FreeBSD/EC2 AMI中新增了ACPI_Q_AEI_NOPULL特性标志。

设备热插拔支持

热卸载功能的实现面临多个实例类型的特定问题:

  1. Graviton系统IRQ泄漏:通过引导加载程序设置禁用传统PCI中断路由代码
  2. PCI电源状态误判:新增ACPI_Q_CLEAR_PME_ON_DETACH特性在设备分离前清除电源管理寄存器
  3. NVMe驱动崩溃:由nvme驱动维护者修复
  4. PCI总线"幽灵设备":因Nitro固件异步操作导致,通过ACPI_Q_DELAY_BEFORE_EJECT_RESCAN特性增加10ms延迟

我们还优化了PCIe热插拔超时机制,在EC2环境下将默认5秒等待缩短为0,并开发了可连续300次插拔测试的验证脚本。

启动性能深度优化

通过分析2018年以来的启动数据(启动超过1万个EC2实例),发现并解决了多个关键问题:

  1. 根磁盘大小影响:将磁盘从6GB扩容到8GB解决性能下降问题
  2. Graviton 2熵种子问题
    • 修复EFI熵种子请求在EC2中的执行路径
    • 重构熵池初始化逻辑,使用PBKDF2将64字节扩展为2048字节
    • 使arm64/UFS镜像启动时间从25秒降至8秒
  3. ZFS性能问题:通过调整makefs事务组记录,将启动时间从22秒降至11秒
  4. IMDSv2 IPv6支持缺陷:修正连接优先级和超时设置

系统镜像生态扩展

新增两种AMI类型:

  • small镜像:移除调试符号等非必要组件,体积从5GB降至1GB
  • builder镜像:提供定制化FreeBSD AMI的构建环境

同时优化镜像管理,清理了336TB历史EBS快照。

发布工程体系改进

  1. 并行构建系统:通过修复Makefile目录创建依赖,将发布构建时间从22小时缩短至13小时
  2. 构建可重现性:利用EC2实例进行差异分析(diffoscope),发现并修复多个构建一致性问题

未来展望

随着资助期结束,FreeBSD 15.0及后续版本的发布将继续推进,但EC2平台的功能开发(如EBS卷自动扩容、网络接口热插拔支持等)可能放缓。这一年的资助使FreeBSD在云平台的支持达到新高度,相关技术成果将持续惠及整个开源社区。

(原文发布于2025-06-06,经技术内容提取和结构化处理)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计