Настройка swap в ubuntu

Общая информацияНаверх

В системе Линукс для размещения виртуальной памяти можно выделить отдельный раздел жесткого диска или использовать обычный файл. Линукс позволяет комбинировать эти два способа. По умолчанию в Unix системах применяется SWAP раздел. Производительность отдельного SWAP раздела жесткого диска выше, чем производительность виртуальной памяти размещенной в файле. Единственным минусом SWAP раздела является сложность его редактирования.

Если Вы до эксплуатации сервера знаете какой емкости нужна SWAP область, то обязательно используйте отдельный раздел жесткого диска. Если нагрузка на SWAP область пока неизвестна, то лучше разместить виртуальную память в файле, после чего определив потребности системы, создать раздел нужного размера.

Система Linux позволяет одновременно использовать несколько SWAP разделов и SWAP файлов. Это позволяет более гибко подойти к вопросу расширения виртуальной памяти в случае нехватке размера SWAP области на сервере. Чаще всего, на работающем сервере с существующим SWAP разделом выясняется, что текущего размера виртуальной памяти уже не хватает. Целесообразнее добавить тестовый файл подкачки для определения нагрузки на SWAP область, а уже после увеличить размер раздела.

Создание, редактирование и удаление любых разделов из под загруженной в данный момент операционной системы не безопасно, поэтому создание SWAP раздела, вместо SWAP файла, делается только с использованием LiveCD. Статья на тему безопасного редактирования разделов будет написана в будущее время.

В системе Windows виртуальная память размещена только в отдельном файле — pagefile.sys (для Windows 2000 и выше) и win386.swp (для Windows 9x).

Хочу обратить Ваше внимани, что приведенные ниже инструкции касается только изменения размера ФАЙЛА ВИРТУАЛЬНОЙ ПАМЯТИ, а не изменение размера отдельной директории SWAP.

Ниже приведены пошаговые инструкции, которые позволят создать, изменить и удалить файл SWAP.

В Linux необходимо принимать решение

В Linux эквивалентом в файл подкачки страниц Windows, является раздел swap. Поскольку это раздел, а не просто файл, вы должны принять решение о размере раздела swap при установке Linux. Конечно, можно позже изменять размеры разделов, но в этом случае работы будет больше. Linux не может вместо вас автоматически управлять размером раздела swap.

В каждом дистрибутиве Linux используется свой собственный инсталлятор, и каждый дистрибутив следует определенной логике, заложенной в его инсталляторе, согласно которой автоматически делается выбор подходящего размера для раздела swap. Для того, чтобы принять решение о размере раздела swap, в дистрибутивах Linux обычно использует размер оперативной памяти. Когда устанавливается система Ubuntu, типичный размер раздела swap оказывается равен размеру оперативной памяти плюс дополнительно пол гигабайта или что-то около этого. Это гарантирует, что режим сна hibernate будет работать должным образом.

Если вы в инсталляторе Linux вручную задаете размеры разделов, то размер оперативной памяти плюс 0,5 ГБ является хорошим правилом, которое действительно позволит вам использовать в системе режим hibernate. Этого, как правило, должно быть более чем достаточно для режима подкачки. Если у вас есть оперативная память большого объема, например, 16 Гб или что-то подобное, и вам не требуется режим hibernate, но нужно дисковое пространство, вы могли бы, вероятно, обойтись небольшим разделом swap объемом в 2 Гб. Опять же, это зависит от того, сколько памяти компьютера будет использоваться. Но на всякий случай хорошо иметь пространство подкачки некоторого размера.

Старое правило «удвоенный размер оперативной памяти» применяется к компьютерам с 1 или 2 Гб оперативной памяти. О том, какого размера вам потребуется файл подкачки страниц или раздел swap, единого для всех ответа нет. Все зависит от программ, которыми вы пользуетесь, и от того, что этим программам требуется. Если у вас есть сомнения в этом вопросе, то почти всегда будет хорошим решением придерживаться правила, используемому в вашей системе по умолчанию.

Размер областей подкачки

В общем случае, для Astra Linux правильным начальным выбором может являться объём области подкачки 2-3ГБ с последующим уточнением по итогам эксплуатации. Если предполагается использовать режим сна (hibernation или suspend to disk) с сохранением образа оперативной памяти, то нужный объём зависит от объёма оперативной памяти, и в таком случае хорошим первоначальным вариантом размера области подкачки является объём, равный объёму оперативной памяти плюс 2-3ГБ, а в при недостатке выделенной области использовать дополнительные области, размещаемые в файлах (порядок подключения и отключения файловых областей подкачки см. ниже).

