亚马逊赞助下的FreeBSD平台优化与发布管理一年回顾
自从2010年首次在亚马逊EC2平台上启动FreeBSD以来,我一直在维护这个平台。2023年11月,我接任了FreeBSD发布工程负责人,并及时宣布了FreeBSD 14.0的发布,尽管实际的发布工作是由Glen Barber完成的。随着时间的推移,我发现发布工程的工作开始占据我大部分的志愿时间,导致其他FreeBSD/EC2开发任务停滞不前。因此,我在2024年初对是否能继续有效维护FreeBSD/EC2平台感到担忧。 幸运的是,在与亚马逊的多次商讨后,终于在2024年4月找到了有预算支持的人士。亚马逊通过GitHub Sponsors赞助我一年的时间,每月提供40小时的资金用于FreeBSD发布工程和FreeBSD/EC2开发。实际上,我平均每个月投入了50小时,其中20小时用于EC2特定问题,20小时用于发布工程,10小时用于其他相关工作。 在过去的一年里,遵循FreeBSD的季度发布计划,我成功管理了四次FreeBSD版本发布:2024年9月的13.4版、2024年12月的14.2版、2025年3月的13.5版以及即将于2025年6月10日发布的14.3版。每一次发布的准备工作集中在发布前的一个月(我称之为“Beta月”),耗时从33.5小时到79小时不等。 对于FreeBSD/EC2,亚马逊最关心的两个功能提升是为Graviton实例增加“电源驱动器”(使操作系统能够响应关机请求)和设备热插拔。电源驱动器的问题相对简单,通过ACPI配置GPIO控制器解决了。热插拔的问题则复杂得多,涉及多种不同的EC2实例类型。主要问题是PCI中断预留泄漏、PCI设备状态管理和PCI Express插槽后的元数据处理。针对这些问题,我分别添加了内核配置选项、ACPI修正和元数据优化脚本,确保了设备能够在多次插拔后稳定工作。 此外,我还解决了一些影响启动性能的问题,特别是2024年初发现的启动过程变慢的问题。通过系统化地测量启动时间并生成分析图表,我发现根磁盘大小从5GB增加到6GB是导致启动变慢的原因之一。将根磁盘大小调整到8GB后,启动时间恢复到了之前的水平。我还改进了FreeBSD在Graviton 2实例上的启动性能,解决了内核熵源不足的问题,并优化了ZFS文件系统的处理方法,显著缩短了启动时间。 在这一年中,我增加了两种新的FreeBSD AMI镜像:小型镜像(去掉调试符号、32位库等组件,减少了磁盘占用)和构建者镜像(用于用户定制化的FreeBSD AMI),使FreeBSD AMI的种类达到了四种。这不仅提高了用户体验,也减少了存储成本。例如,通过删除旧的EBS快照,共节约了336TB的存储空间。 针对发布工程中的通用问题,我也做出了一些贡献,如优化并行构建流程,减少了22小时到13小时的构建时间,以及加强构建的可重现性测试。后者通过定期比较生成的AMI和原始AMI,已经发现了多个问题,并及时进行了修复。 总的来说,亚马逊的资助极大提升了FreeBSD在EC2平台上的稳定性和性能,同时也加速了版本发布流程。然而,随着资助即将结束,未来的工作将变得更加有限。虽然我会继续担任FreeBSD发布工程负责人和EC2维护者,但很可能无法像过去一年那样频繁介入解决具体问题。FreeBSD的后续版本发布仍将按计划进行,但由于缺乏足够的资源,某些新功能可能无法按时上线。 业内专家表示,这样的资金支持对开源项目的发展至关重要,尤其是在云平台上的适配和优化方面。没有这样的支持,项目进展可能会大大放缓,甚至停滞。亚马逊作为全球领先的云计算公司,这次的资助展示了其推动开源生态系统发展的决心和承诺。