1

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 がサポートされていることは確かです。

4

1 に答える 1

1

これを理解しました。直接/バッファリングされた IO と、同期/非同期は別物です。非同期書き込みでキャッシュを回避するには、write() が使用されていなくても、open() 呼び出しに O_DIRECT を指定する必要があります。

最初はコンパイラ エラーが発生する可能性があります。man 2 を注意深く読んでください。

于 2010-08-23T14:22:51.970 に答える