Основным параметром настройки подкачки является значение параметра ядра vm.swappiness, определяющее объем свободной памяти (в процентах), при котором начинается вытеснение страниц. Проверить значение этого параметра можно командой

sudo sysctl vm.swappiness

Как создать и подключить файл подкачки SWAP

Проверка наличия свопа в системе

Для начала, нужно убедиться, что своп ещё не подключен:

swapon -s

Если команда выдала пустой результат или что-то навроде:

Filename                Type        Size    Used    Priority

— значит, своп, скорее всего отсутствует.

Дополнительно проверим командой:

free -m

Проверка наличия свободного места на диске

Теперь, надо проверить, сколько свободного места есть на диске:

df -h

В результате, мы увидим что-то подобное:

:~# df -h
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/vda1           30G          20G  9,0G           66% /
udev                10M            0   10M            0% /dev
tmpfs              403M          41M  362M           11% /run
tmpfs             1006M         336K 1005M            1% /dev/shm
tmpfs              5,0M            0  5,0M            0% /run/lock
tmpfs             1006M            0 1006M            0% /sys/fs/cgroup
tmpfs             1006M         492K 1005M            1% /tmp

Как мы видим, доступно 9 гигабайт дискового пространства — вполне достаточно, чтобы создать своп-файл.

Какого размера создать swap

Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.

Создание файла SWAP

Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:

Быстрый способ
Используем :
fallocate -l 4G /swapfile

Результатом будет пустая строка, это нормально.
В отличие от , результат будет получен почти сразу, и я рекомендую именно его.

Традиционный, медленный способ
Или используем команду:
dd if=/dev/zero of=/swapfile bs=1G count=4

Синтаксис команды простой:

  • dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
  • if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
  • of=/swapfile — указывает путь назначения, куда копируем данные;
  • bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: — гигабайт, — мегабайт, — килобайт, и так далее;
  • count=4 — сколько блоков размером с будет создано, в нашем случае 4.

Теперь, когда файл создан, проверим результат:

ls -lh /swapfile

В результате увидим:
Как видим, файл создался верно и с нужным объёмом.

Как подключить SWAP файл

Для начала, ограничим права доступа к вновь созданному файлу.

chmod 600 /swapfile

Проверим результат:

ls -lh /swapfile

В результате, мы должны увидеть подобное:
Права прописаны верно.

Теперь нужно сделать из файл подкачки:

mkswap /swapfile

В результате, увидим примерно следующее:

Теперь, файл готов в роли свопа. Подключим его к системе:

swapon /swapfile

Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:

swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        4193300  0       -1

Своп также будет виден в стандартных командах:

free -m
             total       used       free     shared    buffers     cached
Mem:          2010        1887       122          0          5         30
-/+ buffers/cache:         827       1183
Swap:         4095          0       4095

Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.

Добавление свопа в автозагрузку

Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в :

echo "/swapfile    none    swap    sw    0    0" >> /etc/fstab

Теперь система знает, где и как при перезагрузке искать и подключать своп.
Проверить, подключен ли своп в автозагрузке, можно с помощью редактора:

nano /etc/fstab

Файл подкачки (Swap file)

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

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

Здесь: /swapfile — имя файла подкачки, а число 1048576 — это размер файла в
килобайтах (т.е. 1Гб)
Подготавливаем файл подкачки при помощи команды mkswap, также как поступали
с разделом, но на этот раз указываем имя файла:

Аналогично монтируем его командой swapon:

Строка в файле /etc/fstab для файла подкачки выглядит так:

Конкретный вопрос: Сколько оперативной памяти вы используете?

Нет единого строгого и быстро применяемого правила, которое бы показало вам, какого размера вам нужен файл подкачки страниц или раздел swap. Ответ зависит от того, что вы делаете на вашем компьютере и сколько памяти вы используете. Например, если у вас есть 8 Гб памяти, но вы никогда не используете больше, чем 8 Гб, вы могли бы вообще обойтись без использования страниц подкачки или раздела swap — но, скорее всего, вам, в конечном итоге, потребуется файл или раздел размером более 8 Гб. С другой стороны, у вас, возможно, есть компьютер с 64 Гб памяти и он может регулярно работать с наборами данных размером в 100 Гб. Тогда вам, вероятно, захочется иметь на всякий случай файл подкачки размером по крайней мере в 64 Гб. Так для компьютера с 8 Гб оперативной памяти может не потребоваться файл подкачки, а компьютеру с 64 Гб оперативной памяти, возможно, потребуется огромный файл подкачки. Все зависит от того, что делает компьютер.

