Всё о подкачке в Linux

Linux делит физическую память (RAM, random access memory, память с произвольным доступом) на участки, называемые страницами. Свопинг — это процесс, когда страницы памяти копируются на заранее определённое место на жёстком диске, называемое областью подкачки (swap). Совместно физическая память и область подкачки составляют виртуальную память.

Свопинг необходим по двум важным причинам. Во-первых, когда системе требуется больше памяти, чем физически доступно, ядро выгружает в своп наименее используемые страницы и даёт память текущему приложению, которому память требуется немедленно. Во-вторых, значительное число страниц, используемых приложением, требуется только для их инициализации и после уже не нужны. Система может выгрузить эти страницы и освободить память для других программ или для дискового кеша.

Однако, у свопинга есть и отрицательная сторона. В сравнении с оперативной памятью, диски очень медленные. Время доступа к памяти измеряется в наносекундах, тогда как к дискам — в миллисекундах, так что диски в десятки тысяч раз медленнее. В результате, чем чаще происходит свопинг, тем медленнее будет ваша система. Иногда излишний свопинг (trashing) возникает в случаях, когда страница выгружается, а затем очень быстро опять помещается в память и так происходит постоянно. В таких случаях система борется за свободную память и не даёт приложениям возможность работать одновременно. Единственная возможность помочь — добавить оперативной памяти.

В Linux есть две формы области подкачки: своп-раздел и своп-файл. Своп-раздел — это независимый раздел на жёстком диске, который используется исключительно для подкачки, никакие другие файлы не могут там располагаться. Своп-файл — специальный файл в файловой системе, который расположен среди системных файлов и данных.

Для того, чтобы посмотреть, какие области подкачки есть в системе, используйте команду swapon. Вывод будет примерно таким:

Filename Type Size Used Priority
/dev/sda5 partition 859436 0 -1

Каждая линия отображает отдельную область подкачки, используемую системой. Здесь поле «Type» отображает, что используется раздел, а не файл (подразумевается именно своп-файл, ведь раздел — это тоже файл — прим. перев.), в поле «Filename» мы видим, что что это /dev/sda5. Поле «Size» показывает размер в килобайтах, а поле «Used» отображает, сколько килобайтов используется системой (в данном случае 0). «Priority» указывает Linux, какую область подкачки использовать в первую очередь. Замечательной особенностью подсистемы подкачки Linux является то, что вы можете монтировать две (или больше) области подкачки (предпочтительно на разных устройствах) с одинаковым приоритетом, Linux разделит активность подкачки между ними, что может значительно ускорить быстродействие свопинга.

Раздел подкачки

Чтобы добавить своп-раздел в систему, сначала нужно его подготовить. Во-первых, нужно удостовериться, что раздел помечен как своп, во-вторых, нужно создать файловую систему своп-раздела. Чтобы проверить, помечен ли раздел как своп, выполните от имени суперпользователя:

fdisk -l /dev/hdb

Замените /dev/hdb тем разделом на жёстком диске, который вы собираетесь использовать как своп. Вывод должен быть похож на это:

Device Boot Start End Blocks Id System
/dev/hdb1 2328 2434 859446 82 Linux swap / Solaris

Если раздел не помечен как своп, вам следует изменить это, запустив fdisk и используя меню, вызываемое клавишей «t». Будьте осторожны, работая с разделами — вы же не хотите по ошибке удалить важные разделы или случайно изменить идентификатор системного раздела на своп. Все данные на своп-разделе будут потеряны, так что несколько раз проверьте каждое сделанное изменение. Также заметьте, что Solaris использует для разделов тот же идентификатор что и Linux для swap, так что будьте осторожны и не убейте разделы Solaris.

После того, как разделы помечены как swap, вам нужно подготовить их, используя команду mkswap (make swap) с правами суперпользователя.

mkswap /dev/hdb1

Если вы не увидите ошибок, значит область подкачки готова к использованию. Чтобы немедленно её активировать, введите

swapon /dev/hdb1

Вы можете проверить, что она используется, выполнив swapon -s. Чтобы область подкачки автоматически монтировалась при загрузке, нужно добавить запись в файле /etc/fstab, который содержит список файловых систем и областей подкачки, которые монтируются во время загрузке системы.

Так как область подкачки — особый тип файловой системы, то многие параметры не используются. Для области подкачки добавьте:

