В кодовую базу, на основе которой формируется ядро Linux 6.5, принято изменение с реализацией нового системного вызова “cachestat“, позволяющего программам в пространстве пользователя запрашивать более детальную статистику из страничного кэша на стороне ядра.
Расширяя уже существующий системный вызов “mincore”, используемый для определения, присутствуют ли страницы в памяти, вызов “cachestat” позволяет запрашивать более подробную статистику кэша страниц и стремится обеспечить большую масштабируемость. Системный вызов “cachestat” сообщает такие сведения, как количество прокэшированных страниц, грязных (dirty) страниц, вытесненных страниц, недавно вытесненных страниц и страниц, отмеченных для отложенной записи (writeback).
Предоставляемая статистика для файлов позволяет точнее принимать решения по работе с вводом-выводом, проходящим через VFS, основываясь не только на абстрактном алгоритме, но и учитывая характеристики конкретной системы в конкретный момент времени.
Возможные варианты использования cachestat() приложениями:
- Планировщик запросов в СУБД сможет решать, выполнять ли сканирование индекса или напрямую читать данные из таблицы, основываясь на состоянии табличного индекса в страничном кэше.
- Гранулированное и зависимое от нагрузки манипулирование наполнением и вводом-выводом страничного кэша (например “грязных” (dirty) страниц/страниц, помеченных на отложенную запись (writeback)), меняя частоту синхронизации – от очень частой при слабой нагрузке и до пакетной при всплесках нагрузки.
- Возможность более наглядного и удобного представления информации об использовании памяти в больших файлах/директориях, аналогично тому как утилита “du” позволяет отображать использование дискового пространства.
- Упрощение диагностики и отладки отложенной записи при проблемах с производительностью.