Большинство не сможет предсказать, какого размера может потребоваться файл подкачки страниц или раздел swap. Даже если вы прямо сейчас посмотрите, сколько используется памяти, никто не знает, сколько вашим программам потребуется памяти через неделю или через месяц.

Размер swap файла в Linux

Существует сразу несколько вариантов, позволяющих увеличить файл подкачки linux или уменьшить его

Однако, прежде чем их рассмотреть, необходимо напомнить об одном очень важном моменте:. Когда вы полностью отключаете файл подкачки, ваша операционная система использует только ОЗУ и в случае ее нехватки это может привести к полной остановке работы компьютера

Система просто зависнет

Когда вы полностью отключаете файл подкачки, ваша операционная система использует только ОЗУ и в случае ее нехватки это может привести к полной остановке работы компьютера. Система просто зависнет.

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

Вторым этапом меняем размер файла подкачки, воспользовавшись командой, приведенной ниже. При этом размер вашего swap файла нужно указать вместо параметра 2G (2 гигабайта):

Теперь форматируем полученный файл в файловую систему swap:

А затем включаем его обратно:

При этом операционная система Linux позволяет использовать сразу несколько swap.

Размещение областей подкачки: дисковый раздел или файл?

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

Настройка swappiness

Дальше будет рассмотрена настройка swap linux. У файла подкачки существуют параметры, которые сообщают ОС, как часто его нужно использовать. Это явление называется «свопингом» и может иметь значение в пределах 0 — 100. Если это значение ближе к 100, ядро будет перемещать в раздел подкачки больше информации чтобы освободить память. При значениях ближе к нулю, система будет использовать подкачку только при крайней необходимости.

К примеру, в версии Ubuntu Linux для рабочего стола устанавливается параметр 60, а в серверных редакциях операционной системы — 1. Для того чтобы проверить, какой параметр используется в нашей ОС, вводим в терминал такую команду:

Как видите, в нашем случае «свопинг» установлен как 60. Если же вы хотите поменять swappiness, можете воспользоваться оператором, цифра в конце которого и будет новым значением:

Как и в случае с конфигурацией файла подкачки, данный параметр изначально будет временным и обнулится при следующей перезагрузке. Для того чтобы сделать его постоянным, в самом конце файла /etc/sysctl.conf записываем значение vm.swappiness=25.

Для этого можно воспользоваться, например, текстовым редактором, запущенным с администраторскими полномочиями.

Windows может управлять этим автоматически

В Windows файлом подкачки страниц является файл C:\pagefile.sys. По умолчанию Windows автоматически управляет размером этого файла. Сначала он маленький и он может расти ву случае, если это вам нужно. Мы рекомендуем разрешись системе Windows самостоятельно управлять размером файла подкачки страниц. Файл не должен занимать много места на системном диске. Если ваш файл подкачки страниц занимает на системном диске действительно много места, то это потому, что в прошлом вам потребовался большой файл подкачки, и система для вас автоматически увеличила его размер.

Например, в Windows 8.1, имеющей 4 Гб оперативной памяти, наш файл подкачки страниц имеет в настоящее время размер только 1,8 ГБ. Нам не нужно использовать всю оперативную память и Windows до тех пор, пока нам не потребуется больше памяти, использует небольшой файл подкачки страниц.

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

Если вы хотите самостоятельно установить размер файла, что делать не рекомендуется, обязательно имейте в виду то, что действительно имеет значение именно то, сколько памяти используется, а не только то, каков размер оперативной памяти. В документации Microsoft указывается, что:

«Причина, по которой выбирается размер файла подкачки страниц, не изменилась. Его размер всегда выбирался для поддержки использования аварийного дампа системы, если это было необходимо, или преодоления ограничений системы в случае, если требовалось это. Например, если установлен большой объем физической памяти, то для того, чтобы поддержать работу систему в момент пиковой нагрузки, файл подкачки станиц может не потребоваться. Для того, чтобы это сделать может быть достаточно имеющейся физической памяти».

