您好,登錄后才能下訂單哦!
Linux是一個基于POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統,具有免費使用和自由傳播的特性。隨著開源軟件的發展以及云計算技術的革新,Linux成為云計算人才必須要掌握的技能之一。下面給大家分享云計算學習路線圖素材課件: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的接口。
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毫秒,過期之后無法滿足的異步請求將會被移動到調度隊列中,也就意味著要重新調度,通常這些值不需要調整。
除了以上方法,IO優化的方法還有很多,大致思路是最好換SSD、調整raid級別、選擇IO調度器、根據場景選擇合適的文件系統、配置選定調度器的參數、使用工具進行分析優化結果是否理想、寫在開機啟動項里。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。