Используйте AIO_WRITE () Но все еще видите данные, проходящие через кэш?
-
30-09-2019 - |
Вопрос
Я играю с этим кодом на 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 осторожно.
Не связан с StackOverflow