[英]Are aio_read, aio_write buffered by kernel? In case of Linux, does they go through page cache?
問題如標題。 在 Linux 中,傳遞O_DIRECT
繞過緩沖區完成的頁面緩存。 例如,數據庫系統將使用它來管理自己的緩沖區。
我想知道aio_write
/ aio_read
默認緩沖? 它們當然是排隊的,但這是否涉及復制數據? 如果默認情況下它們是緩沖的,可能我們可以直接open
文件而不傳遞O_DIRECT
,盡管在任何情況下傳遞O_DIRECT
都會繞過普通文件的內核頁面緩存。
POSIX 標准似乎表明 aio_read/aio_write 不是由內核緩沖的:
緩沖效果
如果在實際寫入設備之前對已緩沖的文件執行異步 I/O,則異步 I/O 可能不會比普通 I/O 提供任何性能優勢; 為執行異步 I/O 所竊取的周期將從正在運行的進程中帶走,並且 I/O 將在中斷時發生。 這種潛在的性能增益不足並沒有消除實時應用程序對異步 I/O 的需求,這些應用程序通常會使用專門的硬件支持、多個處理器和/或無緩沖的同步 I/O。
但是,在描述有關緩沖的 aio_read/aio_write 時沒有明確的詞。
是的。 它們通過內核緩存。 aio_fsync
證明了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.