磁碟IO 快取IO與直接IO

2021-08-18 12:31:54 字數 1024 閱讀 9823

檔案系統io分為directio和bufferio,其中bufferio也叫normal io。

快取i/o又被稱作標準i/o,大多數檔案系統的預設i/o操作都是快取i/o。在linux的快取i/o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。

讀操作:作業系統檢查核心的緩衝區有沒有需要的資料,如果已經快取了,那麼就直接從快取中返回;否則從磁碟中讀取,然後快取在作業系統的快取中。

寫操作:將資料從使用者空間複製到核心空間的快取中。這時對使用者程式來說寫操作就已經完成,至於什麼時候再寫到磁碟中由作業系統決定,除非顯示地呼叫了sync同步命令(詳情參考《【珍藏】linux 同步io: sync、fsync與fdatasync》)。

快取i/o的優點:1)在一定程度上分離了核心空間和使用者空間,保護系統本身的執行安全;2)可以減少讀盤的次數,從而提高效能。

快取i/o的缺點:在快取 i/o 機制中,dma 方式可以將資料直接從磁碟讀到頁快取中,或者將資料從頁快取直接寫回到磁碟上,而不能直接在應用程式位址空間和磁碟之間進行資料傳輸,這樣,資料在傳輸過程中需要在應用程式位址空間(使用者空間)和快取(核心空間)之間進行多次資料拷貝操作,這些資料拷貝操作所帶來的cpu以及記憶體開銷是非常大的。

直接io就是應用程式直接訪問磁碟資料,而不經過核心緩衝區,這樣做的目的是減少一次從核心緩衝區到使用者程式快取的資料複製。比如說資料庫管理系統這類應用,它們更傾向於選擇它們自己的快取機制,因為資料庫管理系統往往比作業系統更了解資料庫中存放的資料,資料庫管理系統可以提供一種更加有效的快取機制來提高資料庫中資料的訪問效能。

直接io的缺點:如果訪問的資料不在應用程式快取中,那麼每次資料都會直接從磁碟載入,這種直接載入會非常快取。通常直接io與非同步io結合使用,會得到比較好的效能。(非同步io:當訪問資料的執行緒發出請求之後,執行緒會接著去處理其他事,而不是阻塞等待)

下圖分析了寫場景下的directio和bufferio:

磁碟IO 快取IO 直接IO 記憶體對映

磁碟io的幾種訪問方式如下 快取io 快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系統檢查核心的緩衝區有沒有需要的資料,如果已經快取了,那麼就...

快取IO和直接IO

快取io 資料從磁碟先通過dma copy到核心空間,再從核心空間通過cpu copy到使用者空間 直接io 資料從磁碟通過dma copy到使用者空間 快取io又被稱為標準io,大多數檔案系統的預設io操作都是快取io 在linux的快取io機制中嗎,資料先從磁碟複製到核心空間的緩衝區,然後從核心...

linux 高階IO 磁碟對映IO

儲存對映io 說明 在程序的棧中開闢一塊緩衝區將之與磁碟檔案相對應,對緩衝區的更改將自動寫入磁碟檔案,這樣就可以不在使用read和write的情況下執行io mmap函式 void mmap void addr,size t len,int prot,int flag,int filedes,off...