我正在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 );
这应该使用缓冲区指向的内存进行IO操作。不过,我看到脏页的数量上升,就像我写入缓存一样。那是为什么?
在构建机器上,open()中没有O_DIRECT支持。但既然我没有使用write(),那还应该是个问题吗?
我非常确定目标上有直接的IO支持。
答案 0 :(得分:1)
想出来了。直接/缓冲IO是一回事,sync / async是另一回事。要进行异步写入,请避免缓存,即使未使用write(),仍需要向open()调用提供O_DIRECT。
最初可能会出现编译错误 - 仔细阅读man 2。