Arch linux swap file

Swap (Русский)

Эта страница дает ознакомление с пространством подкачки и подкачкой страниц в GNU/Linux. Охватывает создание, активацию файлов и разделов подкачки.

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

Поддержка подкачки обеспечивается ядром Linux и утилитами в пользовательском пространстве из util-linux пакета.

Contents

Пространство подкачки

Пространство подкачки может быть разделом диска или файлом. Пользователи могут создать пространство подкачки во время установки или позднее в любое желаемое время. Пространство подкачки может быть использовано для двух целей, расширить виртуальную память за пределы установленной оперативной памяти (RAM), а также для сохранения данных при гибернации (suspend-to-disk).

Иногда стоит включать Swap в зависимости от установленной оперативной памяти и количества требований для запуска желаемых программ. Если количество оперативной памяти меньше требуемого, тогда стоит включить подкачку. Это позволяет избежать состояния нехватки памяти (OOM), при котором механизм ядра Linux, OOM Killer, будет автоматически пытаться освободить память, убивая процессы. Чтобы увеличить количество виртуальной памяти до требуемого уровня, добавьте необходимую разницу как пространство подкачки. Например, если программа требует 7,5 GB памяти для запуска, а у вас установлено 4 GB оперативной памяти, добавьте разницу 3,5 GB как подкачку. В будущем добавляйте больше пространства к подкачке, учитывая требования. Это вопрос личных предпочтений если вы считаете, что программы должны быть убиты, вместо включения подкачки. Самый большой недостаток в подкачке это снижение производительности, см. раздел #Производительность

Для проверки статуса подкачки, используйте:

free также покажет недостаток памяти, который может быть исправлен включением или увеличением подкачки.

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

Раздел подкачки может быть создан различными GNU/Linux утилитами разметки. Разделы подкачки обычно обозначаются как тип 82 . Хотя есть возможность использовать разные типы как подкачку, рекомендуется использовать тип 82 , в большинстве случаев systemd, будет автоматически определять его и монтировать (см. ниже)

Для установки раздела как область Linux подкачки, можно использовать mkswap . Например:

Для подключения устройства как подкачку:

Чтобы подключить этот раздел подкачки при загрузке, добавьте запись в fstab:

где может быть получен из команды:

Активация используя systemd

Активация разделов подкачки в systemd базируется на двух различных механизмах. Оба исполняются в /usr/lib/systemd/system-generators . Генераторы запускаются при старте системы и создают нативные systemd юниты для монтирования. Первый systemd-fstab-generator , читает fstab, чтобы генерировать юниты, включая юнит для подкачки. Второй systemd-gpt-auto-generator , осматривает корневой диск, чтобы генерировать юниты. Это операция проходит только на GPT дисках и может идентифицировать разделы подкачки по их тип коду 82 .

Отключение подкачки

Чтобы деактивировать определенное пространство подкачки:

Также можно использовать -a ключ, чтобы деактивировать все пространства подкачки.

С тех пор, как systemd управляет подкачкой, она вновь будет активирована при старте системы, для долговременного отключения автоматической активации найденных пространств подкачки, выполните systemctl —type swap , чтобы найти связанные со .swap юниты и замаскируйте (systemctl mask юнит) их.

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

Как альтернатива к созданию целого раздела, файл подкачки даёт возможность менять свой размер на лету, а также его гораздо легче полностью удалить. Это может быть особенно важно, если дисковое пространство ограничено (например, небольшие SSD)

Вручную

Создание файла подкачки

Использовать под суперпользователем fallocate , чтобы создать файл подкачки размером на свой выбор (M = Mebibytes, G = Gibibytes). Например создание 512 MiB файла подкачки:

Установите права доступа (всеми читаемый файл подкачки это огромная локальная уязвимость)

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

Активируйте файл подкачки:

Читайте также:  Как убрать значок безопасное извлечение устройства windows 10

В завершении, отредактируйте fstab, добавив запись для файла подкачки:

Удаление файла подкачки

Чтобы удалить файл подкачки, сначала нужно отключить подкачку, а затем файл может быть удален:

В завершении, удалите соответствующую запись из /etc/fstab .

Автоматически

systemd-swap

Установить systemd-swap пакет. Установить swapfc_enabled=1 в Swap File Chunked разделе файла /etc/systemd/swap.conf . Start/enable systemd-swap сервис. Посетить страницу авторов на GitHub для получения подробностей и установить рекомендуемую конфигурацию.

Подкачка с USB устройства

Благодаря модульности, предлагаемой Linux, мы можем иметь множество разделов подкачки на различных устройствах. Если у вас полностью заполнен жесткий диск, то можно использовать USB устройство как временный раздел подкачки. Однако, этот метод имеет серьёзные недостатки:

  • USB устройство медленнее чем жесткий диск
  • Flash память имеет ограниченное количество циклов записи. Использование его как раздела подкачки, может быстро убить его.

Чтобы добавить USB устройство как подкачку, сначала необходимо разметить USB флешку для подкачки как описано в секции #Раздел подкачки.

Далее откройте /etc/fstab и добавьте

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

