Я играю с этим кодом на Linux 2.6.16.46:использовать aio_write(), но все еще видеть данные, проходящие через кеш?
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);
Это должно использовать память, на который указывает буфер для операции ввода-вывода. Тем не менее, я вижу, что количество грязных страниц растет, как если бы я писал в кеш. Почему это?
На строительной машине нет поддержки O_DIRECT в open(). Но поскольку я не использую write(), это должно быть проблемой?
Я уверен, что есть прямая поддержка IO на цели.
Потому что реализация aio не так хороша, как должна быть? Я не отправляю это как ответ, потому что мои знания об aio довольно старые, и я не проверял, улучшилось ли это за последние годы. Пять лет назад это была просто оболочка совместимости с API, но никаких улучшений нет. – Lothar
хорошо. На целевой машине, которая равна 2.6.27.19, прямое IO поддерживается в ядре как минимум. Но у него нет компилятора. На машине сборки open() не принимает O_DIRECT. Означает ли это, что у меня есть старая библиотека? –