天天看點

更新與發展 | Alibaba Cloud Linux 2 特性與開發細節揭秘1. 開源與背景2. 功能與優勢3. 研發過程中的品質保證4. Alibaba Cloud Linux 2 後續計劃5. 結語附:本文所用連結

2019 年 4 月,Alibaba Cloud Linux 2 (Aliyun Linux 2) 正式開源。時至今日,已經走過三個月的裡程。在這段時間内,這個剛誕生不久的為阿裡雲 ECS 環境定制優化的 Linux 作業系統發行版的裝機量穩步上升。我們經常接到内部和外部的客戶咨詢 Alibaba Cloud Linux 2 相關的問題,是以本文将重點介紹 Alibaba Cloud Linux 2 的特性更新;此外,我們認為雲計算業務中,作業系統的角色相當于“水和空氣”的地位,平日裡的存在近乎透明,而一旦出問題卻令人難以忍受,是以除了了解特性清單,本文也将介紹 Alibaba Cloud Linux 2 開發過程中的決策過程與品質保證細節,希望更高的透明度可以增強使用者的信心。

更新與發展 | Alibaba Cloud Linux 2 特性與開發細節揭秘1. 開源與背景2. 功能與優勢3. 研發過程中的品質保證4. Alibaba Cloud Linux 2 後續計劃5. 結語附:本文所用連結

圖:Alibaba Cloud Linux 2 (官網産品名:Aliyun Linux 2) 在 阿裡雲 ECS 上過去一個月 vcpu 保有量增長示意圖 (僅展示趨勢,不代表絕對數值)

1. 開源與背景

2019 年 4 月正式對外開源的 Alibaba Cloud Linux 2 是下一代 Alibaba Cloud Linux (官網産品名 _Aliyun Linux_)作業系統發行版,以 CentOS 7、社群長期支援版 (LTS) 核心、其他社群版使用者态軟體及阿裡巴巴多個開源内部産品等多個來源為上遊,為雲上應用程式環境提供 Linux 社群的最新增強功能,在提供雲上最佳使用者體驗的同時,也針對阿裡雲基礎設施做了深度的優化和定制。

Alibaba Cloud Linux 2 開源的重要亮點是自帶的阿裡雲雲核心(Cloud Kernel),同時也是開放在 GitHub 上的 Alibaba Cloud Linux Kernel 項目[1],它是開發團隊全體成員傾力打造的一款核心産品,旨在将阿裡巴巴作業系統團隊多年技術積累分享給社群,也歡迎志同道合的開發者一同參與核心開發協作,共同創造更加有益的價值。

開源曆史

Alibaba Cloud Linux 2 的開發團隊是阿裡巴巴作業系統團隊,前身是淘寶核心組,團隊成員大多是活躍在核心社群的開發者,九年來積累了深厚的作業系統和核心開發底蘊。

Alibaba Cloud Linux 産品是阿裡技術商業化和開源思想完美結合的範例。在阿裡雲 ECS 産品中作為官方鏡像之一,Alibaba Cloud Linux 與 CentOS, Ubuntu 等社群發行版一同作為選項提供給客戶,并為 ECS 環境定制了多項特性和性能優化;不僅如此,Alibaba Cloud Linux 更天生帶着開源的基因。開放源碼是一種共享的黑客精神,從開放源碼運動誕生至今,無數優秀的開源産品給數以百萬計的軟硬體産品和雲産品提供了強大的基礎系統底座支撐。站在這些巨人的肩膀上,我們繼承開源的精神,創造了 Alibaba Cloud Linux 産品,現在,又推出了 Alibaba Cloud Linux 2 作業系統發行版,并以相同協定開源,将我們的工作成果回饋到社群。

  1. 2017 年,基于 CentOS 7.3 源碼重新制作的 Aliyun Linux 17.01 上線,定制提供了較新的 4.4 版本核心,并完成整個作業系統發行版開源;
  2. 2018 年 10 月, Alibaba Cloud Linux 2 項目需求評審啟動,11 月項目正式立項;
  3. 2019 年 3 月 1 日, Alibaba Cloud Linux 2 Beta 釋出,邀請天使客戶參與公測;
  4. 2019 年 4 月 2 日, Alibaba Cloud Linux 2 GA 正式釋出,在 ECS 公有雲産品官方鏡像清單上架;
  5. 同時, Alibaba Cloud Linux 2 發行版源碼在阿裡 OPSX 軟體倉庫上架開源,核心源碼在 GitHub 開源。