Данная инструкция будет работать и для других устройств хранения, таких как SD карты и т.д.

Шифрование подкачки

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

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

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

Swappiness

Swappiness sysctl параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку наперёд. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах.

Чтобы проверить текущее значение swappiness:

Чтобы временно установить значение swappiness:

Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл sysctl

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

VFS cache pressure

Другой sysctl параметр, который действует на производительность подкачки это vm.vfs_cache_pressure , он контролирует склонность ядра к применению памяти, которая используется для кэширования VFS caches, напротив кэширования страниц и подкачки. Увеличение этого значения увеличивает коэффициент с которым VFS caches применяется[2] [устаревшая ссылка 2020-08-06] . Для подробной информации смотри документацию ядра Linux.

Приоритет

Если у вас больше одного файла или раздела подкачки, вы должны учитывать присвоение приоритетного значения (от 0 до 32767) для каждой области подкачки. Система будет использовать области подкачки с высоким приоритетом, перед использованием областей с низким приоритетом. Например, если у вас быстрый диск ( /dev/sda ) и медленный ( /dev/sdb ), назначьте высокий приоритет для подкачки расположенной на быстром устройстве. Приоритет может быть назначен в fstab как pri параметр:

Или как параметр в swapon —priority

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

Использование zswap или zram

Zswap это особенность ядра Linux, обеспечивающая сжатие обратного кэша для страниц подкачки. Она увеличивает производительность и уменьшает операции ввода/вывода. ZRAM создаёт виртуальный сжатый файл подкачки в памяти, как альтернатива файлу подкачки на диске.

Чередование

Нет необходимости использовать RAID для повышения производительности подкачки. Ядро самостоятельно может чередовать подкачку на нескольких устройствах, если вы присвоите им одинаковый приоритет в /etc/fstab . Для подробной информации смотри The Software-RAID HOWTO.

Источник

Как добавить Swap-файл на облачный сервер Arch Linux

Вступление

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

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

Ядро Linux хранит информацию в участках оперативной памяти, которые называются страницами. Одна программа может занимать огромное количество таких страниц, а значит – много места в RAM. Если новому процессу необходим доступ к физической памяти, создаются новые страницы. Но что если в оперативной памяти не осталось места для новых страниц?

Читайте также:  Запуск perl скрипта linux

Если программа не использует все страницы, выделенные ей в оперативной памяти, они могут быть удалены, после чего пространство перераспределяется. Это происходит потому, что файлы этих страниц при необходимости можно легко восстановить. Например, если программе А было выделено 10 страниц, но она занимает только 7 из них, то 3 страницы могут быть временно удалены и восстановлены тогда, когда они действительно необходимы. Тем временем пространство, занятое этими тремя страницами, может быть использовано другими программами.

Итак, какое же отношение имеет ко всему этому swap?

Иногда системе приходится удалять страницы из оперативной памяти, содержащие данные, которые не могут быть восстановлены в любое время. Информация, хранящаяся на них, не всегда доступна на жестком диске. Когда система удаляет подобные страницы, ей необходимо место, где можно было бы оставить эту важную информацию и не потерять ее. Это место и называется «swap».

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

Проверка swap-пространства

Для выполнения действий, описанных в данном руководстве, необходимо войти в систему как root.

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

swapon -s
swapon: stat failed -s: No such file or directory

Как можно видеть, на данном сервере Arch Linux эта команда не вывела никакого результата. Команда выполнена верно, просто она не обнаружила swap-пространства.

Другой способ проверки swap-пространства выведет более наглядный результат.

free -m
total used free shared buffers cached
Mem: 494 60 434 0 6 28
-/+ buffers/cache: 25 469
Swap: 0 0 0

Как и ожидалось, в итоговом столбце swap равен 0. Это подтверждает результат команды «swapon».

Проверка файловой системы

Существует множество различных мнений по поводу идеального размера swap-области. Чаще всего считается достаточным повторить или удвоить объем имеющейся оперативной памяти (в случае если оперативная память имеет действительно очень большой объем, можно выделить меньшее swap-пространство). В конце концов, все сводится к личным предпочтениям и решение, как правило, зависит от объема доступной оперативной памяти и места на жестком диске.

Данное руководство располагает 512MB ОП и 20GB жёсткого диска. В данном случае удваивать swap-пространство не рекомендуется, так как это займет значительную часть жесткого диска. Лучше повторить объем имеющейся оперативной памяти, то есть, создать 512MB swap-пространства.

Прежде чем создать swap-пространство, нужно убедиться, что на жестком диске достаточно свободного места. Это можно сделать при помощи команды «df».

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda 20G 965M 18G 6% /
dev 240M 0 240M 0% /dev
run 248M 212K 248M 1% /run
tmpfs 248M 0 248M 0% /dev/shm
tmpfs 248M 0 248M 0% /sys/fs/cgroup
tmpfs 248M 0 248M 0% /tmp

В первой строке указано, что из 20GB жесткого диска доступно приблизительно 18GB. Этого места более чем достаточно для создания 512MB swap-пространства.

Создание и активация Swap-файла

