io_uring без readahead: почему приложение само должно подсказывать ядру
Io_uring Without Readahead
Разработчик Turso измерил влияние readahead на производительность io_uring. Оказалось, что без него io_uring отправляет только один запрос за раз, что убивает concurrency и не позволяет ядру объединять запросы. С readahead на 32 страницы число запросов к устройству падает с ~196 000 до ~16 300, а 91-93% запросов сливаются. Также автор разбирает затраты на polling-поток и объясняет, почему O_DIRECT приводит к большему числу cache misses по сравнению с buffered I/O.
Один SQE означает отсутствие параллелизма, а без параллелизма блочному слою нечего объединять.