Swap не нужен. Или нужен?

Здравствуй, дорогой друг! В современном мире проблема с нехваткой оперативной памяти встречается всё реже и реже. Учитывая её низкую стоимость, прикупить себе 8-16, а то и 32 ГБ теперь уже не такая плохая идея.

И вот ты, пользователь Linux, подумал, а не отключить ли тебе swap раздел? Конечно же, полазив в помойке Интернете ты нашел кучу статей на тему того, как уменьшить нагрузку на диск и как ускорить комп, и там чудесным образом оказались советы по отключению подкачки. Возможно ты даже последовал этим советам. 

Вообще, я сам поражен, насколько некоторые люди бывают технически безграмотны. Вроде и опытные люди, вроде и работают в крупных российских компаниях (мне было бы стыдно, честное слово), а выдают вещи в роде "swap отключать можно, а иногда даже нужно!". Вы, простите, в своём вообще уме? Спросите себя, для чего нужен swap раздел? Для того, чтобы при заполнении ОЗУ туда сбрасывались не очень критичные данные для дальнейшего возможного использования? Ну молодцы, что я могу сказать. А теперь, внимание! Барабанная дробь... 

В Linux имеется множество различных типов памяти. У каждого из этих типов имеются свои свойства. Ядро оперирует достаточно большими блоками памяти - страницами, типовой размер которых составляет 4 килобайта. Наиболее интересны в контексте данной статьи файловые и анонимные страницы памяти. Файловой памяти однозначно соответствует какой-либо файл или его часть в файловой системе (исполняемый код самой программы, к примеру). Любую другую выделенную память называют анонимной, так как ей не соответствует никакой файл, которые, как известно, именованы.

Так вот. Если почитать литературу ("Операционная система UNIX", к примеру), или вспомнить институт, то вспомним, что отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память, так как дисковый I/O перемещается с анонимных страниц на файловые. Остаётся меньший пул страниц, доступных для высвобождения, так что это не только не поможет, это вредно. Также, высвобождение анонимных страниц просто невозможно, поскольку анонимные страницы не имеют резервного хранилища, к которому можно обратиться при удалении данных из памяти. Их высвобождение приведёт к полной утере данных из соответствующих страниц.

Включенный swap раздел - это и есть "то самое хранилище". Каким бы не был компьютер, на котором отключен swap, это приведет к проблемам. Анонимные страницы были, есть и будут. И в реальных условиях происходит примерно следующее:

  • Если swap не включен, то редко используемая анонимная память "складываться" никуда не может. Производительность будет падать из-за устаревших анонимных страниц, забирающих место у более важных задач. Также замедление происходит из-за начала совокупной конкуренции за память.
  • OOM killer ("убивает" наименее важный, по его мнению, процесс) вызывается быстрее. 

Таким образом, спроси себя ещё раз, зачем всё-таки swap-то нужен? А нужен он для равного высвобождения памяти, поскольку без него те же "анонимные" страницы высвобождаться никак не могут. А высвобождать память системе нужно всегда, хоть сколько ОЗУ установлено, это вообще роли практически не играет. OOM killer "рядышком всегда находится, так и ждет с топориком".

Я был удивлен, что мне один уважаемый сотрудник одной уважаемой компании сказал, что "swap отключать можно и иногда даже нужно!". Если ты это читаешь, то я передаю тебе привет, и эта статья в первую очередь для тебя. Коли ты спрашиваешь про такие вещи, то будь добр, сам изучи вопрос, прежде чем проводить техническое собеседование.