雲端計算學習路線圖素材課件:Linux效能最佳化IO子系統

千鋒雲端計算發表於2020-02-05

Linux是一個基於POSIX和Unix的多使用者、多工、支援多執行緒和多CPU的作業系統,具有免費使用和自由傳播的特性。隨著開源軟體的發展以及雲端計算技術的革新,Linux成為雲端計算人才必須要掌握的技能之一。下面給大家分享雲端計算學習路線圖素材課件:Linux效能最佳化IO子系統的內容。

雲端計算學習路線圖素材課件:Linux效能最佳化IO子系統

很多同學聽過IO流,即以流的方式進行輸入輸出,其中流是一種抽象的概念,它代表了資料的無結構化傳遞。IO系統,英文全稱為“Input output system”,中文全稱為“輸入輸出系統”,由輸入輸出控制系統和外圍裝置兩部分組成,是計算機系統的重要組成部分。

作為Linux伺服器來講,最大的兩個IO型別是磁碟IO和網路IO。一個完整的IO系統過程如下:

1)一個使用者程式透過write()系統呼叫發起寫請求;

2)核心更新對應的page cache;

3)pdflush核心執行緒將page cache寫入至磁碟中;

4)檔案系統層將每一個block buffer存放為一個bio結構體,並向塊裝置層提交一個寫請求;

5)塊裝置層從上層接受到請求,執行IO排程操作,並將請求放入IO請求佇列中;

6)裝置驅動(如SCSI或其他裝置驅動)完成寫操作;

7)磁碟裝置韌體執行對應的硬體操作,如磁碟的旋轉、尋道等,資料被寫入到磁碟扇區中。

block layer處理bio請求,並將這些請求連結成一個佇列,稱作IO請求佇列,這個連線的操作就稱作IO排程(也叫IO elevator即電梯演算法)。bio結構體是file system layer到block layer的介面。

雲端計算學習路線圖素材課件:Linux效能最佳化IO子系統

IO排程器的總體目標是減少磁碟的尋道時間(因此排程器都是針對機械硬碟進行最佳化的),IO排程器透過兩種方式來減少磁碟尋道:合併和排序。

合併即當兩個或多個IO請求的是相鄰的磁碟扇區,透過合併請求,多個IO請求只需要向磁碟傳送一個請求指令,減少了磁碟的開銷。

排序就是將不能合併的IO請求,根據請求磁碟扇區的順序,在請求佇列中進行排序,使得磁頭可以按照磁碟的旋轉順序的完成IO操作,可以減小磁碟的尋道次數。

想要最佳化IO系統效能,我們可以採用以下幾種方式:

1)調整buffer、提高效能,就是調整佇列數以及增加預讀數。

增加佇列長度:/sys/block/vda(特定某裝置)/queue/nr_requests

增加預讀數:/sys/block/vda(特定某裝置)/queue/read_ahead_kb

2)修改CFQ,以調節其效能,涉及引數檔案:/sys/block/vda/queue/iosched/。

比如對CFQ來講,有以下幾個值可以調整:

back_seek_max

反向尋道可能有負面影響,負載小的時候可以啟用,否則不要使用反向尋道太多值。

back_seek_penal

反向尋道做懲罰,如果不得不使用反向尋道的話,那麼必須對其做出一定懲罰,一旦做完懲罰之後,必須要正向尋道更多次數。

fifo_expire_async

用來控制非同步請求等待時間長度,預設是250毫秒,過期之後無法滿足的非同步請求將會被移動到排程佇列中,也就意味著要重新排程,通常這些值不需要調整。

雲端計算學習路線圖素材課件:Linux效能最佳化IO子系統

除了以上方法,IO最佳化的方法還有很多,大致思路是最好換SSD、調整raid級別、選擇IO排程器、根據場景選擇合適的檔案系統、配置選定排程器的引數、使用工具進行分析最佳化結果是否理想、寫在開機啟動項裡。


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

相關文章