騰訊云操作系統內核團隊悄然修復bug,獲Linux創始人Linus Torvalds 贊許
12月30日獲悉,騰訊云操作系統(Tencent OS)內核團隊在 Linux 社區默默提交的兩項改進,成功解決了自 2021 年以來一直困擾著一線廠商,并在近期讓多個Linux頂級Maintainer(軟件維護者)困惑的關鍵內核bug。這一改進方案最終被合并進入后續的 Linux LTS(Long-term support) 版本中,并獲得了 Linux 之父 Linus Torvalds 的高度評價。
Linus:“不明,覺贊”
大約兩個月前,Linux 社區中的一封郵件引起了廣泛關注。其內容主要是,自 2021 年 12 月起,Linux 內核中啟用了 Large folio 特性(能夠提升系統訪存性能)的 XFS 文件系統用戶(但不僅限于 XFS)有概率遭遇緩存損毀導致的宕機問題。該問題受到了社區的高度重視。
XFS 是最常見的 Linux 文件系統之一,在常見的 Linux 使用場景中,如服務器、桌面等,XFS 被作為主力文件系統大量采用。盡管該bug較難觸發,但其潛在風險仍然讓社區和各大廠商感到不安。Meta 和 Cloudflare 等公司甚至不得不暫時禁用 XFS 的 Large folio 特性以確保系統穩定。
一個多星期的討論中,大家遲遲沒有捕捉到bug所引發的具體位置或線索,只是確認bug確實存在而且亟需修復。幾位頂級 Maintainer,以及 Linus Torvalds 本人也參與進入討論。
社區在廣泛排查的過程中,突然發現這個問題在新的 Linux 內核版本中已經不復存在。進一步的調查發現,這一變化歸功于騰訊云操作系統內核團隊在今年 4 月提交的兩項改進。
原來,騰訊云操作系統內核團隊在進行操作系統性能優化研發時發現,操作系統內核使用 XArray(內核中用于處理廣范圍地址索引結構的基數樹處理庫)管理 Page Cache(頁面緩存)時,會因XArray在分配內存時沒有考慮好并發修改的問題,導致分配的內存指針可能指向錯誤的數據,對外表現為 XFS 與其他引入了 Large Folio 特性的文件系統均有概率出現卡死宕機甚至數據丟失的情況。
針對這一問題,騰訊云操作系統內核團隊在優化 Page Cache 對 Xarray 的使用上,引入了一個新的輔助函數,簡化了 Xarray 的中 Large Folio 的插入算法,并進一步梳理和修復了內存分配的并發處理,確保了即使在多線程環境下,內存分配和釋放也能正確進行。這些改動不僅修復了數據損壞的問題,還提升了操作系統系統的性能。
經歷了數個星期的討論與分析后,這些改動被社區認為是最佳的修復方案。
如今,這一修復方案已經被合入了最新的操作系統版本中,為這一問題畫上了句號。同時,方案也極大提升了大文件在 Page Cache 中的讀入性能,數以十億計運行 Linux 的設備,都會因此快一點。
除了這次貢獻外,騰訊云操作系統內核團隊近年來通過與社區的緊密合作,在 swap(交換空間)、memory cgroup(內存控制組)、頁面與熱度管理等方面持續進行技術創新,不斷提升 Linux 內核的性能和穩定性,助力操作系統技術發展。
目前,騰訊云也開發了自研的服務器操作系統版本TencentOS Server,裝機規模超過1000萬套,除了支撐騰訊自研的國民級應用,也廣泛服務了互聯網、金融、政務、工業、能源、交通等行業客戶。