Другими словами, если говорить о том, сколько памяти вам, на самом деле, нужно, это когда из-за имеющегося объема памяти в системе возникают ограничения.

Что происходит с использованием swap и без него

докладе про cgroup v2

Без конкуренции или с малой конкуренцией за память

  • При наличии swap: мы можем положить в swap анонимную память, которая редко используется и нужна только в небольшой части жизненного цикла процесса. Это позволяет использовать данную память для улучшения коэффициента попаданий в кэш и других оптимизаций.
  • Без swap: не можем складывать в swap редко используемую анонимную память, поскольку она вынуждена храниться только в памяти. Не факт, что это сразу приведёт к проблеме, однако в некоторых рабочих нагрузках производительность может упасть из-за устаревших анонимных страниц, забирающих место у более важных задач.

С умеренной или высокой конкуренцией за память

  • При наличии swap: у всех типов памяти одинаковая вероятность высвобождения. Это означает большую вероятность успешного высвобождения страниц — мы можем высвобождать страницы, которые не будут быстро снова приводить к отказу (к пробуксовке ).
  • Без swap: анонимные страницы ограничены памятью, т.к. не имеют альтернатив для хранения. Вероятность успешного долгосрочного высвобождения страниц ниже, поскольку оно доступно только для некоторых типов памяти. Риск пробуксовки страниц выше. Случайный читатель может подумать, что так всё равно будет лучше, поскольку не случится нагрузки на ввод/вывод диска, но это не так: мы попросту переносим disk I/O из-за swapping’а на сброс горячего страничного кэша и сегментов кода, которые нам скоро понадобятся.

При временных всплесках в потреблении памяти

  • При наличии swap: устойчивость к временным всплескам выше, однако в случае резкой нехватки памяти время между пробуксовкой и работой OOM killer может вырасти. Нам лучше видны причины нагрузки на память и мы можем более рационально повлиять на них, можем осуществить контролируемое вмешательство.
  • Без swap: OOM killer вызывается быстрее, поскольку анонимные страницы ограничены памятью и не могут быть высвобождены. Мы скорее столкнёмся с пробуксовкой, однако время между ней и OOMing’ом сократится. Будет лучше или хуже — зависит от конкретного приложения. Например, основанное на очередях приложение может захотеть потребовать такого быстрого перехода от пробуксовки к OOMing’у. Тем не менее, всё равно уже слишком поздно для полезных действий — OOM killer вызывается только в случаях резкой нехватки памяти. Вместо того, чтобы полагаться на такое поведение, в первую очередь лучше позаботиться о более оппортунистическом подходе (т.е. направленном на следование своим интересам — прим. перев.) к убиванию процессов при достижении состояния конкуренции за память.

Дополнительные настройки

Вы можете контролировать интенсивность использования пространства подкачки в Ubuntu с помощью параметра ядра swappiness:

По умолчанию установлено значение 60. Если это значение ближе к 100, система будет пытаться поместить в подкачку больше данных и сберечь память, при значениях близких к нулю, ядро не переносит данные на диск, если в этом нет крайней необходимости. Этот вариант может сделать систему быстрее, особенно актуально для домашних компьютеров.

Чтобы установить значение 10 выполните:

А для сохранения этой настройки после перезагрузки:

Другой параметр, который влияет на количество используемой памяти — это vfs_cache_pressure. Он указывает системе какое время нужно хранить открытые файлы в кэше оперативной памяти. Значение 100 заставляет систему удалять такие файлы очень быстро, 0 — держать их в памяти как можно дольше. Посмотрите текущее состояние:

Чтобы хранить файлы дольше, можно установить значение в 50:

