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

标签 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 );

这里应该使用buffer指向的内存进行IO操作。尽管如此,我还是看到脏页的数量在上升,就好像我正在写入缓存一样。这是为什么?

在构建机器上,open() 中没有 O_DIRECT 支持。但是因为我没有使用 write(),那仍然是个问题吗?

我很确定目标有直接的 IO 支持。

最佳答案

想通了。直接/缓冲 IO 是一回事,同步/异步是另一回事。要让异步写入避免缓存,即使未使用 write(),仍然需要将 O_DIRECT 提供给 open() 调用。

一开始可能会出现编译错误 - 请仔细阅读 man 2 open。

关于linux - 使用 aio_write() 但仍然看到数据通过缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532952/

相关文章:

eclipse中的java文件相对路径

linux - 如何在保持原始顺序的情况下在 Linux 中复制行?

linux - 从 NFS 安装文件夹开始更改 bash 脚本中的网络 ip

c++ - 将数组传递给 C++ 中的函数

windows - 我的进程中所有这些未提交的保留内存是什么?

c - 如何计算文件中的位数?

c - Linux内核模块的Makefile问题

linux - 在终端中输入 "bash -v"命令后出现问题

c# - 为什么这会抛出OutOfMemory?

Python 3.6.1 - 权限错误 : [Errno 13] Permission denied shown when trying to unzip a file