/dev/hdb1 none swap sw 0 0

где /dev/hdb1 — своп-раздел. У него нету точки монтирования, поэтому стоит «none». Тип раздела «swap» с опциями «sw», последние два параметра в данном случае не используются, поэтому стоит 0.

Чтобы проверить, примонтируется ли область подкачки автоматически, не перезагружаясь, можно выполнить swapoff -a (которая отключит все области подкачки) и затем swapon -a (которая примонтирует все области подкачки, описанные в /etc/fstab). После этого можно проверить при помощи swapon -s.

Файл подкачки

Кроме раздела подкачки, Linux также поддерживает файл подкачки, который вы можете создать, подготовить, и смонтировать похожим образом к тому как монтируется раздел подкачки. Преимущества файлов подкачки в том, что вам не нужно искать свободный раздел или переразбивать диск чтоб добавить дополнительную область подкачки.

Чтобы создать файл подкачки используйте команду dd, чтобы создать пустой файл. Для того чтоб создать файл размером 1 Гб, наберите:

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

/swapfile это имя файла подкачки, а число 1048576 — размер файла в килобайтах (равно 1 Гб).

Подготовьте файл подкачки, используя команду mkswap так же, как и при работе с разделом, но в этом случае используйте имя файла подкачки.

mkswap /swapfile

И так же примонтируйте его используя команду swapon:

swapon /swapfile

Запись в файле /etc/fstab будет выглядеть так:

/swapfile none swap sw 0 0

Какого размера должна быть область подкачки?

Можно запустить Linux и без области подкачки, и система нормально запустится если у вас много памяти — но если у вас закончится физическая память, то система упадет, так как больше ничего не сможет сделать, поэтому рекомендуется иметь область подкачки, особенно ввиду того, что дисковое пространство достаточно дешевое.

Ключевой вопрос — сколько? Старые версии Unix-подобных операционных систем (такие как Sun OS или Ultrix) требовали в два-три раза больше объема области подкачки, чем размер физической памяти. Современные реализации (такие как Linux) не требуют так много, но они могут использовать его если настроить.

Надо руководствоваться следующим:
1) для настольных систем, используйте область подкачки с удвоенным размером физической памяти, так как это позволит запускать вам множество приложений (многие из которых могут простаивать, и легко перенесутся в область подкачки), освободив больше RAM для активных приложений;
2) для сервера, можно использовать меньшую область подкачки (допустим в половину размера физической памяти) — так вы будете иметь возможность использовать подкачку когда понадобится, но наблюдать за количеством используемой области подкачки и добавлять RAM, если потребуется;
3) для старых рабочих станций (скажем, со 128 Мб), используйте побольше области подкачки про запас, даже до 1 Гб.

В ядре версии 2.6 добавлен новый параметр, называемый swappiness, позволяющий администратору настраивать, как происходит свопинг в Linux. Это число от 1 до 100. Чем больше значение, тем больше страниц свопится, а чем меньше, тем меньше страниц попадает в область подкачки, даже если они простаивают. Разработчик ядра Эндрю Мортон сказал, что он запускает свой компьютер со значением 100, заявив: «Я считаю, что уменьшение свопинга ядра неправильно. Вы же не хотите, чтобы на машине были сотни мегабайт неиспользуемой памяти. Пускай убирается на диск, а память используется для чего-нибудь полезного.»

Отрицательной стороной идеи Мортона, является то, что память свопится слишком быстро, в результате появляются задержки отклика приложения. Это происходит из-за того, что, при щелчке по окну приложения, системе нужно вернуть приложение из свопа в память, из-за чего заметны «тормоза».

Значение по-умолчанию 60. Вы можете временно (до перезагрузки) изменить его, введя с правами рута:

echo 50 > /proc/sys/vm/swappiness

Если вы хотите изменить это навсегда, тогда задайте значение параметра vm.swappiness в файле /etc/sysctl.conf.

Заключение

Управление областью подкачки — неотъемлемый аспект системного администрирования. Благодаря хорошо спланированной и корректно используемой подкачке можно получить множество преимуществ. Не бойтесь экспериментировать и всегда следите за своей системой, чтобы быть уверенным, что вы получаете нужный результат.


Понравилась статья? Поделись с остальными.

Комментарии закрыты.