Linux
Linux 如何處理並發磁碟 IO?
當 Linux 伺服器正在處理許多並發請求以讀取許多不同的文件時,它是否:
- 尋找 File_1,讀取整個文件,然後尋找 File_2,讀取整個文件,然後尋找 File_3,等等
- 尋找 File_1,讀取它的一部分(直到預讀值?),然後尋找 File_2,讀取它的一部分,然後尋找它離開的 File_1,讀取更多,然後尋找 File_3,等等, ETC
如果是第二種情況,那麼伺服器執行的搜尋次數超出了必要的次數,這會顯著減慢速度。在那種情況下,我可以做任何調整嗎?
在磁碟 I/O 中有一個東西叫做電梯。磁碟子系統試圖避免磁碟磁頭在整個碟片上顛簸。它將重新排序 I/O 請求(當沒有被屏障禁止時),以便磁頭將從磁碟內部移動到外部,然後返回,在途中執行請求的 I/O。
第二件事是 I/O 請求合併。如果在短時間內有許多請求訪問文件的不同部分,則 I/O 子系統將嘗試一次性獲取所有數據,而不是發出幾個不連貫的請求。
就調音而言。如果您是應用程序編寫者,您可以做很多事情。您可以隨時發出大型的順序 I/O 並使用 fsync() 等。當您需要確保數據在碟片上時。
如果您是系統管理員,並且您絕對知道 2 個應用程序的數據請求跨越式,並且它們嘗試按順序讀取文件(例如,您有 2 個 DVD 被並行轉碼),那麼是的,增加預讀應該會有所幫助。否則,在進行任何調整之前,您需要查看您的 I/O 模式和大小,考慮您的 RAID 級別(如果有)和其他因素。看看你真正的瓶頸是什麼,在你開始調整之前,可能很難猜到是什麼真正限制了你的系統。