2. 功能與優勢

2.1 初始版本功能

Alibaba Cloud Linux 2 最主要的功能更新是核心更新,基于核心社群長期支援(LTS)的 4.19 版本定制,在 CPU、記憶體、檔案系統、IO、網絡、cgroup 等子系統上增加了大量适用于雲場景的新特性、性能改進和重大缺陷修複,支援:

  • CPU: 多項 CPU 安全修複,CPU 負載預測功能改進以增強排程均衡性;
  • 記憶體:TLB 相關優化,writeback 相關優化,OOM-Killer 可靠性優化,空閑頁面跟蹤(Idle Page Tracking)特性支援;
  • 檔案系統:Ext4, XFS, Btrfs, NFS, Overlayfs 等重要檔案系統的新特性支援及優化;
  • IO: 全新的異步 I/O 優化,異步 I/O 輪詢特性支援;
  • 網絡:BBR,零拷貝 TCP API 支援,XDP 及 AF_XDP 機制支援;
  • cgroup: cgroup v2 支援, 基于 cgroup v2 的 cgroup writeback 支援, 和 blkio latency 支援。

此外,和核心相關的功能和改進還有:

  • 核心啟動參數和系統配置參數調優,提升啟動速度和錯誤恢複相關的能力;
  • 提供作業系統崩潰後的核心轉儲(Kdump)能力,使用者可以根據需要線上打開或者關閉該功能而無需重新開機作業系統;
  • 提供核心熱更新檔更新(Live Patching)能力。

2.2 更新與發展

2.2.1 系統鏡像更新

過去三個月,Alibaba Cloud Linux 2 釋出了兩個鏡像更新。最新版本的系統的鏡像 ID 為 

aliyun_2_1903_64_20G_alibase_20190619.vhd

在最初釋出的版本中,我們隻允許使用者通過 ECS 控制台購買的方式建立新的虛拟機。從 20190517 版本開始,我們提供了可獨立下載下傳的系統鏡像檔案,使用者可以更友善地基于 Alibaba Cloud Linux 2 系統鏡像建立并使用自己的虛拟機。我們希望藉由此方式,讓使用者更積極地參與到 Alibaba Cloud Linux 2 的使用中。

目前的獨立系統鏡像檔案為 qcow2 格式,運作時支援基于 QEMU/KVM 的虛拟化環境,在虛拟機中使用 virtio 驅動。獨立鏡像下載下傳後初始化需要依賴 

cloud-init

 機制,詳情請參考

獨立鏡像說明文檔

[2]。

2.2.2 軟體包更新

除了鏡像疊代, Alibaba Cloud Linux 2 還持續保持系統 YUM 源的更新,使用者可以在作業系統内通過 

yum update

 指令維持軟體包的最新狀态。

核心方面的更新,我們持續基于社群 LTS 4.19 核心 rebase 代碼,加上自研功能和 Bug 修複。每三到四個星期,我們會快速疊代釋出一個新的核心包。在疊代周期内,除了完成必要的穩定性測試,我們也會積極修複核心BUG并回報到核心社群。在接下來的章節會詳述。

在作業系統發行版基礎系統(BaseOS)功能方面,除了正常同步上遊社群的修複與更新,我們選擇性地更新了多個使用者态軟體包,以比對最新的核心功能及其他日常使用需求,并且對這些包進行了必要的測試和獨立的維護。更新的軟體包包括但不限于:

crash

e2fsprogs

xfsprogs

iproute

 等。

此外,我們還與阿裡巴巴内部其他團隊合作,持續将阿裡巴巴的開源成果內建到 Alibaba Cloud Linux 2 中并輸出給使用者。目前內建并保持更新的阿裡巴巴内部軟體有:

  • Alibaba Dragonwell

    : Ali-JDK 的開源版本,6月下旬剛剛釋出 GA 版本,我們及時跟進內建并完成了軟體測試後,輸出到 Alibaba Cloud Linux 2;
  • PouchContainer

    : 阿裡巴巴開發的高效容器引擎;
  • Dragonfly client

    : 開源的基于P2P鏡像及檔案分發系統;
  • Tengine

    : 在 Nginx 的基礎上,針對大通路量網站的需求,添加了很多進階功能和特性的 Web 伺服器項目;
  • aliyun-cli

    : 開源的用于管理阿裡雲資源的工具;
  • ossfs

    : 用于将阿裡雲 OSS buckets 挂載到本地的工具;
  • eBCC

    : 社群版 BCC 的功能擴充。

使用者可以在作業系統内通過 

yum install

 指令直接安裝對應的軟體包。

2.2.3 Cloud Kernel 社群貢獻

Alibaba Cloud Linux 2 是一個建立在社群協作基礎上的開源作業系統發行版項目,同時也非常重視回饋社群。

Cloud Kernel

 是 Alibaba Cloud Linux 2 最重要的開源核心,也是在 GitHub 上的開源項目。如前所述,我們保持三周到四周的疊代周期,在每個疊代都保持對外推送最新開發更新檔。在疊代開發過程中,我們多次測得 4.19 版本 的 LTS 核心的 BUG,并及時向社群報告,或者通過定位将主線核心的修複移植回 LTS 核心,或者主動向社群送出更新檔。

對于測試中發現的 LTS 核心 BUG,我們首先會根據已劃分的核心領域進行初步判斷,如果難以直接定位,則會進行 bisect 尋找最有可能出現問題的代碼。經過初步的分析之後,根據問題的難易程度,我們會選擇直接向社群送出修複更新檔或者進行讨論。

有一種常見的情況是,某個核心 BUG 在主線核心中已經修複,但是由于種種原因,該修複沒有出現在 4.19 LTS 核心中,這種情況下,我們會選擇先将主線核心修複的代碼 cherry-pick 到 Cloud Kernel 的開發分支中,并且向 4.19 LTS 核心的維護者、以及對應核心子系統的維護者發送一封 backport 請求的郵件,提示維護者及時将該修複移植回來。

截止6月30日,團隊在開發 Cloud Kernel 過程中,向核心社群送出并被接收的核心更新檔有 19 個。此外,我們還積極向知名的社群測試套件 LTP, xfstests 等項目貢獻了多個修複更新檔以及新測試用例。

除此之外,Cloud Kernel 還與 Intel 0-day 項目等開源項目達成合作,0-day 項目團隊主動向 Cloud Kernel 推送了多個修複建議及更新檔,均已被接受合入開發分支。

2.2.4 核心重要功能更新

由于 Aliyun Linux 2 的核心需要運作在通用的 ECS 系統上,或者使用者自定義的基于 QEMU/KVM 的虛拟機中,保持核心功能的通用性一直是我們在增加 Cloud Kernel 功能時的原則。在開發自研核心功能時,我們會對功能進行充分的評估,如果該功能的實作方式過于 Hack,或者引入該功能會造成核心維護成本急劇上升,我們會從架構的完整性考慮而酌情放棄該功能的開發。下面是兩個近期自研的核心功能的例子:

(a) cgroup writeback v1

在4月份 GA 版本釋出中,我們提到了基于 cgroup-v2 的 cgroup writeback 功能是 LTS 4.19 核心的一項重要更新;釋出後,我們收到多個客戶回報,亟需此功能在 cgroup-v1 上的實作。在深入分析之後,我們意識到,cgroup writeback 功能天生适合 cgroup-v2 的平坦結構,卻也不是不可能在 cgroup-v1 上實作。關鍵點在于在使用 cgroup-v1 時,需要人為保證對應的 blkcg 和 memcg 兩個 cgroup 保持合理對應的映射關系。在梳理清楚 cgroup 映射關系限制條件後,我們完成了 cgroup writeback v1 在 Cloud Kernel 上的實作,并在 

GitHub 上釋出

