Aio_read, aio_write буферизируются ядром? В случае Linux они go через кеш страницы? - PullRequest
0 голосов
/ 18 марта 2020

Вопрос в названии. В Linux передача O_DIRECT обходит кеш страницы, выполненный буфером. Например, система базы данных будет использовать ее для управления собственным буфером.

Интересно, буферизовано ли aio_write / aio_read по умолчанию или нет? Они стоят в очереди, конечно, но включает ли это копирование данных? Если они буферизируются по умолчанию, вероятно, мы можем просто open файл, не пропуская O_DIRECT, хотя, передавая O_DIRECT при любых обстоятельствах, будет обходить кеш страницы ядра для обычных файлов.

Стандарты POSIX , по-видимому, предполагают, что aio_read / aio_write не буферизируются ядром:

Эффект буферизации

Если асинхронный ввод-вывод выполняется для файла, который был предварительно буферизован для того, чтобы быть фактически записанным на устройство, возможно, что асинхронный ввод-вывод не даст никакого преимущества в производительности по сравнению с обычным вводом-выводом; украденные циклы для выполнения асинхронного ввода-вывода будут удалены из запущенного процесса, и ввод-вывод произойдет во время прерывания. Это потенциальное отсутствие прироста производительности никоим образом не устраняет необходимость асинхронного ввода-вывода приложениями реального времени, которые очень часто используют специализированную аппаратную поддержку, несколько процессоров и / или небуферизованный синхронизированный ввод-вывод.

Однако при описании aio_read / aio_write о буферизации нет определенных слов.

1 Ответ

0 голосов
/ 25 марта 2020

Да. Они go через кеш ядра. aio_fsync подтверждает это.

...