1
我這個代碼打在Linux 2.6.16.46:使用aio_write(),但仍然看到數據通過緩存?
io.aio_fildes = open(name, O_CREAT | O_TRUNC | O_WRONLY | O_SYNC, 00300);
io.aio_buf = buffer;
io.aio_nbytes = size;
io.aio_sigevent = sigev;
io.aio_lio_opcode = LIO_WRITE;
aio_write(&io);
這應該使用緩衝區IO操作所指向的內存。儘管如此,我仍然看到髒頁面的數量上升,好像我正在寫入緩存。這是爲什麼?
在構建機器上,open()中沒有O_DIRECT支持。但是由於我不使用write(),應該仍然是個問題嗎?
我很確定目標上有直接的IO支持。
因爲aio的實現不如應有的好? 我不會發布這個答案,因爲我對aio的瞭解很老,我沒有檢查過去幾年是否改進了。五年前它只是一個API兼容性包裝,但沒有功能改進。 – Lothar 2010-08-20 16:47:46
好。在2.6.27.19的目標機器上,至少內核支持直接IO。但它沒有編譯器。在構建機器上,open()不接受O_DIRECT。這是否意味着我有一箇舊圖書館? – 2010-08-20 16:58:13