Теперь все готово для создания swap-пространства. Руководство рассматривает два разных способа сделать это. Во-первых, можно использовать команду «dd».

dd if=/dev/zero of=/swapfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 1.96268 s, 274 MB/s

Теперь нужно подтвердить, что файл создан верно.

ls -lh /swapfile
-rw-r—r— 1 root root 512M Jun 28 18:41 /swapfile

Как можно видеть, теперь на сервере есть файл размером в 512MB под названием /swapfile. Теперь попробуйте создать swap-файл другим способом. Для начала нужно удалить только что созданный swap-файл.

Программа «fallocate» создает swap-файлы быстрее, чем «dd». Кроме того, ее синтаксис намного легче запомнить.

fallocate -l 512M /swapfile

Теперь можно увидеть снова созданный swap-файл нужного размера.

ls -lh /swapfile
-rw-r—r— 1 root root 512M Jun 28 18:54 /swapfile

Читайте также:  Виртуальный asio микшер для windows 10

На данный момент root-разделе жесткого диска есть файл под названием «swapfile», но система пока что не распознает или не использует его.

free -m
total used free shared buffers cached
Mem: 494 41 453 0 1 13
-/+ buffers/cache: 25 468
Swap: 0 0 0

Пока что это обычный файл. Хотя он и называется «swapfile», Linux еще не знает, что его нужно использовать как swap. Теперь его нужно отформатировать и активировать.

Но сначала нужно выполнить одно важное действие. Нужно изменить привилегии файла таким образом, чтобы только root-пользователь мог читать и писать в нем. Swap-файл, который может читать или писать любой пользователь, является серьезной уязвимостью для безопасности сервера. При запуске команды «ls», можно увидеть, что в данный момент в файле может писать и читать любой пользователь системы. Это нужно изменить.

chmod 600 /swapfile

Затем снова проверьте файл, теперь привилегии должны быть правильными:

ls -lh /swapfile
-rw——- 1 root root 512M Jun 28 18:54 /swapfile

Теперь, когда файл защищен, его можно форматировать.

mkswap /swapfile
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=61f42c98-d1ef-4f27-84c2-713c5f63d434

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

Необходимо проверить, распознается ли файл, и использует ли его система.

free -m
total used free shared buffers cached
Mem: 494 42 452 0 1 14
-/+ buffers/cache: 25 468
Swap: 511 0 511

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

Но это еще не все. Операционная система должна знать, что этот файл безопасен и его можно использовать для swap после каждой перезагрузки.

nano /etc/fstab
# Paste this information at the bottom of the file
/swapfile none swap defaults 0 0

Тонкая настройка Swap

При использовании swap есть целый ряд вещей, которые нужно иметь в виду. Поскольку swap находится на жестком диске, он гораздо медленнее, чем ОЗУ. Это значит, что операционная система должна использовать его только при необходимости. Если страницы будут перемещаться в swap-пространство до того, как оперативная память заполнена, это существенно замедлит работу сервера.

Параметр, отвечающий за частоту перемещения страниц памяти в swap-пространство, называется «swappiness». Его значение может варьироваться от 0 до 100. Близкое к 0 значение говорит системе использовать swap в случае острой необходимости. Значение, близкое к 100, означает, что система будет перемещать страницы заранее. Это может привести к проблемам со скоростью, потому что информацию придется извлекать с жесткого диска вместо оперативной памяти.

Чтобы узнать текущее значение swappiness, введите следующую команду:

cat /proc/sys/vm/swappiness
60

Значение 60 установлено по умолчанию и отлично подходит для VPS. К примеру, значение swappiness для рабочего стола лучше приблизить к 0. Чтобы протестировать разные значения swappiness, используйте «sysctl»:

sysctl vm.swappiness=10
vm.swappiness = 10

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

cat /proc/sys/vm/swappiness
10

Чтобы сделать это значение значением по умолчанию, нужно отредактировать файл «/etc/sysctl.conf».

nano /etc/sysctl.conf
# Search for the vm.swappiness setting. Uncomment and change it as necessary.
vm.swappiness=10

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

Еще один параметр, который нужно подогнать, называется «vm.vfs_cache_pressure». Отредактировав значение «cache pressure», можно изменить предпочтение системы хранить кэш-информацию «inode» и «dentry» по сравнению с другими видами информации. Это значит, что ОС будет дольше хранить информацию о той файловой системе, которая потребляет много ресурсов при просмотре и часто запрашивается. Это, как правило, приводит к росту производительности.

Текущее значение можно увидеть в каталоге /proc.

cat /proc/sys/vm/vfs_cache_pressure
100

Текущее значение выводит информацию «inode» из кэша быстрее, чем нужно. Значение «cache pressure» 50 будет в данном случае намного лучше. Данное значение можно установить таким же образом, что и swappiness.

sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

Опять же, чтобы данное значение оставалось действительным даже после перезагрузки, внесите его в файл «/etc/sysctl.conf».

nano /etc/sysctl.conf
# Search for the vm.vfs_cache_pressure setting. Uncomment and change it as necessary.
vm.vfs_cache_pressure = 50

Это делает значение «cache pressure» постоянным.

Источник

Оцените статью