Что такое Page Fault в контексте Linux и производительности?

«Что такое Page Fault в контексте Linux и производительности?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Page Fault — это исключение (прерывание), которое возникает, когда процесс пытается получить доступ к странице виртуальной памяти, которая в данный момент не отображена в физической оперативной памяти (RAM). Ядро Linux обрабатывает это исключение, чтобы сделать запрошенную страницу доступной.

С точки зрения DevOps и системного администрирования важно понимать типы Page Fault и их влияние:

  1. Minor (Soft) Page Fault:

    • Причина: Страница уже находится в RAM, но еще не привязана к таблице страниц текущего процесса (например, после fork() или при первом обращении к разделяемой библиотеке).
    • Влияние: Обрабатывается быстро, минимальные накладные расходы.
  2. Major (Hard) Page Fault:

    • Причина: Запрашиваемой страницы нет в RAM. Ядро должно загрузить ее с диска (из swap-раздела или из файла исполняемого кода/библиотеки).
    • Влияние: Критично для производительности. Операция ввода-вывода с диска на порядки медленнее, чем доступ к RAM. Большое количество major faults — явный признак нехватки памяти.
  3. Invalid Page Fault:

    • Причина: Попытка доступа к несуществующему или защищенному адресу памяти (например, разыменование нулевого указателя NULL).
    • Влияние: Приводит к отправке сигнала SIGSEGV процессу и, как правило, к его аварийному завершению (Segmentation Fault).

Мониторинг и диагностика:

  • Утилита perf может отслеживать количество page faults.
  • Поля minflt/s и majflt/s в выводе vmstat показывают, соответственно, minor и major faults в секунду.
  • Высокие значения majflt/s — сигнал для увеличения объема RAM, оптимизации рабочего набора приложения или настройки политик swappiness.