
В документации ядра Linux совет POSIX_FADV_RANDOM, похоже, отключает readahead. Но когда я отключаю Readhead с помощью (sudo hdparm -A 0 /dev/sdb), я получаю огромное падение производительности; также заметил, что read(2) разделяется каждые 512k и действует как отдельные вызовы (не уверен в причине, возможно, дело в максимальном секторе на запрос).
Так какая опция действительно отключает опережающее чтение? Отключает ли POSIX_FADV_RANDOM также кэширование ОС, или мне следует добавить POSIX_FADV_DONTNEED.
решение1
POSIX_FADV_RANDOM
отключает опережающее чтение, выполняемое драйвером файловой системы ядра. Он советует слою файловой системы не читать больше, чем было запрошено. Опережающее чтение выполняется на уровне файла: слой файловой системы может извлекать дополнительные данные из того же файла, но он не будет делать этого (много), если вы укажете POSIX_FADV_RANDOM
.
hdparm -A 0
отключил опережающее чтение, выполняемое самим диском. Он сообщает диску, что при чтении сектора он не должен сохранять следующие несколько секторов в своем внутреннем кэше.
Оба отключают опережающее чтение, но на другом уровне системы.
POSIX_FADV_RANDOM
отключает только предварительную выборку. Установите регион, POSIX_FADV_DONTNEED
если вы не хотите, чтобы он был кэширован (или хотите, чтобы он был удален из кэша).