快取IO和直接IO

2022-06-05 07:30:11 字數 981 閱讀 7472

快取io:資料從磁碟先通過dma copy到核心空間,再從核心空間通過cpu copy到使用者空間

直接io:資料從磁碟通過dma copy到使用者空間

快取io又被稱為標準io,大多數檔案系統的預設io操作都是快取io

​ 在linux的快取io機制中嗎,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。

寫操作快取io的優點

快取io的缺點

直接io就是應用程式直接訪問磁碟資料,而不經過核心緩衝區,也就是繞過核心緩衝區,自己管理io快取區,這樣做的目的是減少一次核心緩衝區到使用者程式快取的資料複製

​ 引入核心緩衝區的目的在於提高磁碟檔案的訪問效能,因為當程序需要讀取磁碟檔案時,如果檔案內容已經在核心緩衝區中,那麼就不需要再次訪問磁碟。而當程序需要向檔案寫入資料是,實際上只是寫到了核心緩衝區便告訴程序已經寫成功,而真正寫入磁碟是通過一定的策略進行延時的。

​ 然而,對於一些較複雜的應用,比如資料庫伺服器,他們為了充分提高效能。希望繞過核心緩衝區,由自己在使用者態空間時間並管理io緩衝區,包括快取機制和寫延遲機制等,以支援獨特的查詢機制,比如資料庫可以根據加合理的策略來提高查詢快取命中率。另一方面,繞過核心緩衝區也可以減少系統記憶體的開銷,因為核心緩衝區本身就在使用系統記憶體。

​ 直接io的缺點就是如果直接訪問的資料不再應用快取中,那麼每次資料都會直接從磁碟進行載入,這種直接載入會非常緩慢,通常直接io跟非同步io結合使用會得到較好的效能

linux提供了對這種需求的支援,即在open()系統呼叫中增加引數選項o_direct,用它開啟的檔案便可以繞過核心緩衝區的直接訪問,這樣有效避免了cpu和記憶體的多餘時間的開銷。

順便提一下,與o_direct類似的乙個選項是o_sync,後者只對寫資料有效,它將寫入核心緩衝區的資料立即寫入磁碟,將機器故障時資料的丟失減少到最小,但是它仍然要經過核心緩衝區。

磁碟IO 快取IO與直接IO

檔案系統io分為directio和bufferio,其中bufferio也叫normal io。快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系...

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

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

帶快取IO和不帶快取IO

ssize t write int fd,const void buf,size t count 寫操作時,設每次寫入長度count 10個位元組,那麼你幾要呼叫10次這個函式才能把這個緩衝區寫滿,此時資料還是在緩衝區,並沒有寫入到磁碟,緩衝區滿時才進行實際上的io操作,把資料寫入到磁碟上,所以上面...