Используйте AIO_WRITE () Но все еще видите данные, проходящие через кэш?

StackOverflow https://stackoverflow.com/questions/3532952

Вопрос

Я играю с этим кодом на 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. Тем не менее, я вижу, что количество грязных страниц поднимается, как будто я писал в кэш. Почему это?

На строительной машине нет поддержки O_Direct в Open (). Но так как я не использую писать (), если это все еще будет проблемой?

Я почти уверен, что есть прямая поддержка IO на цели.

Это было полезно?

Решение

выяснил это. Прямой / буферизованный IO - это одно, синхронизируется / асинхр - другое. Чтобы асинхронизировать писем, избегайте кэша, все еще нужно давать o_Direct на вызов Open (), даже если запись () не используется.

Скорее всего, в первую очередь ошибки компиляторов - читайте человека 2 осторожно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top