← Назад к вопросам

Как работает Memory swap?

1.3 Junior🔥 152 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обзор работы Memory Swap

Memory swap (подкачка памяти) — это механизм управления памятью в операционных системах, который позволяет использовать дисковое пространство в качестве расширения оперативной памяти (RAM). Когда физической RAM не хватает, система перемещает (свопирует) неактивные страницы памяти на выделенную область диска — swap-раздел или swap-файл, освобождая RAM для более приоритетных задач.

Детальный механизм работы

Процесс подкачки реализуется через комбинацию аппаратной поддержки (MMU — Memory Management Unit) и программного компонента ядра — менеджера виртуальной памяти. Вот ключевые этапы:

  1. Выявление "холодных" страниц: Ядро отслеживает активность страниц памяти с помощью битов доступа в таблицах страниц. Страницы, к которым не обращались длительное время, считаются кандидатами на выгрузку.
  2. Выбор жертвы (Pageout): Используются алгоритмы выбора, например, модификации LRU (Least Recently Used). В Linux за это отвечает ядерный демон kswapd.
  3. Запись на диск: Выбранные страницы копируются из RAM в заранее зарезервированную область на диске — swap.
  4. Обновление таблиц страниц: Запись в таблице страниц, соответствующая выгруженной странице, помечается как неактивная (invalid), и в неё заносится адрес этой страницы в swap-пространстве.
  5. Обращение к выгруженной странице (Page fault): Если процесс позже попытается обратиться к выгруженной странице, MMU сгенерирует исключение — page fault.
  6. Подкачка с диска (Pagein): Обработчик page fault в ядре определяет, что страница находится в swap, находит её на диске, загружает обратно в RAM (возможно, выгружая для этого другую страницу) и обновляет таблицу страниц.
# Пример просмотра информации о swap в Linux
$ swapon --show
NAME      TYPE      SIZE   USED PRIO
/swapfile file      2G     0B   -2

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       1.2Gi       5.7Gi       150Mi       728Mi       6.0Gi
Swap:          2.0Gi       0B          2.0Gi

Типы swap-пространства

  • Swap-раздел: Выделенный раздел на диске (например, /dev/sda2). Более производительный и надежный, так как имеет непрерывную область.
  • Swap-файл: Обычный файл в файловой системе (например, /swapfile). Гибкий вариант, который можно создать, изменить или удалить без переразметки диска.

Роль и стратегии подкачки в современных системах

Основная роль swap — не расширение памяти "любой ценой", а:

  • Предотвращение аварийного завершения (OOM Kill): При резком скачке потребления памяти у системы есть буфер для маневра.
  • Выгрузка неиспользуемых страниц: Даже на системах с избытком RAM ядро может свопить действительно неактивные части программ, освобождая RAM под дисковый кэш, что часто повышает общую производительность.
  • Реализация гибернации (сна): При гибернации содержимое всей RAM сохраняется в swap, чтобы восстановить состояние системы после выключения питания.

Стратегии (swappiness) в Linux регулируются параметром /proc/sys/vm/swappiness (от 0 до 100). Высокое значение (например, 60) заставляет ядро активно свопить страницы, низкое (10) — удерживать данные в RAM как можно дольше.

# Проверка и изменение параметра swappiness (временно)
$ cat /proc/sys/vm/swappiness
60
$ echo 10 | sudo tee /proc/sys/vm/swappiness

Производительность и влияние

Своппинг имеет критическое влияние на производительность из-за огромной разницы в скорости доступа: latency RAM измеряется наносекундами, а диска (даже SSD) — микросекундами, то есть разница в тысячи раз. Постоянно высокая загрузка swap (si/so в vmstat) — верный признак нехватки RAM и серьезных проблем с производительностью (thrashing).

# Мониторинг активности swap в реальном времени
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 5992344 132512 745212    0    0    15    22   45   78  8  2 90  0  0
  • si (swap in) — страниц загружено с диска в секунду.
  • so (swap out) — страниц выгружено на диск в секунду.

Заключение

Memory swap — это важный механизм обеспечения отказоустойчивости и гибкости управления памятью, который превращает диск в "резервный аэродром" для данных из RAM. Для DevOps-инженера понимание его работы, умение мониторить (free, vmstat, sar) и правильно настраивать (размер, swappiness, тип) — ключевой навык при проектировании и поддержке инфраструктуры. Оптимальное использование swap позволяет балансировать между стабильностью системы (предотвращение OOM) и производительностью, минимизируя дорогостоящие операции ввода-вывода.