Создание SWAP файлаНаверх

  1. Создаем файл необходимого размера для swap области, где /home/swap-tmp — это имя и путь файла, а count=1024K его размерв, в данном случае — 1024 Мб):
    # sudo dd if=/dev/zero of=/home/swap-tmp bs=1024 count=1024K
    На экране получим:

    #sudo dd if=/dev/zero of=/home/swap-tmp bs=1024 count=1024K1048576+0 записей считано1048576+0 записей написаноскопировано 1073741824 байта (1,1 GB), 137,509 c, 7,8 MB/c

  2. Далее производим запись в начало файла системную информацию, которая будет используется ядром системы для работы с файлом подкачки:
    # sudo mkswap /home/swap-tmp
    После окончания операции на экране появится:

    # sudo mkswap /home/swap-tmpУстанавливается пространство для свопинга версии 1, размер = 1073737 кБбез метки, UUID=54c60583-e61a-483a-a15c-2f1be966db85

  3. Следующим шагом активируем только что созданный SWAP файл:
    # sudo swapon /home/swap-tmp
    Для просмотра результата просматриваем все объекты, которые используются для размещения виртуальной памяти:
    # cat /proc/swaps
  4. После перезагрузки системы SWAP файл необходимо активировать снова или добавить строчка для автоматической загрузки в файл fstab.

    Редактировать файл fstab можно самостоятельно или командой, которая добавляет в конец файла fstab строку /home/swap-tmp swap swap defaults 0 0:

    # echo «/home/swap-tmp swap swap defaults 0 0» | sudo tee -a /etc/fstab
    Тоже самое действие но добовление через UUID, который присваивается в пункте 2:
    # echo «UUID=54c60583-e61a-483a-a15c-2f1be966db85 swap swap defaults 0 0» | sudo tee -a /etc/fstab

Создание SWAP-файла

Создадим файл c именем swap размером 4 G в папке корне системы /:

$ sudo dd if=/dev/zero of=/swap.img bs=1024 count=4000000
4000000+0 записей получено
4000000+0 записей отправлено
4096000000 байт (4,1 GB, 3,8 GiB) скопирован, 45,6991 s, 89,6 MB/s

1
2
3
4

$sudo dd if=devzero of=swap.img bs=1024count=4000000

4000000+записейполучено

4000000+записейотправлено

4096000000байт(4,1GB,3,8GiB)скопирован,45,6991s,89,6MBs

Форматируем файл в формат свопа:

$ sudo mkswap /swap.img
mkswap: /swap.img: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 3,8 GiB (4095995904 bytes)
без метки, UUID=6a46beca-c117-4c53-8b05-3641fc85b7e1

1
2
3
4

$sudo mkswapswap.img

mkswapswap.imginsecure permissions0644,0600suggested.

Setting up swapspace version1,size=3,8GiB(4095995904bytes)

безметки,UUID=6a46beca-c117-4c53-8b05-3641fc85b7e1

Подключаем файл к системе:

$ sudo swapon /swap.img
swapon: /swap.img: insecure permissions 0644, 0600 suggested.

1
2

$sudo swaponswap.img

swaponswap.imginsecure permissions0644,0600suggested.

Проверяем результат работы:

$ sudo swapon -s
Имя файла Тип Размер Исп-но Приоритет
/swap.img file 3999996 0 -2

1
2
3

$sudo swapon-s

ИмяфайлаТипРазмерИсп-ноПриоритет

swap.img                               file3999996-2

Сделаем чтобы swap монтировался при загрузке. Для этого добавляем в fstab необходимый параметр:

$ nano /etc/fstab

# Подключим swap при загрузке
/swap.img swap swap defaults 0 0

1
2
3
4

$nanoetcfstab

 
# Подключим swap при загрузке

swap.img swap swap defaults

Сохраняем файл и перезагружаемся.

$ sudo reboot

1 $sudo reboot

Проверяем:

$ swapon -s
Имя файла Тип Размер Исп-но Приоритет
/swap.img file 3999996 0 -2

1
2
3

$swapon-s

ИмяфайлаТипРазмерИсп-ноПриоритет

swap.img                               file3999996-2

Размер

В Интернете можно найти множество рекомендаций по определению размера SWAP, однако универсального ответа не существует.

При определении размера SWAP следует учесть следующие аспекты:

  1. Каков размер оперативной памяти?
  2. Какие приложения будут использоваться?
  3. Будет ли вестись работа с секретными данными?
  4. Нужен ли режим сна (suspend to disk)?

В зависимости от ответов на эти вопросы рекомендации по размеру SWAP будут значительно различаться.

При работе с секретными (зашифрованными) данными стоит либо шифровать SWAP, либо рассмотреть вариант с отказом от SWAP вовсе (зависит от размера оперативной памяти). Стоит также рассмотреть вариант с шифрованием всего диска.

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

