CentOS 8裡的這個功能,天翼雲SFS彈性檔案校準了

天翼雲開發者社群發表於2022-07-20

CentOS(Community Enterprise Operating System)作為Linux發行版之一,是Red Hat Enterprise Linux(RHEL)依照開放原始碼規定釋出的原始碼所編譯而成。由於出自同樣的原始碼,有些要求高度穩定性的伺服器以CentOS替代商業版的Red Hat Enterprise Linux使用。

最近使用 CentOS 8的小夥伴可能會發現,CentOS 8的磁碟效能監控工具iostat與CentOS 7相比,精準性有所下降,天翼雲彈性儲存團隊在實踐過程中發現問題,並用SFS彈性檔案提升了iostat的監控精確性。
Linux中最常用的就是iostat。它能夠監控系統磁碟裝置的負載,提供磁碟裝置的IO合併次數,讀寫頻寬、平均IO大小,平均佇列長度,磁碟利用率等資訊。
util(utilization)即磁碟裝置的利用率,代表了磁碟裝置有百分之多少的時間用於處理IO,如果util長期處於100%,說明IO壓力過大,磁碟已滿負荷工作。

同樣都是滿負荷工作的情況下, iostat中util的統計在CentOS 7與CentOS 8中,顯示存在明顯差異:

CentOS 7:

CentOS 8:


同一個環境,壓力測試把磁碟壓滿的情況下, CentOS 7的util已經顯示100%了,CentOS 8的util可能還不到75%。
iostat中的util,代表過去的一段時間內,儲存裝置處理IO的時間佔總時間的百分比。裝置處理IO的時間是由裝置在核心中的io_ticks屬性維護:


io_ticks代表裝置處理IO的總時間,是一個不斷累加的值。io_ticks不關心佇列中有多少個IO在排隊,它只關心裝置有IO的時間。即不考慮IO有多少,只考慮IO有沒有。
如果時間過去了 1s,其中的500ms裝置中有IO,io_ticks就會增加500,util就是根據這個算式計算出的:io_ticks/總ticks=500/1000=50%。


CentOS 7升級到CentOS 8,util顯示出現瞭如此大的差異,就是因為在io_ticks的演算法上,進行了變動。

tips:

對於機械盤, IO是序列的,util能準確的反映磁碟的繁忙程度。但對於SSD,由於IO可以並行處理,透過util就無法直接表示磁碟繁忙程度,但還是有一定參考價值。

 

原理分析

CentOS 7中,在每次IO開始、合併、結束及查詢時,都會呼叫part_round_stats_single判斷當前是否有IO請求在被處理,若有IO請求則根據時間戳與當前時間差值累加io_ticks,相對比較準確:


  這中間就需要用到一個重要的變數,磁碟的 inflight。inflight表示當前裝置中未完成的IO請求數量,在CentOS 7中是透過每次IO開始時加1,結束時減1來實現對inflight的維護。 


而在最新核心中,由於多佇列的應用,計算 inflight時會遍歷所有處理中的IO請求,判斷是否在當前磁碟以統計inflight。 


如果為了統計 io_ticks,每次都去遍歷所有IO,就會影響IO的效率。所以在CentOS 8中,計算io_ticks時拋棄了inflight值,透過每次IO時呼叫update_io_ticks,如果發現不在同一個jiffies就對io_ticks加1,並將當前時間賦予stamp。

 

但是這個改進有一個很明顯的問題,在儲存較快時不會有問題( iops > 1000)。但是在儲存較慢時,比如一個IO持續多個jiffies,當IO end的時候經歷了多個jiffies,結果也只對io_ticks加1,會導致utils精度丟失很多。

 
這個問題存在了近 2年,才在2020年得到了修復,透過每次IO end的時候將stamp-jiffies的時間加入io_tick,減少誤差: 

 


但還是不能解決以下這種場景:如果第一個 io還沒有結束,經過了n個jiffies,第二個io進來了,它會將stamp設定為當前jiffies,這個時候,stamp比之前第一個IO記錄的值就少了n,IO結束時的增加的io_ticks就會少n,同樣丟失了精確度。如下圖所示:

 


由於核心沒有在每次 IO時計算inflight,也就無法判斷是否需要對io ticks加上jiffies,這個問題就遺留了下來,導致了iostat監控結果的不準確,目前來說開源社群也沒有太好的解決方案。

 

天翼雲的改進

針對社群高版本核心對慢速裝置 util統計不精確的問題,天翼雲SFS彈性檔案設計了相容老版本io_ticks統計方法的方案,適用於對於util精確度要求較高的場景,可以實時開啟/關閉基於inflight的精準io_ticks統計,讓使用者在使用CentOS 8系統的同時也能享受到CentOS 7的精準iostat監控水平。

 

 

sfs-tools定義了需要跟蹤的核心函式及從核心函式中提取相關的時延等資料的方法,並實現了對資料的二次加工和展示,其架構設計如下:

 

       sfs_tools可以作為獨立的工具使用,也可以作為檔案閘道器的一個特性對外提供各項監控資料。目前該工具已整合天翼雲檔案儲存的監控告警平臺。

 

除此之外,天翼雲 SFS彈性檔案還在糾正了精準度的基礎上進一步提供了自研的效能監控工具,透過對核心檔案函式介面的跟蹤,在不影響效能的情況下,提供基於函式及檔案級別的iops,讀寫延遲等監控資料,方便了更多開發者、使用者對主流開源系統的使用。

未來,天翼雲將繼續堅持自主創新,發揮自身技術優勢,持續提升創新能力與核心競爭力,為自主可控、可靠高效的雲端計算基礎架構添磚加瓦,為國家資訊科技產業的發展提供堅實的技術保障。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014251/viewspace-2906639/,如需轉載,請註明出處,否則將追究法律責任。

相關文章