2019年4月,AlibabaCloudLinux2(AliyunLinux2)正式开源。今天,三个月过去了。在此期间,这个为阿里云ECS环境定制优化的新生Linux操作系统发行版装机量稳步增长。我们经常收到内外部客户关于AlibabaCloudLinux2的咨询,所以本文将重点介绍AlibabaCloudLinux2的功能更新;另外,我们认为在云计算业务中,操作系统的作用相当于“水和空气”。”状态,平日里的存在几乎是透明的,但一旦出了问题,就让人难以忍受。因此,本文除了了解特性列表外,还将介绍阿里巴巴开发过程中的决策过程和质量保证细节CloudLinux2.希望更高的透明度建立用户信心图:AlibabaCloudLinux2(官网产品名称:AliyunLinux2)近一个月阿里云ECS上vcpu存量增长示意图(仅展示趋势),不是绝对值)一、开源及背景2019年4月正式开源AlibabaCloudLinux2是下一代AlibabaCloudLinux(官网产品名称_AliyunLinux_)操作系统发行版,基于CentOS7,社区长-term支持版本(LTS)内核、其他社区版用户态软件和阿里巴巴内部多个开源产品等多个源头上游,为云上的应用环境提供Linux社区的最新增强。在提供云端最佳用户体验的同时,也针对阿里云基础设施进行了深度优化和定制。AlibabaCloudLinux2开源的一个重要亮点是内置了AlibabaCloudKernel(云内核),这也是在GitHub上开源的AlibabaCloudLinuxKernel项目[1]。它是由开发团队的所有成员创建的内核产品,旨在与社区分享阿里巴巴操作系统团队多年来积累的技术,也欢迎志同道合的开发者参与内核开发与协作,共同创造更多有益价值。AlibabaCloudLinux2的开发团队为阿里巴巴操作系统团队,前身为淘宝内核团队。大多数团队成员都是活跃在内核社区的开发人员。在过去九年中,他们在操作系统和内核开发方面积累了深厚的背景。阿里云Linux产品是阿里巴巴技术商业化与开源思维完美结合的典范。AlibabaCloudLinux作为阿里云ECS产品的官方镜像之一,与CentOS、Ubuntu等社区发行版一起作为选项提供给客户,并针对ECS环境定制了多项特性和性能优化;不仅如此,阿里云Linux更是天生带有开源基因。开源是一种共享的黑客精神。自开源运动诞生以来,无数优秀的开源产品为数以百万计的软件、硬件和云产品提供了强大的基础系统基础支持。站在这些巨人的肩膀上,我们继承了开源精神,创造了阿里云Linux产品。现在,我们推出了AlibabaCloudLinux2操作系统发行版,该发行版在同一协议下开源,为社区贡献我们的成果。2017年推出基于CentOS7.3源码重制的AliyunLinux17.01,定制更新的4.4版本内核,整个操作系统发行版开源;2018年10月启动AlibabaCloudLinux2项目需求评审,11月正式立项;2019年3月1日,AlibabaCloudLinux2Beta发布,邀请天使客户参与公测;2019年4月2日,AlibabaCloudLinux2GA正式发布,并上线ECS公有云产品官方镜像列表;,AlibabaCloudLinux2发行版源码开源在阿里巴巴OPSX软件仓库,内核源码开源在GitHub。2.功能与优势2.1初始版本功能AlibabaCloudLinux2最重要的功能更新是内核更新,它是基于内核社区长期支持(LTS)的4.19版本定制的。系统新增了大量适用于云场景的新特性、性能提升和重大bug修复。支持:CPU:多个CPU安全修复,CPU负载预测功能改进,增强调度平衡;memory:TLB相关优化,writeback相关优化,OOM-Killer可靠性优化,IdlePageTracking特性支持;文件系统:Ext4、XFS、Btrfs、NFS、Overlayfs等重要文件系统新特性支持和优化;IO:新的异步I/O优化,异步I/O轮询特性支持;网络:BBR、零拷贝TCPAPI支持、XDP和AF_XDP机制支持;cgroup:cgroupv2支持,基于cgroupv2的cgroup写回支持,以及blkio延迟支持。此外,与内核相关的功能和改进包括:内核启动参数和系统配置参数的调优,提高启动速度和错误恢复相关能力;提供操作系统崩溃后的内核转储(Kdump)功能,用户无需重启操作系统即可在线启用或禁用该功能;提供内核热补丁升级(LivePatching)能力。2.2更新与发展2.2.1系统镜像更新近三个月,AlibabaCloudLinux2发布了两次镜像更新。最新版系统镜像ID为aliyun_2_1903_64_20G_alibase_20190619.vhd。在最初的版本中,我们只允许用户通过ECS控制台购买来创建新的虚拟机。从20190517版本开始,我们提供了可独立下载的系统镜像文件,方便用户基于AlibabaCloudLinux2系统镜像更方便地创建和使用自己的虚拟机。我们希望通过这种方式,用户能够更积极地参与到AlibabaCloudLinux2.0的使用中。目前独立的系统镜像文件为qcow2格式,运行时支持基于QEMU/KVM的虚拟化环境,在运行时使用virtio驱动虚拟机。独立镜像下载后的初始化需要依赖cloud-init机制。详情请参考独立图像文档[2]。2.2.2软件包更新除了镜像迭代,AlibabaCloudLinux2还不断更新系统YUM源。用户可以在操作系统中使用yumupdate命令来维护软件包的最新状态。对于内核更新,我们继续基于社区LTS4.19内核对代码进行rebase,以及自研功能和错误修复。每三到四个星期,我们就会快速迭代发布一个新的内核包。在迭代周期中,除了完成必要的稳定性测试外,我们还会积极修复内核bug,反馈给内核社区。下一章会详细介绍。在操作系统发布基础系统(BaseOS)功能方面,除了定期同步上游社区修复和更新外,我们有选择地更新了多个用户态软件包,以匹配最新的内核功能和其他日常使用需求,并且这些软件包有必要的测试和独立维护。更新包包括但不限于:crash、e2fsprogs、xfsprogs、iproute等。此外,我们还与阿里巴巴内部其他团队合作,不断将阿里巴巴的开源成果集成到AlibabaCloudLinux2中输出给用户。阿里巴巴内部目前集成并保持更新的软件有:AlibabaDragonwell:Ali-JDK的开源版本,6月下旬刚刚发布了GA版本。我们及时跟进集成并完成软件测试,然后导出到AlibabaCloudLinux2;PouchContainer:阿里巴巴自研的高效容器引擎;Dragonfly客户端:一个开源的基于P2P的镜像和文件分发系统;Tengine:一个web服务器项目,在Nginx的基础上增加了很多高级的功能和特性,以满足访问量大的网站的需求;aliyun-cli:阿里云资源管理开源工具;ossfs:本地挂载阿里云OSSbuckets的工具;eBCC:社区版BCC的功能扩展。用户可以在操作系统中直接通过yuminstall命令安装相应的软件包。2.2.3云内核社区贡献AlibabaCloudLinux2是一个基于社区协作的开源操作系统发行项目,也非常重视回馈社区。CloudKernel是AlibabaCloudLinux2最重要的开源内核,也是GitHub上的一个开源项目。前面提到,我们保持三到四个星期的迭代周期,并在每次迭代中不断向外推送最新的开发补丁。在迭代开发过程中,我们多次测量4.19版本LTS内核的BUG并及时反馈给社区,或通过定位将主线内核的修复移植回LTS内核,或主动提交补丁到社区。对于测试中发现的LTS内核bug,我们会先根据划分的内核域进行初步判断。如果很难直接定位,我们会进行二分法,找出最有可能出现问题的代码。经过初步分析,我们会根据问题的难易程度,选择直接向社区提交修复补丁或者进行讨论。一种常见的情况是,某个内核错误已经在主线内核中得到修复,但由于种种原因,该修复并没有出现在4.19LTS内核中。在这种情况下,我们会选择代码cherry-Pick到CloudKernel的开发分支,向4.19LTS内核的维护者和对应内核子系统的维护者发送backportrequestemail,提示维护者移植fix时光倒流。截至6月30日,团队在CloudKernel开发过程中已向内核社区提交并收到19个内核补丁。此外,我们还积极为知名社区测试套件LTP、xfstests等项目贡献了多个修复和新的测试用例。此外,CloudKernel还与Intel0-day项目等开源项目达成合作。0-day项目组积极向CloudKernel推送了多个修复建议和补丁,均已被采纳到开发分支。2.2.4内核重要功能更新由于AliyunLinux2内核需要运行在普通的ECS系统,或者基于QEMU/KVM的用户自定义虚拟机上,我们一直在增加CloudKernel功能,以保持内核的通用性。时间核函数原理。在开发自研核函数时,我们会对函数进行全面评估。如果功能的实现过于hacky,或者功能的引入会导致内核维护成本剧增,我们会考虑架构的完整性,酌情放弃。功能开发。以下是近期自研内核功能的两个示例:(a)cgroupwritebackv1在4月份的GA版本中发布,我们提到基于cgroup-v2的cgroupwriteback功能是LTS4.19内核的重要更新;发布后,我们收到了多个客户的反馈,急需在cgroup-v1上实现该功能。经过一些深入的分析,我们意识到cgroupwriteback特性很自然地适合cgroup-v2的扁平化结构,但在cgroup-v1上实现也不是没有可能。关键在于,在使用cgroup-v1时,需要人为保证对应的blkcg和memcg两个cgroup保持合理的对应映射关系。在梳理完cgroup映射关系的约束后,我们完成了cgroupwritebackv1在CloudKernel上的实现,并在GitHub上发布了相应的更新[3];同时,为了保证用户在使用时对映射关系约束有足够的了解,我们在内核中默认关闭该功能,并制作了相关文档[4]进行说明。(b)TCPTIME-WAIT状态超时接口该功能允许用户动态调整TCP连接的TIME-WAIT状态超时时间,允许将其设置为小于默认60s的值,从而大量提高应用性能短连接应用程序。这个功能实际上是由早期版本的淘宝内核实现和提供的。在决定是否在AliyunLinux2上重新移植该功能时,我们重新评估了该功能的风险。在查阅RFC793标准中“TheTCPQuietTimeConcept”相关概念后,我们认为该功能不符合TCP“QuietTime”的概念,在不了解风险的情况下使用可能会导致系统不稳定;但是因为这个功能是客户真正需要的,而且功能结构和代码实现相对独立,所以维护成本和风险是可控的。因此,我们在内部实现时,在明确指出使用接口的风险后,将功能发布到了GitHub上[5]。3、研发过程中的质量保证。AlibabaCloudLinux2使用了大量的社区功能。核心组件CloudKernel没有使用RedHat内核版本,而是使用基于内核社区的4.19LTS版本。众所周知,社区版内核的稳定性一直饱受诟病,我们在采用这个版本的内核时也有同样的顾虑。因此,在开发过程中,我们积极测试了CloudKernel。首先,感谢阿里操作系统团队内核测试套件的多位内核子系统维护者、维护者或前维护者,让我们很好地掌握了目前主流测试套件对内核子系统的覆盖率和测试细节。开源社区。更全面。通过这些开源测试套件,我们在内核的社区版本中发现了许多问题,并为社区贡献了多个补丁。其次,在研发过程中,我们遵循“自己吃狗粮”的原则,要求研发同学自己完成单元测试用例的开发,并集成到内测平台进行回归测试。在测试平台的选择上,本着方便测试代码研发和开发的原则,我们选择了成熟的测试框架Beaker[6],它是来自RedHat的一个社区开源测试框架项目,可以方便的集成测试代码,并输出直观的测试结果。我们将自己开发的测试代码放在Beaker测试平台上,进行自动化的夜间构建回归测试(NightlyRegressionTesting)。在每次迭代中,我们也发现了许多内核回归缺陷,及时向社区提交补丁或参与修复讨论,为稳定4.19LTS内核做出了自己的贡献。此外,阿里OS团队内部还有专业的质量保证团队。质保团队的测试平台集成了40多个测试套件,涵盖功能测试、性能测试、冒烟和稳定性测试等各个方面。当AlibabaCloudLinux2迭代周期进入交付测试阶段时,质量保证团队将负责相关测试。测试结果通过审核后,即可进行迭代发布。4、AlibabaCloudLinux2后续计划将继续开发新功能,积极将开源社区的最新成果带给AlibabaCloudLinux2用户,回馈开源社区;进一步完善相关文档,包括初学者文档,以吸引更多用户参与操作系统和内核开发;分享操作系统和内核相关的技术文章,筹备线上线下活动,加强操作系统和内核领域的交流。5.结语操作系统成为近几个月的热门话题,此时推出这样一篇介绍AlibabaCloudLinux2发行版的技术文章似乎很合适。作为技术人,在日常工作中,坚持锤炼技术,乐于思考,乐于分享,不断钻研操作系统和内核领域,才能站在瞬息万变的技术浪潮中,立于不败之地一份轻松的工作。AlibabaCloudLinux2由阿里巴巴操作系统团队开发。我们诚邀有志之士参与进来,共同探索云操作系统领域的更多可能。简历可发至caspar@linux.alibaba.com附件:本文所用链接[1]CloudKernelGitHubPage:https://github.com/alibaba/cloud-kernel[2]独立镜像文档:https:///github.com/alibaba/cloud-kernel/wiki/Aliyun-Linux-2-On-Premise-Image[3]cgroupwritebackv1release:https://github.com/alibaba/cloud-kernel/releases/tag/alk-release-12[4]cgroupwritebackv1功能说明文档:https://github.com/alibaba/cloud-kernel/wiki/cgroup-writeback-v1-interface[5]tcp_tw_timeout接口发布:https://github.com/alibaba/cloud-kernel/releases/tag/alk-release-13[6]Beaker测试平台:https://beaker-project.org/本文作者:一律舟原文链接未经许可不得转载。