Ключевым остается вопрос “Сколько?”. Старые версииUNIX-подобных операционных систем (Sun OS, Ultrix) официально требовали своп в два или три раза больше чем ОЗУ. Современные системы, например Linux, уже не требуют такого объема, но вы всегда можете сконфигурировать и больше. Со временем выработались некоторые негласные правила:

  1. для настольных ПК: swap = 2 * ОЗУ
  2. для сервера: swap = 1/2 * ОЗУ
  3. для старых машин с малым объемом ОЗУ: можно сделать гигабайт и больше

В ядре Linux версии 2.6 добавился новый параметр свопа — swappiness. Он принимает значения от 0 до 100. Т.е. грубо говоря — это эффективность своппинга, чем выше значение, тем больше страниц приложения стараются выгрузить в своп. Один из главных майнтенеров ядра Andrew Morton сказал, что он на своем домашнем ПК использует swappiness=100. Он считает, что это не правильно, уменьшать возможности ядра к своппингу.

Но как было сказано в начале, если время между выгрузкой и загрузкой страниц больше, чем время которое нужно программе, то это лишнии потери времени. По умолчанию swappiness равен 60. Вы можете временно (до следующей перезагрузки системы) изменить это следующей командой:

echo 50 > /proc/sys/vm/swappiness 

TL;DR

  • Swap — достаточно важная часть хорошо функционирующей системы. Без него сложнее достичь разумного управления памятью.
  • Swap нужен не столько для срочного получения памяти, сколько для ровного и эффективного высвобождения памяти. Использовать его в качестве «срочной памяти» в общем случае очень вредно.
  • Отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память — дисковый I/O просто перемещается с анонимных страниц на файловые. Это не только может быть менее эффективным, поскольку остаётся меньший пул страниц, доступных для высвобождения, но и само по себе может способствовать появлению этой высокой конкуренции.

Преимущества SWAP

Экономия бюджета
Допустим, рассчитано, что под работу сайта необходимо 2 гигабайта оперативной памяти. Однако, в зависимости от всплесков трафика, активности пользователей или особенностей работы проекта в моменты пиковой нагрузки оперативной памяти может не хватать, что, в свою очередь, может вызывать сбои в работе. Можно решить проблему, докупив оперативную память на 2-4 гигабайта, но тогда большую часть времени она будет простаивать вхолостую. В таком случае, может помочь простое подключение свопа на 4 гигабайта — вы выделяете место на диске под своп, и он берёт на себя роль помощника оперативной памяти.
Теперь сравним:
Сравнение стоимости оперативной памяти и SSD
(цены актуальны на 7 июля 2017 года)
Оперативная память, в среднем за 1 гигабайт 100 рублей в месяц 170 рублей в месяц
SSD, в среднем за 1 гигабайт 10 рублей в месяц 13 рублей в месяц

Как видно из таблицы, экономия выйдет примерно в 10 раз.

Другие способы проверить использование свопа в Linux

Наш любимый способ проверить использование свопа в Linux – использовать команду swapon. Это команда, предназначенная для обработки подкачки памяти. Помимо предоставления точной информации об используемом пространстве подкачки, он также сообщает вам, является ли пространство подкачки разделом или файлом подкачки.

Вы можете использовать это так:

swapon --show

Как видно из вывода, общее пространство подкачки составляет 14,9 ГБ (а не 14 ГБ, как показала свободная команда). Используется 1,1 ГБ, это раздел подкачки, а не файл подкачки.

NAME           TYPE       SIZE USED PRIO
/dev/nvme0n1p4 partition 14.9G 1.1G   -2

Использование файла подкачки – лучшая идея, потому что вы легко можете увеличить размер подкачки в Linux. Изменение раздела подкачки не очень хорошая идея.

Другой способ получить информацию о подкачке памяти – использовать файл /proc/meminfo. В каталоге proc в иерархии файловых систем Linux хранится информация об использовании системы для запущенных процессов.

cat /proc/meminfo | grep -i swap

Вот вывод:

SwapCached:       164116 kB
SwapTotal:      15625212 kB
SwapFree:       13714756 kB

Вы также можете проверить использование подкачки в Linux с помощью top, htop или любого другого инструмента мониторинга системы.

Варианты размещения SWAP

Вариантов несколько:

  • на разделе диска,
  • в файле,
  • или в оперативной памяти использую zRAM.

Исторически в Linux SWAP размещался на разделе, но в современных дистрибутивах производительность SWAP-файла не уступает SWAP-разделу и это весьма радует.

