好程式設計師雲計算教程之Linux效能優化IO子系統

2021-10-03 04:30:59 字數 1637 閱讀 8407

好程式設計師雲計算教程之linux效能優化io子系統,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排程器、根據場景選擇合適的檔案系統、配置選定排程器的引數、使用工具進行分析優化結果是否理想、寫在開機啟動項裡。

好程式設計師雲計算教程分享雲服務和雲計算的區別有那些

好程式設計師雲計算教程分享 雲服務和雲計算的區別 有那些?什麼是雲,什麼不是雲,首先 雲計算確實是非常重要的,雲計算確實是當前非常重要的技術,而且對未來會有非常深刻的影響力。但是,目前雲計算的商業理念,如雲電視 雲手機,把雲炒得完全是一種商業理念。如果這麼延續下去的話,使用者很難分辨什麼是雲,什麼不...

好程式設計師雲計算教程分享入門雲計算要精通學習什麼?

好程式設計師雲計算教程分享入門雲計算要精通學習什麼?入門學習雲計算,必須得會linux基礎和網路基礎,包括基本命令的使用,linux系統的基本結構原理,系統管理,磁碟管理,raid陣列,常見的故障拍錯,系統效能的監控調優,網路方面除了學好網路基本原理還要深入tcp ip http 等 從事雲計算方面...

好程式設計師雲計算教程分享if巢狀功能語法解析

好程式設計師雲計算教程分享if巢狀功能語法解析 使用如下兩種判斷語法分別判斷18這個數字,對於2以及3的整除結果 多條件判斷 if 測試條件1 then 測試條件1滿足時,執行的語句 elif 測試條件2 then 測試條件2滿足時,執行的語句 elif 測試條件3 then 測試條件3滿足時,執行...