使用aio_write()但仍然看到数据通过缓存?

时间:2010-08-20 16:41:05

标签: linux memory-management io aio

我正在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支持。

1 个答案:

答案 0 :(得分:1)

想出来了。直接/缓冲IO是一回事,sync / async是另一回事。要进行异步写入,请避免缓存,即使未使用write(),仍需要向open()调用提供O_DIRECT。

最初可能会出现编译错误 - 仔细阅读man 2。