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