使用AIO_WRITE(),但仍然看到通过缓存的数据?
-
30-09-2019 - |
题
我正在Linux 2.6.16.46上使用此代码:
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 );
这应该使用Buffer指向IO操作的内存。不过,我看到肮脏的页面数量上升,就好像我在写信一样。这是为什么?
在构建计算机上,Open()中没有O_Direct支持。但是,由于我不使用write(),所以这仍然是问题吗?
我很确定目标上有直接的IO支持。
解决方案
弄清楚了。直接/缓冲io是一件事,同步/异步是另一回事。要使异步写入避免缓存,即使不使用write(),也需要将O_Direct送给Open()调用。
首先可能会出现编译器错误 - 仔细阅读Man 2。
不隶属于 StackOverflow