Ответ
Page Fault — это исключение (прерывание), которое возникает, когда процесс пытается получить доступ к странице виртуальной памяти, которая в данный момент не отображена в физической оперативной памяти (RAM). Ядро Linux обрабатывает это исключение, чтобы сделать запрошенную страницу доступной.
С точки зрения DevOps и системного администрирования важно понимать типы Page Fault и их влияние:
-
Minor (Soft) Page Fault:
- Причина: Страница уже находится в RAM, но еще не привязана к таблице страниц текущего процесса (например, после
fork()или при первом обращении к разделяемой библиотеке). - Влияние: Обрабатывается быстро, минимальные накладные расходы.
- Причина: Страница уже находится в RAM, но еще не привязана к таблице страниц текущего процесса (например, после
-
Major (Hard) Page Fault:
- Причина: Запрашиваемой страницы нет в RAM. Ядро должно загрузить ее с диска (из swap-раздела или из файла исполняемого кода/библиотеки).
- Влияние: Критично для производительности. Операция ввода-вывода с диска на порядки медленнее, чем доступ к RAM. Большое количество major faults — явный признак нехватки памяти.
-
Invalid Page Fault:
- Причина: Попытка доступа к несуществующему или защищенному адресу памяти (например, разыменование нулевого указателя
NULL). - Влияние: Приводит к отправке сигнала
SIGSEGVпроцессу и, как правило, к его аварийному завершению (Segmentation Fault).
- Причина: Попытка доступа к несуществующему или защищенному адресу памяти (например, разыменование нулевого указателя
Мониторинг и диагностика:
- Утилита
perfможет отслеживать количество page faults. - Поля
minflt/sиmajflt/sв выводеvmstatпоказывают, соответственно, minor и major faults в секунду. - Высокие значения
majflt/s— сигнал для увеличения объема RAM, оптимизации рабочего набора приложения или настройки политик swappiness.