作者:郑振宇
转载来源:https://mp.weixin.qq.com/s/e5ZEvp\_xIRPiyk6sEzXghg
如果要评选刚刚过去的2020年中IT行业最吸引眼球的10个关键字,我相信Arm一定会是其中一个。从年初的AWS基于自研Arm架构芯片Graviton2的全新EC2实例类型上线,Apple传出想要使用自研Arm芯片取代Intel芯片传闻,到年中Nvidia报价400亿美元收购Arm的爆炸性消息,再到年末Apple基于Apple Silicon M1的产品上市,Microsoft等各巨头纷纷传出会自产Arm架构芯片的消息。Arm无疑已经打破了作为手机、嵌入式设备等小型设备架构的传统观念,Arm架构作为更通用算力平台的趋势可见一斑。
在2020年这些爆炸性新闻的背后,其实是来自众多公司工程师长时间的奉献,致力于推动Arm架构运用于通用计算的企业也远不止上述几家。当全网主播都在热捧苹果M1芯片在H.265编码上的性能有多炸裂的时候,大家并没有意识到这背后可能也有国内开发者的一部分功劳,在使用最为广泛的开源H.265编解码软件x265(http://x265.org/)中,在去年6月就包含了国内大厂贡献的针对Arm平台的性能优化,优化达到5倍之多,x265社区对于该厂推动Arm开源生态发展的实际举措表示了认可(http://x265.org/faster-arm64-...,对其所捐献的Arm CI资源对于Arm开源生态的所产生的积极作用非常赞许。
闲话少叙,本文就带大家看一下为什么Arm CI在推动Arm软件生态繁荣中如此重要。
CI与开源开发
CI(Continuous Integration,持续集成)是现代软件开发流程的重要手段,一般指在软件开发阶段通过引入自动化来手段来对软件的代码修改进行自动化构建、测试并合并到软件代码仓库中,从而保证在由众多开发者参与的开发过程中软件的代码质量。
我们结合具体场景来看一下在开源项目中,CI是如何应用的:
在参与开源项目贡献时,开发者首先需要在本地(当然现在有许多云端工具)进行代码开发、调试、验证等工作。除了不能影响现有测试用例外,在主流的开源社区中,一般都对新加代码时同步添加测试代码做出了相应的要求,以便能够在CI中进行持续的自动化测试,保证代码质量。
当开发者在本地完成测试后,就可以把代码推送到开源社区的代码仓库,例如Github。这时,社区的CI就会对开发者所提的Patch进行相应的自动化测试。这些自动化测试不仅可以对项目的代码质量提供保证,同时也很大程度上减少了社区Maintainer的工作强度,对于CI检查没有通过的Patch,社区Maintainer通常都不会进行Review的。因此,也要保持良好的贡献习惯,在进行完完善的本地测试后,再将代码提交到社区上游。
多数社区除了代码提交触发式的CI测试之外,还有固定周期触发的周期CI任务。在需要对项目进行发布时,开源社区也会对该分支进行相应的测试,发布相应的软件包。
相信通过上文中我们提到CI、测试的次数,就能了解到CI在现代软件开发流程以及保证软件质量的重要作用了。由于x86架构当前的市场领先和对于各主流开源社区的长期贡献,目前大多数开源社区的CI都是跑在x86架构的服务器上的。也就是说,我们上面提到的各个环节的测试,都是在x86架构上进行的,最终发布的软件包也是基于x86架构的。
虽然现在有很多语言都是跨平台语言,也有众多手段可以进行跨平台发布,但是相对于x86的全流程验证来说,在其他平台上的可用性和稳定性,仍然是存在差距的。就拿笔者之前接触较多的Apache Hadoop来说,虽然Hadoop是使用Java这种具备跨平台能力的语言进行编写的,但有很多依赖却是有区分平台的,因此在Arm架构上使用,还是需要额外的工作的。
因此,想要为Arm平台的用户提供端到端的软件质量保证,需要在整个开源社区开发流水线中引入Arm CI。这也是来自包括华为、Linaro、Arm等关注Arm开源软件生态的开发者近2年来持续推动的方向。
Arm CI Landscape
开源社区(项目)有很多,各开源社区(项目)所使用的CI工具也各不相同,有的社区使用自建的CI基础设施,比如Jenkins, Zuul等,有的则使用第三方平台,比如Travis CI, Azure Pipeline等。对于第一种,目前主要的手段是向该社区(项目)的基础设施团队提供Arm资源,并协助建立Arm CI。对于第二种,由于2020年Arm的火爆,各主流第三方CI平台都逐渐开始提供Arm的测试资源,只要协助该项目进行相应的任务配置就好。也有一些项目希望推动Arm适配的团队对Arm CI进行维护,因此采用了其他的开源平台,比如笔者团队在推动Apache Flink, TensorFlow, PyTorch等项目的Arm CI时,就采用了基于Zuul的开源测试平台 OpenLab(https://openlabtesting.org/)。
随着来自众多团队的共同努力,目前拥有Arm CI的主流开源项目(社区)已经超过了60个,涵盖了大数据、数据库、云计算、云原生、存储、Web、AI、基础库和工具等各个领域。为了方便查看,笔者近日制作了Arm CI Landscape,其中收录了目前笔者所了解到的拥有Arm CI验证流程的60+开源项目(社区)。
欢迎点击阅读原文或复制下文连接访问页面,点击项目图标即可查看各项目的Arm CI详情,该Landscape会持续更新,没有涵盖到的项目也欢迎在仓库中提Issue反馈进行补充。
页面链接:
https://kunpengcompute.github.io/arm-landscape (Github)
https://kunpengcompute.gitee.io/arm-landscape (Gitee, 国内访问加载速度更快)
更多边缘云原生相关技术知识请关注Arm软件开发者专栏。