SWAP-раздел

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

SWAP-файл

Использование файла очень удобно особенно когда нет точного понимания какие будут окончательные аппаратные параметры системы. Файл можно создать в любом удобном месте и необходимым вам размером. Ниже я расскажу как это сделать.

ZRAM и ZSWAP

Вариант с использованием этих вариантов требует наличие хорошего опыт в использовании Linux систем. На мой взгляд данный способ имеет смысл использовать с хорошим знанием системы на которой это будет работать.

ZRAM — это модуль ядра Linux, позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз. ZRAM создает сжатое блочное устройство в ОЗУ которое чаще всего используется как swap. При этом степень сжатия данных получается в среднем 3:1. Это означает что на 1 гигабайт подкачки будет использовано в 333 мегабайт физической памяти.

ZSWAP — отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные.  По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит свопинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш.

Недостатки SWAP

Медленная работа

Если файл или раздел свопа хранится на HDD (жёстком диске), то скорость чтения данных с него намного меньше, чем из оперативной памяти. Получше дела обстоят с SSD (твёрдотельным накопителем), однако, надо понимать, что поиск и чтение данных происходит через оперативную память, что, в свою очередь, всё равно увеличивает время отклика. Поэтому, если Вы решили сэкономить на оперативной памяти, полностью положившись на SWAP, то я категорически не рекомендую так делать.

Необходимо наличие свободного места на диске
Вам необходимо зарезервировать свободное место на диске под своп, иначе стабильность работы не гарантируется. Это не то, чтобы недостаток свопа, просто его надо учитывать и помнить о нём.

Swap partition, своп-раздел

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

Каждая строчка в этом списке описывает имеющиеся у вас своп пространства. В поле “Type” указывается тип пространства: partition (раздел) или file (файл). Поле “Filename” показывает местоположение свопа. Далее идет общий размер свопа и сколько сейчас используется. В последнем поле указан приоритет, т.е. какие пространства системе использовать вначале. Стоит отметить, что если примонтировать несколько своп-простанств, расположенных на разных жестких дисках, и выставить им одинаковый приоритет, то Linux будет равномерно распределять страницы памяти по ним, что приведет к существенному увеличению производительности системы.

Перед тем как добавить новый своп-раздел, необходимо приготовить для него место. Для начала убедитесь в том, что раздел помечен как swap. Для этого используйте следующую команду:

fdisk -l /dev/hdb 

Замените /dev/hdb на на путь к устройству где будет расположен своп. Результат должен выглядеть примерно так:

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

Если раздел не помечен как swap, то используйте программу fdisk с ключом t, будьте осторожны во время этой процедуры, а то останетесь без своего линукса и других ОС, проверьте раздел на наличие нужной информации перед тем, как сделать из него swap.

Как только раздел помечен как своп, необходимо подготовить, для этого используется следующая команда:

mkswap /dev/hdb1 
swapon /dev/hdb1 

Для того что бы новый своп автоматически монтировался при старте системы, необходимо внести некоторые изменения в файл /etc/fstab, в котором содержатся все файловые системы и свопы, монтирующиеся при старте. Формат файла следующий:

/dev/hdb1 none swap sw 0 0 

Назначение файла подкачки страниц или раздела swap

Во-первых, давайте вспомним о действительном назначении файла подкачки страниц в Windows или раздела swap в Linux. В обоих случаях вашему компьютеру предоставляется дополнительная рабочая память. Например, если у вашего компьютера есть 2 Гб оперативной памяти и вы открываете большое количество программ или файлов, компьютеру, возможно, потребуется в рабочей памяти хранить 3 Гб данных. Компьютер запоминает этот дополнительный 1 Гб данных в файле подкачки страниц или разделе swap. Файл подкачки страниц или раздел swap выступают в качестве области «переполнения», в которой находятся такие дополнительные данные. Ваш компьютер автоматически передает эти данные обратно в оперативную память, когда они должны использоваться, и перемещает эти данные в файл подкачки страниц или раздел swap в случае, когда эти данные не используются.

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

В большинстве приложений предполагается, что они получать столько памяти, сколько они запросят. Если ваша оперативная память занята и у вас нет файла подкачки, а вы открываете еще одну программу, эта программа, скорее всего, работать не будет. Когда файл подкачки имеется, то с программами, которым требуется дополнительная память, такого не произойдет.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: