veLinux 簡介
veLinux 是火山引擎推出的開源 Linux 操作系統,由字節跳動系統技術與工程團隊主導研發,廣泛集成了字節跳動多年來在支撐海量業務和億級并發上的系統技術經驗。致力于為用戶提供穩定、高性能、安全、易用的 Linux 操作系統選擇,提供全生命周期管理的完整解決方案和企業級服務支持。
自火山引擎開服以來,veLinux 支撐了包括容器服務、機器學習平臺、大數據服務等大量公有云上業務,是火山引擎官方操作系統,為火山引擎各個云產品提供穩定的系統支撐,同時也服務了大量外部公有云客戶,在不同的應用場景、不同的硬件機型上都表現出了優異的性能。
整體設計
veLinux 在整體設計上,兼容 x86 和 ARM 生態,同時兼容國內用戶的使用習慣,并對多種硬件設備進行了適配和優化,同時針對火山引擎基礎設施進行了深度優化:
向上提供更穩定、更安全、更易用的應用接口,并針對云原生、大數據、機器學習等場景提供針對性優化。
向下建立更準確、更完整、更高效的硬件抽象,并基于各種硬件類型融合整體解決方案對外輸出。
豐富版本
自 2021年10月首次上線后,截止到當前時間,veLinux 已經迭代了多個版本,提供了豐富的產品矩陣,包括以下 4 個公共版本,用戶可以根據自己實際的業務需求選擇不同的版本免費使用:
通用版本
面向希望獲得火山引擎上極致操作系統體驗的用戶,針對火山引擎公有云環境進行了深度定制與優化,適用于各種云場景工作負載,尤其針對高并發、高 I/O 和混部場景進行優化適配。
快速啟動版
面向需要快速交付大量云服務器的用戶,可以滿足快速使用算力的需求。通過對操作系統內核態及用戶態的啟動優化,結合 cloud-init 服務啟動的順序優化,實現了單 VM 啟動時間從 10+s 減少到 5s,達到業界領先水平。
等保認證版
面向云上業務需要滿足《GB/T22239-2019信息安全技術網絡安全等級保護基本要求》的用戶,可以快速滿足網絡安全等級保護規定的要求,在身份鑒別、訪問控制、安全審計、入侵防范、惡意代碼防范等場景進行安全加固。
兼容CentOS版
面向使用習慣更傾向 CentOS 系列操作系統的用戶,相比 CentOS ,提供更強的功能、更優的性能和更穩定的體驗,且用戶態完全兼容 CentOS,用戶可以無縫遷移。
此外,在機型適配方面,上述版本均適配了火山引擎所有的規格實例,包含 ECS/GPU/HPC/裸金屬等的完整機型矩陣,對 Intel、AMD 以及 ARM 實例均進行了功能適配、性能調優和穩定性加固,保證其在各個架構都能實現長期穩定運行。
高性能內核
操作系統的核心——veLinux Kernel 是基于社區 Linux 5.4 LTS 版本并集成字節跳動自研新特性定制而成,包括容器及虛擬化等特定環境深度優化,在性能,成本和穩定性等多個維度達到最優,同時節省更多的 CPU 資源,實現降本提效。目前 veLinux 已集成以下場景的專屬優化,且已全部提交并合入到 Kernel 社區。
針對 HugeTLB 重度使用的云場景,提出 HVO (HugeTLB Vmemmap Optimization),消除 vmemmap 冗余數據,最大為用戶節省 HugeTLB 總量的 1.56%。
Dying memory cgroup 作為容器場景下一個顯著的內存占用問題,極端情況下占用上百 GB 內存。針對此問題,提出專項優化方案,減少 dying memory cgroup 發生的概率以及優化其容器部署密度。極端情況下,內存占用減少 80%。
PSI(Pressure Stall Information)是用于評估系統資源壓力的主要指標之一。PSI 在實際生產環境中 CPU 占用過高,veLinux Kernel 對其優化并降低了 10% 的 CPU 使用,同時提出 PSI CPU FULL 指標,更方便量化和展示容器之間 CPU 資源競爭。
VDUSE(vDPA Device in Userspace) 是字節跳動自主研發的面向云原生場景的下一代高性能設備虛擬化框架,能夠為容器和虛機提供統一的I/O虛擬化層。目前,在云原生場景下,容器或者安全容器(虛機)在使用分布式存儲或者高性能RPC服務時,涉及的 I/O 數據平面比較龐雜,在運維和可維護性上也有所欠缺。且業界現在并沒有一個標準的技術方案,VDUSE 希望提供一個標準統一的技術方案,方便用戶在用戶態模擬磁盤、網卡等設備接入容器或者虛機。當部署在 veLinux 上的云原生應用希望訪問自研的分布式存儲服務時,通過 VDUSE,可以高效地開發一套高性能的用戶態接入方案,供上述的云原生應用使用。
veLinux Kernel 在穩定性和性能上做了大量的優化,據不完全統計,系統技術與工程團隊已為 Kernel 社區提交了上百個優化及 bugfix patch,且未來我們將持續維護并及時響應用戶的 issue。同時,我們也會積極地回饋社區,與開發者們共享優化成果。
更多閱讀:
VDUSE 介紹:
https://www.redhat.com/en/blog/introducing-vduse-software-defined-datapath-virtio
系統特性
當前,企業上云的趨勢不可抵擋,云時代的來臨對基礎操作系統提出了更高更嚴苛的要求。除了對操作系統的安全性和穩定性外,系統性能的提升也是重要的考慮因素,底層操作系統能否充分利用各種新硬件特性來提升業務的整體效能?此外,能否做到靈活使用,能否最大限度提高啟動速度,快速交付大量云服務器?這些都是云上用戶迫切關心的問題。10 年的技術積累和應用實踐,火山引擎 veLinux 操作系統做出了解答。
穩定性
veLinux 在字節 IDC 部署量超百萬,是支撐字節跳動抖音、今日頭條、飛書等海量業務的系統底座,同時 veLinux 也是字節跳動旗下云平臺火山引擎的官方操作系統,支撐了包括容器服務、機器學習平臺、大數據服務等大量公有云上業務,為火山引擎各個云產品提供穩定的系統支撐,其穩定性在內外部用戶得到實踐驗證,系統宕機率保持在萬分之一以下。
高性能
除了提供高性能的自研內核外,veLinux 還在系統組件上做了大量的性能優化。特別是基礎庫方面,針對不同的業務場景,進行了大量針對性優化。
OpenJDK
集成發布了優化的 OpenJDK,更好的支持大數據處理等 Java 業務,目前已經在 EMR(Elastic MapReduce) 等業務中上線。
針對大數據數據存儲壓縮場景,veLinux 的 OpenJDK 集成了優化的 zlib 實現,基于 GZIP 的數據壓縮、解壓縮性能會得到有效改進,詳細數據請參考下方 zlib 章節 。
針對 Full GC 延時較長的問題,我們移植了 G1 Parallel Full GC 到 jdk-8 中,有效緩解了Full GC帶來的長延時問題。
很多業務不只是依賴 GC 性能,內存分配器(例如 ptmalloc, jemalloc, tcmalloc) 對業務性能有影響也比較大,veLinux 的 OpenJDK 集成了不同版本的內存分配器,并且可用參數選擇。
業務在容器內的部署越來越多,但低版本的 OpenJDK 在容器中的性能表現并不好,比如用戶會遇到系統數據讀取慢、不準確等問題,甚至運行在 lxcfs 時,還會碰到死循環等嚴重問題。關于上述問題,veLinux 的 OpenJDK 都做了針對性地修復和改進,為用戶提供業務性能保障,保證業務在容器中運行的穩定性。
zlib
在內部業務的性能分析優化過程中,我們通過性能分析采集工具發現, zlib 壓縮和解壓縮函數(deflate/inflate)的熱點,在內部某業務線的的 CPU 占比超 50% 以上。由此可見,業務部署的madler/zlib 1.2.8 開源版本在性能上仍有提升空間。在調研過 intel/zlib、cloudflare/zlib、zlib-ng 等多個 zlib 版本后,最終在開源 madler/zlib 1.2.11 的基礎上,集成了多個優化補丁:
支持壓縮過程中哈希函數的向量化指令,并且重構了字符串匹配的流程。
增強解壓過程中長字符串拷貝效率 。
支持 crc32/adler32 等校驗碼的向量化指令 。
在 Benchmark 測試中,壓縮和解壓效率顯示提高了 30%-50%。zlib 優化后的版本部署到原來的業務線上,幫助該業務團隊優化 CPU 核心 5K+;目前該優化已集成到 veLinux 的 OpenJDK 中,并在字節內部多業務得到廣泛推廣與應用。
?
Benchmark測試:壓縮和解壓縮性能對比圖
其他性能優勢
除此之外,對比社區原生 Debian/CentOS,veLinux具備很強的性能優勢,在字節內部應用實踐之后,字節樣本拼接和數據打點等業務端到端性能提升20%以上,其中字節 metrics集群 CPU 使用率下降了36%。在性能測試中,對 Nginx/Redis/MySQL 等典型應用的性能也有大幅提升:
Nginx吞吐性能提升?10%-40%
Redis get/set性能提升?5%-25%
MySQL讀寫性能提升?10%-60%
安全性
隨著網絡安全事件不斷發生,用戶對安全性的重視程度也越來越高,作為火山引擎的官方操作系統,面對復雜的、規模不斷增加的用戶需求,veLinux 在安全性上需要做到全方位的建設,才能保護用戶的信息和數據安全。
及時修復 CVE 漏洞:CVE(Common Vulnerabilities and Exposures)是公共的安全漏洞列表,用于標準化識別已知網絡威脅。為了方便用戶更便捷地查看 CVE 更新情況,veLinux 官網發布了 CVE 安全中心:https://bytedance.github.io/kernel/sec,每周更新并修復 CVE 補丁。
入侵檢測安全防護:得益于字節安全團隊的技術支持,veLinux 提供入侵檢測安全防護,底層采用安全團隊自研的開源項目 Elkeid,主要通過收集主機層的信息來實現入侵檢測、行為審計、攻擊溯源、資產盤點、合規基線檢測等能力,目前完整版本在字節跳動內部的部署規模已達到數百萬量級,其穩定性、性能、數據采集能力、檢測能力和溯源能力等均在內部得到實戰驗證。
通過等保三級認證:等保三級認證是由國家公安機關對各機構的信息系統安全等級保護狀況進行的認證與評定。veLinux 目前已通過三級等保認證,這是國家對非銀行機構的最高級認證。這項安全認證資質已寫入火山引擎云安全白皮書,為云上用戶提供可靠的安全能力。
提供內核熱補丁:快速修復在運行中機器的內核漏洞。內核熱補丁是一種動態為內核打補丁的技術,可以在不重啟系統的情況下,修復內核 BUG 或者 CVE 漏洞,在最大程度上減少系統服務中斷時間,增加系統可用性。未來 veLinux 還將提供統一的補丁管理平臺、以及補丁客戶端的整套解決方案(內測中),通過該平臺用戶可以將熱補丁批量下發至需要打補丁的機器,提高運維效率。
易用性
veLinux提供了很多業界主流的問題追蹤與調試工具,用戶可以方便地安裝使用,協助定位、解決業務運行中遇到的穩定性或性能問題。
kdump-tools(以及相關的 kexec-tools、makedumpfile)是常用于在 Linux kernel panic(內核致命錯誤) 之后 dump 內存、保存現場的工具,基于 debian 社區版本,我們在 veLinux 中做了增強版本,幫助用戶提升穩定性,節省預留內存。
通過過濾無關的內核 cmdline、替換 systemd 等方法來降低 kdump 內核中的內存使用,從而防止機器在 dump 內存的過程中出現 oom 的錯誤。
檢測內存等硬件故障,提前結束 dump 過程,防止再次出現內核錯誤。
提前 dump dmesg,防止在 dump 內存失敗的情況下,獲取不到 dmesg 的信息。
在 kdump 側實現 crashkernel = auto 功能,根據機器內存自動設置預留給 kdump 的內存的大小,且無需對內核做定制化修改。
適配對 kdump 預留內存位置有特殊要求的硬件廠商。
atop 是一款開源的單機性能監測工具,支持實時觀測的同時、也支持讀取歷史文件排查問題。另外一個優點是除提供CPU、MEM、DISK等全局指標外,還提供進程、線程級別的各項指標監控數據。鑒于atop的這些優點,字節跳動基于社區的atop進行優化,目前已迭代3個版本,覆蓋公司全量服務器,穩定運行三年多。字節版atop工具新特性如下:
穩定性增強:增加oom killer 保護、修復atopcct統計、限制日志存儲總量防系統盤占滿等功能。
遠程分析 支持json格式數據傳輸到服務端,支持網頁版atop及集群內數據聚合。
更多實用指標:NUMA維度的CPU及MEM指標統計與聚合、runqueue delay、compact_stall、allocastall、InCsumErrors等指標。
靈活使用:支持篩選Top N線程的監控數據,支持定制日志保留天數及存儲位置。
終端UI優化:類htop,按照NUMA粒度,直觀展示所有CPU和內存。達到縱覽所有CPU負載,直觀判斷CPU綁核是否均衡等目的。
快速啟動
對于用戶而言,系統啟動過程通常被定義為從系統上電到通過 ssh 登錄的過程,經歷的時間即為系統啟動時間。具體來說,機器的啟動流程大體上可以根據 CPU 的控制權轉移方向描述為“固件 -> 引導程序 -> 操作系統”。其中固件包括 BIOS/UEFI,引導程序包括常見的的 GRUB/U-Boot/LK 等,操作系統包含了內核啟動、執行 initrd 中的 init 進程、再到執行硬盤上的 init 進程的過程。系統啟動速度是操作系統的重要性能指標之一,特別對于云場景中的虛擬機,能夠快速啟動可以顯著提高用戶體驗。
veLinux 通過對內核、驅動加載、系統服務的啟動優化,以及 cloud-init 服務的啟動順序優化,減少虛機啟動時間約 50%,提供快速啟動版,實現單虛擬機啟動時間 5s 內。
靈活使用
在實際使用中,用戶提出基于 veLinux 進行定制化的需求,例如安裝特定的驅動版本、內置特定的軟件包等。veLinux 針對這個問題,提供靈活的 OS 自定義定制工具,可以在火山引擎、內部平臺或本地鏡像基礎上,自動化完成定制,為用戶提供簡單便捷的定制窗口,一站式完成鏡像的變更、基準測試等任務,使廣大業務同學徹底擺脫基礎環境構建、操作系統差異等帶來的技術困境。
CentOS 官方已計劃停止維護 CentOS Linux項目,veLinux 提供的遷移工具(內測中),能幫助用戶平滑從 CentOS 遷移至 veLinux CentOS 兼容版,后續還會支持更多操作系統無縫遷移至 veLinux 。
云原生特性
容器 OS版本 云原生場景下,保證集群內宿主機的一致性非常重要,對單個節點的運維操作可能會導致環境的不一致,對應用的性能穩定性產生影響,甚至可能產生安全隱患。另一方面,與傳統系統不同的是,應用通過容器部署,操作系統只需要提供云原生運行必要的組件,省去其他很多不必要的系統組件,實現系統輕量化,同時提升系統啟動時間。veLinux 正在內測容器 OS 版本,該版本的優勢為:
系統輕量化
(1)只包含 Kubernetes Pods 運行所依賴的軟件包和系統服務,縮短系統啟動時間,精簡操作系統。 (2)根文件系統為只讀權限,只有 /etc和 /var 目錄可寫,以滿足基礎的系統配置需求。
系統維度升級回滾
遵循云原生不可變基礎設施原則,不支持單個包粒度的安裝、卸載和升級,不提供 apt 等軟件包管理工具,只支持以整個操作系統鏡像為粒度的更新和回滾,以此來保證集群內各個節點的軟件包版本與系統配置的一致性。
lxcfs 組件優化
lxcfs 是一個基于 FUSE 文件系統實現容器內資源視圖隔離的開源組件,通過在容器中掛載 lxcfs 相關目錄和文件,執行 free、top 等命令,能夠更精確地反映容器的資源使用情況。
veLinux 中的 lxcfs 組件在社區 5.0 版本的基礎上,修復了 /sys目錄下文件顯示不完全的問題,并模擬了 numa 節點拓撲,使得在容器中執行 numactl 命令能夠返回正確的節點信息。此外,對社區版本存在 lxcfs 進程退出重新啟動后無法正常工作的問題,veLinux 版本一方面通過 oom killer 保護,最大限度地減少被 kill 的可能,另一方面提供 remount 機制,使得 lxcfs 進程退出重新啟動后,remount 相關目錄到容器中,最大限度的降低對用戶的影響。
總結與規劃
操作系統一直伴隨著軟硬件技術的發展而發展,近年來,在軟件方面,云市場爆發式的增長,特別是云原生場景下,如何有效地進行集群資源的管理、調度編排以及性能度量和監控,都對操作系統提出了更高的要求;在硬件方面,芯片市場的環境變化以及主流 CPU 架構的演進發展,需要構建更加自主可控的操作系統,靈活應對國內外市場變化。針對云計算、國產化等場景,veLinux 實現了很多創新與優化,以滿足不同用戶的業務需求。未來將陸續發布更多云原生特性,并推出適配國產處理器、RISC-V 處理器架構的版本,歡迎大家持續關注。
另外,作為一款開源的操作系統,veLinux 致力于為用戶提供可靠、高性能的操作系統,歡迎更多感興趣的小伙伴加入 veLinux 的開源建設,共同推進國內操作系統生態發展。
編輯:黃飛
?
評論
查看更多