[3] 對應的更新;同時為了保證使用者對于使用時的映射關系限制有足夠的了解,我們在核心中預設将此功能保持關閉,并制作了相關

文檔

[4]說明。

(b) TCP TIME-WAIT 狀态逾時接口

這個功能允許使用者動态調整 TCP 連接配接的 TIME-WAIT 狀态逾時時間,允許其被設定為小于預設的 60s 值,進而在大量短連接配接應用中,提高應用性能。這個功能實際上是早期版本的 Taobao Kernel 已經實作并對外提供的功能,在決定是否要将此功能在 Aliyun Linux 2 上重新移植一遍時,我們重新評估了該功能的風險。在翻閱了 RFC 793 标準中 “The TCP Quiet Time Concept” 相關的概念後,我們認為該功能不符合 TCP "Quiet Time" 的概念,在不知曉該風險的情況下使用可能會造成系統不穩定;但是由于該功能确實被客戶需要,且功能結構、代碼實作較為獨立,維護成本和風險可控。是以我們在内部實作時,顯性備注了接口使用風險後,将功能在 

[5]。

3. 研發過程中的品質保證

Alibaba Cloud Linux 2 使用了大量社群的功能,核心元件 Cloud Kernel 沒有使用 Red Hat 核心版本,而是使用了基于核心社群 4.19 LTS 版本。衆所周知,社群版的核心的穩定性一直為人所诟病,我們在采用此版本核心時,也有一樣的擔心。是以在研發過程中,我們對 Cloud Kernel 進行了積極的測試。

首先,得益于阿裡巴巴作業系統團隊中有多個核心子系統維護者、核心測試套件的維護者或前維護者,我們對于開源社群主流的測試套件對核心子系統的覆寫率及測試細節掌握較為全面。通過這些開源測試套件,我們發現了不少社群版核心的問題,并為社群貢獻了多個更新檔。

其次,在研發過程中,我們遵循“自己吃自己的狗糧”的原則,要求研發同學自行完成單元測試用例開發,并且內建到内部測試平台中進行回歸測試。在測試平台的選擇上,基于研發開發測試代碼的便利性原則,我們選擇了成熟的測試架構 

Beaker

[6],這是一個源自 Red Hat 的社群開源測試架構項目,可以很友善地內建測試代碼,并且輸出直覺的測試結果。我們将自己開發完成的測試代碼放到 Beaker 測試平台上,進行自動化的每晚建構回歸測試(Nightly Regression Testing)。在每個疊代中,我們也發現了不少核心回歸缺陷,都及時向社群送出了更新檔或者參與了修複讨論,為穩定 4.19 LTS 核心做出了自己的貢獻。

此外,在阿裡巴巴作業系統團隊内部有專業的品質保證團隊。品質保證團隊的測試平台內建了 40多個測試套件,覆寫了功能性測試、性能測試、冒煙及穩定性測試等各方面。在 Alibaba Cloud Linux 2 疊代周期進入傳遞測試階段,會由品質保證團隊負責相關測試,測試結果經過 Review 通過後,則可進行疊代釋出。

4. Alibaba Cloud Linux 2 後續計劃

  • 持續開發新特性,也積極将開源社群的最新成果帶給 Alibaba Cloud Linux 2 使用者,并回饋開源社群;
  • 進一步完善相關文檔,包括初學者文檔,吸引更多使用者參與作業系統與核心開發;
  • 分享作業系統及核心相關的技術文章,籌建線上與線下活動,增強作業系統與核心領域的交流。

5. 結語

作業系統最近幾個月成為了熱門的話題,此時推出這樣一篇介紹 Alibaba Cloud Linux 2 發行版的技術文章還顯得比較應景。作為一個技術人,在日常的工作中,堅持技術的錘煉,樂于思考與分享,對作業系統和核心領域不斷鑽研,才能立足于瞬息萬變的技術之潮中,并且遊刃有餘。

Alibaba Cloud Linux 2 由阿裡巴巴作業系統團隊負責開發,誠招有志之士參與,共同在雲上作業系統領域探索更多的可能。履歷可發至

[email protected]

附:本文所用連結

繼續閱讀