代码之家  ›  专栏  ›  技术社区  ›  n-alexander

使用aioèu write()但仍能看到数据通过缓存?

  •  1
  • n-alexander  · 技术社区  · 16 年前

    我在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ïu直接支持。但既然我没有使用write(),那还应该是个问题吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   n-alexander    16 年前

    我知道了。直接/缓冲IO是一回事,同步/异步则是另一回事。要使异步写入避免缓存,仍然需要向open()调用提供O\ u DIRECT,即使没有使用write()。

    可能会有编译器错误在第一次-阅读人2打开仔细。