Difference between revisions of "Swap/ru"
Views
Actions
Namespaces
Variants
Tools
(Created page with "Эти команды создают пустой файл подкачки, отключают COW для этого файла и обеспечивают отключени...") |
(Updating to match new version of source page) |
||
(56 intermediate revisions by 2 users not shown) | |||
Line 16: | Line 16: | ||
Эта статья старается быть максимально полной, но еще больше информации можно найти в [[ | Эта статья старается быть максимально полной, но еще больше информации можно найти в [[Swap#See_Also|articles linked below]]. | ||
=Нужна ли мне подкачка= | =Нужна ли мне подкачка= | ||
Line 75: | Line 75: | ||
if [ "$(whoami)" = 'root' ]; then | if [ "$(whoami)" = 'root' ]; then | ||
dmesg | grep "zswap:" | grep --silent "load" | dmesg | grep "zswap:" | grep --silent "load" | ||
if | if [ $? -eq 0 ]; then | ||
# zswap is active | # zswap is active | ||
echo "zswap information:" | echo "zswap information:" | ||
Line 81: | Line 81: | ||
read -n 1 -s -r -p "Press any key to continue" | read -n 1 -s -r -p "Press any key to continue" | ||
else | else | ||
echo "[warning] | echo "[warning] zswap not active. Continuing" | ||
fi | fi | ||
else | else | ||
Line 89: | Line 89: | ||
awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' "$szFile" | awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' "$szFile" | ||
done | sort --key 2 --numeric --reverse | more | done | sort --key 2 --numeric --reverse | more | ||
=Использование раздела подкачки= | =Использование раздела подкачки= | ||
Line 94: | Line 95: | ||
==Создание и включение раздела подкачки== | ==Создание и включение раздела подкачки== | ||
Чтобы создать раздел подкачки - необходимо достаточно нераспределенного дискового пространства для создания дополнительного раздела. Если у вас недостаточно места - перейдите к следующему разделу [[ | Чтобы создать раздел подкачки - необходимо достаточно нераспределенного дискового пространства для создания дополнительного раздела. Если у вас недостаточно места - перейдите к следующему разделу [[#Using_a_Swapfile|Использование_файла_подкачки]]. Раздел подкачки может быть создан в любом инструменте управления дисками / разделами и должен быть установлен как тип {{ic|linuxswap}}. | ||
После создания раздела подкачки Вам нужно инициализировать раздел подкачки с помощью команды {{ic|mkswap}}. Например, если ваш раздел подкачки {{ic|/dev/sda3}} - Вы можете использовать команду: | После создания раздела подкачки Вам нужно инициализировать раздел подкачки с помощью команды {{ic|mkswap}}. Например, если ваш раздел подкачки {{ic|/dev/sda3}} - Вы можете использовать команду: | ||
Line 108: | Line 109: | ||
{{note|Обязательно замените /dev/sda3 в приведенных выше командах на ваш реальный раздел подкачки.}} | {{note|Обязательно замените /dev/sda3 в приведенных выше командах на ваш реальный раздел подкачки.}} | ||
{{tip|''Если вы используете HDD'' (вращающийся диск) - поместите раздел подкачки '''в начало диска''', поскольку скорость диска выше на | {{tip|''Если вы используете HDD'' (вращающийся диск) - поместите раздел подкачки '''в начало диска''', поскольку скорость диска выше на внешних дорожках. На SSD это не имеет значения.}} | ||
=Использование файла подкачки= | =Использование файла подкачки= | ||
Line 143: | Line 145: | ||
Начиная с ядра 5.0 и выше, файлы подкачки поддерживаются на btfrs. Они все еще требуют некоторых специальных действий в дополнение к описанным выше. | Начиная с ядра 5.0 и выше, файлы подкачки поддерживаются на btfrs. Они все еще требуют некоторых специальных действий в дополнение к описанным выше. | ||
Перед выполнением шага {{ic| | Перед выполнением шага {{ic|dd}}, описанного выше, Вы должны выполнить эти команды: | ||
sudo truncate -s 0 /swapfile | sudo truncate -s 0 /swapfile | ||
sudo chattr +C /swapfile | sudo chattr +C /swapfile | ||
Line 151: | Line 153: | ||
Эти команды создают пустой файл подкачки, отключают COW для этого файла и обеспечивают отключение сжатия. | Эти команды создают пустой файл подкачки, отключают COW для этого файла и обеспечивают отключение сжатия. | ||
{{tip| | {{tip|Чтобы сохранить совместимость с Timeshift, необходимо создать файл подкачки вне корневого подтома "@". | ||
{{RootCmd|command=btrfs subvolume create /@swapfile}} | {{RootCmd|command=btrfs subvolume create /@swapfile}} | ||
Просто замените /swapfile на /@swapfile/swapfile.}} | |||
==Файл подкачки на ZFS== | ==Файл подкачки на ZFS== | ||
zfs | zfs не поддерживает файлы подкачки, однако вы можете добиться аналогичного преимущества, используя zvol в качестве тома подкачки. | ||
Подробные инструкции о том, как это сделать, можно найти в этом [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device руководстве по ZoL]. | |||
=Настройка и соображения по производительности= | =Настройка и соображения по производительности= | ||
Хотя подкачка кажется отличным способом расширения памяти - чрезмерное её использование приведет к серьезному снижению производительности как уже говорилось ранее. | |||
Существует несколько параметров, которые можно использовать для настройки использования подкачки. Это swappiness и vfs_cache_pressure. Чтобы узнать текущие настройки этих параметров необходимо воспользоваться следующими командами: | |||
cat /proc/sys/vm/swappiness | cat /proc/sys/vm/swappiness | ||
cat /proc/sys/vm/vfs_cache_pressure | cat /proc/sys/vm/vfs_cache_pressure | ||
{{ic|swappiness}} | {{ic|swappiness}} контролирует, насколько вероятно что страница будет передана в своп. Это значение представляет собой процент свободной памяти перед активацией подкачки. Чем меньше значение - тем меньше используется подкачка и тем больше страниц памяти хранится в физической памяти: | ||
* 0 | * 0 отключает подкачку | ||
* 60 | * 60 - это значение по умолчанию, идеально подходящее для сервера, испытывающего недостаток памяти и запускающего много служб. | ||
* 100 | * 100 - это очень агрессивная подкачка. | ||
Для ''большинства'' настольных компьютеров рекомендуемое значение составляет 10: Теоретически это означает, что подкачка начинается только тогда, когда использование оперативной памяти достигает примерно 90 процентов. | |||
{{ic|vfs_cache_pressure}} | {{ic|vfs_cache_pressure}} раньше было процентным значением, которое контролирует тенденцию ядра к ''возврату'' памяти, используемой для кэширования объектов каталогов и инодов, со значением по умолчанию 100 на ядрах <5.4. На ядрах >=5.4 значение может быть увеличено до 100. Увеличение этого значения увеличит скорость удаления этих объектов из кэша оперативной памяти. Уменьшение этого значения позволит этим объектам дольше кэшироваться в памяти, потребляя со временем дополнительную оперативную память. В зависимости от конкретной рабочей нагрузки - слишком сильное увеличение или уменьшение этого значения может оказать значительное негативное влияние на производительность системы. Чтобы найти подходящий баланс необходимо поэкспериментировать, а значение по умолчанию является разумным. В целом, чаще всего оптимизируют swappiness, прежде чем экспериментировать с vfs_cache_pressure. | ||
Для установки этих значений вы можете использовать команду {{ic|sysctl}}. Например, чтобы установить значение swappiness равным 10, вы должны использовать: | |||
sudo sysctl vm.swappiness=10 | sudo sysctl vm.swappiness=10 | ||
''' | '''Не существует заранее определенного ответа на вопрос об оптимальных значениях этих параметров.''' Необходимо поэкспериментировать чтобы найти оптимальную конфигурацию для вашего конкретного оборудования и рабочей нагрузки. | ||
=Смотрите также= | =Смотрите также= | ||
* | * Страница на Arch Wiki про [https://wiki.archlinux.org/index.php/Swap swap] | ||
* | * Страница на Arch Wiki про [https://wiki.archlinux.org/index.php/Zswap zswap]. | ||
* | * Документация ядра Linux про [https://www.kernel.org/doc/Documentation/vm/zswap.txt zswap] | ||
* | * Доументация ядра Linux про [https://www.kernel.org/doc/Documentation/sysctl/vm.txt swappiness и vfs_cache_pressure] | ||
* | * Руководство по ZFS в Linux по [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device разделам Swap] | ||
[[Category:Contents Page{{#translation:}}]] | [[Category:Contents Page{{#translation:}}]] |
Latest revision as of 04:38, 31 July 2023
Обзор
Пространство подкачки используется для расширения объема памяти (RAM), доступной для запуска программ.
- Без пространства подкачки, если у вас закончится память, приложения "завершатся", вплоть до краха всей системы.
- При наличии в системе пространства подкачки ядро может забирать у неактивных приложений/служб реже используемые страницы памяти и записывать их на диск ("своппинг"), позволяя активным приложениям получить больше реальной оперативной памяти.
В Manjaro существует три различных способа управления свопом:
- Раздел подкачки
- Файл подкачки
- zswap
Эта статья старается быть максимально полной, но еще больше информации можно найти в articles linked below.
Нужна ли мне подкачка
На этот вопрос нельзя ответить, не изучив вашу конфигурацию, и даже при большом количестве доступной памяти она часто используется для подстраховки или даже иногда из-за специфических требований приложения, поэтому ознакомьтесь со следующим неполным списком:
- Если Вы используете гибернацию: да - Вам нужна подкачка!
- Если у Вас есть службы, которые не всегда активны, но все равно постоянно работают: да - Вам нужна подкачка!
- Если у Вас есть приложение, которое выделяет виртуальную память непосредственно для временного хранения вместо оперативной памяти: да - Вам нужна подкачка!.
- Если у Вас есть приложение, у которого есть утечка памяти: да - Вам нужна подкачка!
- Если у вас есть сервер с 1 ТБ оперативной памяти, который вы используете в качестве рабочего стола без приложений, выделяющих виртуальную память или имеющих утечки памяти: нет - Вам не нужна подкачка!.
Сколько подкачки мне нужно
Необходимый объем подкачки сильно зависит от специфики приложений и рабочей нагрузки. Без мониторинга использования в течение определенного периода времени не существует универсальной формулы для определения объема подкачки. Разумно было бы начать с этого:
- При объеме физической памяти (RAM) менее 4 ГБ настоятельно рекомендуется чтобы пространство подкачки, как минимум, было равно объему RAM. Также рекомендуется, чтобы пространство подкачки было максимум в два раза больше объема оперативной памяти, в зависимости от объема дискового пространства, доступного для системы, из-за уменьшающейся отдачи.
- Для более современных систем (>4 ГБ) пространство подкачки должно быть как минимум равно ROUNDUP(SQRT(RAM)). Т.е. квадратный корень из объема вашей оперативной памяти, округленный до следующего ГБ. Однако, если вы используете спящий режим, вам нужен минимум размер физической памяти (RAM) плюс ROUNDUP(SQRT(RAM)). Максимум, опять же, вдвое больше объема ОЗУ, опять же из-за убывающей отдачи.
- Единственным недостатком наличия большего пространства подкачки, чем вы будете реально использовать, является то, что дисковое пространство, которое вы резервируете под него, не может быть использовано для приложений или системных данных.
"Уменьшающаяся отдача" означает, что если Вам нужно под подкачку больше места чем в два раза по отношению к оперативной памяти, то лучше добавить больше оперативной памяти, так как доступ к жесткому диску (HDD) примерно на 10³ медленнее, чем к оперативной памяти, поэтому то, что заняло бы 1 секунду, может занять более 15 минут! А на твердотельном накопителе (SSD) та же операция, которая заняла бы 1 секунду в оперативной памяти, займет около 1 минуты!
Принимая во внимание все вышеперечисленное - мы получаем следующую таблицу: (последние 3 столбца обозначают пространство подкачки)
RAM Без гибернации С гибернацией Максимум 1GB 1GB 2GB 2GB 2GB 2GB 3GB 4GB 3GB 3GB 5GB 6GB 4GB 4GB 6GB 8GB
RAM Без гибернации С гибернацией Максимум 5GB 2GB 7GB 10GB 6GB 2GB 8GB 12GB 8GB 3GB 11GB 16GB 12GB 3GB 15GB 24GB 16GB 4GB 20GB 32GB 24GB 5GB 29GB 48GB 32GB 6GB 38GB 64GB 64GB 8GB 72GB 128GB 128GB 11GB 139GB 256GB 256GB 16GB 272GB 512GB 512GB 23GB 535GB 1TB 1TB 32GB 1056GB 2TB 2TB 46GB 2094GB 4TB 4TB 64GB 4160GB 8TB 8TB 91GB 8283GB 16TB
Отображение информации о подкачке
Команда swapon
отобразит текущую информацию о подкачке. Например:
swapon NAME TYPE SIZE USED PRIO /dev/sda7 partition 20G 44.3M -2
Следующий сценарий будет:
- показать, активен zswap или нет, и если активен, указать параметры zswap при запуске с помощью команды
sudo
. - отобразить список всех приложений / служб, занимающих подкачку, и их объем в порядке убывания
#!/bin/bash #Check whether running as root if [ "$(whoami)" = 'root' ]; then dmesg | grep "zswap:" | grep --silent "load" if [ $? -eq 0 ]; then # zswap is active echo "zswap information:" grep --recursive --color=none . /sys/kernel/debug/zswap/ read -n 1 -s -r -p "Press any key to continue" else echo "[warning] zswap not active. Continuing" fi else echo "[warning] Not running as root: skipping zswap info" fi for szFile in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' "$szFile" done | sort --key 2 --numeric --reverse | more
Использование раздела подкачки
Раздел подкачки - это традиционный способ управления подкачкой. В этом сценарии для подкачки создается выделенный раздел (или разделы).
Создание и включение раздела подкачки
Чтобы создать раздел подкачки - необходимо достаточно нераспределенного дискового пространства для создания дополнительного раздела. Если у вас недостаточно места - перейдите к следующему разделу Использование_файла_подкачки. Раздел подкачки может быть создан в любом инструменте управления дисками / разделами и должен быть установлен как тип linuxswap
.
После создания раздела подкачки Вам нужно инициализировать раздел подкачки с помощью команды mkswap
. Например, если ваш раздел подкачки /dev/sda3
- Вы можете использовать команду:
sudo mkswap /dev/sda3
Далее необходимо включить раздел подкачки с помощью команды swapon
. Следуя нашему примеру выше это можно сделать следующим образом:
sudo swapon /dev/sda3
Чтобы гарантировать, что подкачка будет включена при загрузке, мы должны добавить запись в /etc/fstab
. Для этого лучше всего использовать UUID вместо имени устройства. Вы должны добавить строку в fstab вручную или с помощью команды:
sudo bash -c "echo UUID=$(lsblk -no UUID /dev/sda3) none swap defaults 0 0 >> /etc/fstab"
Если Вы хотите иметь более одного раздела подкачки - просто повторите описанные выше шаги для всех дополнительных разделов.
Использование файла подкачки
Использование раздела подкачки имеет один существенный недостаток: Изменение размера swap или добавление swap требует переразметки диска. В текущих ядрах Linux можно использовать файл подкачки вместо выделенного раздела и начиная с ядра 2.6 разница в производительности между ними больше не ощущается.
Создание и включение статического файла подкачки
Сначала создайте и инциализируйте файл для подкачки. Например, чтобы создать файл подкачки размером 4 ГБ необходимо использовать команду:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
Установите соответствующие разрешения на файл. Он должен быть доступен для чтения и записи только root
. Это можно сделать с помощью команды:
sudo chmod 600 /swapfile
Далее нам нужно отформатировать и включить файл подкачки:
sudo mkswap /swapfile
sudo swapon /swapfile
Чтобы гарантировать, что подкачка будет включена при загрузке - мы должны добавить запись в /etc/fstab
. Вам нужно добавить строку в fstab вручную или с помощью команды:
sudo bash -c "echo /swapfile none swap defaults 0 0 >> /etc/fstab"
Файл подкачки на BTRFS
Начиная с ядра 5.0 и выше, файлы подкачки поддерживаются на btfrs. Они все еще требуют некоторых специальных действий в дополнение к описанным выше.
Перед выполнением шага dd
, описанного выше, Вы должны выполнить эти команды:
sudo truncate -s 0 /swapfile sudo chattr +C /swapfile sudo btrfs property set /swapfile compression none
Эти команды создают пустой файл подкачки, отключают COW для этого файла и обеспечивают отключение сжатия.
Просто замените /swapfile на /@swapfile/swapfile.
Файл подкачки на ZFS
zfs не поддерживает файлы подкачки, однако вы можете добиться аналогичного преимущества, используя zvol в качестве тома подкачки.
Подробные инструкции о том, как это сделать, можно найти в этом руководстве по ZoL.
Настройка и соображения по производительности
Хотя подкачка кажется отличным способом расширения памяти - чрезмерное её использование приведет к серьезному снижению производительности как уже говорилось ранее.
Существует несколько параметров, которые можно использовать для настройки использования подкачки. Это swappiness и vfs_cache_pressure. Чтобы узнать текущие настройки этих параметров необходимо воспользоваться следующими командами:
cat /proc/sys/vm/swappiness cat /proc/sys/vm/vfs_cache_pressure
swappiness
контролирует, насколько вероятно что страница будет передана в своп. Это значение представляет собой процент свободной памяти перед активацией подкачки. Чем меньше значение - тем меньше используется подкачка и тем больше страниц памяти хранится в физической памяти:
- 0 отключает подкачку
- 60 - это значение по умолчанию, идеально подходящее для сервера, испытывающего недостаток памяти и запускающего много служб.
- 100 - это очень агрессивная подкачка.
Для большинства настольных компьютеров рекомендуемое значение составляет 10: Теоретически это означает, что подкачка начинается только тогда, когда использование оперативной памяти достигает примерно 90 процентов.
vfs_cache_pressure
раньше было процентным значением, которое контролирует тенденцию ядра к возврату памяти, используемой для кэширования объектов каталогов и инодов, со значением по умолчанию 100 на ядрах <5.4. На ядрах >=5.4 значение может быть увеличено до 100. Увеличение этого значения увеличит скорость удаления этих объектов из кэша оперативной памяти. Уменьшение этого значения позволит этим объектам дольше кэшироваться в памяти, потребляя со временем дополнительную оперативную память. В зависимости от конкретной рабочей нагрузки - слишком сильное увеличение или уменьшение этого значения может оказать значительное негативное влияние на производительность системы. Чтобы найти подходящий баланс необходимо поэкспериментировать, а значение по умолчанию является разумным. В целом, чаще всего оптимизируют swappiness, прежде чем экспериментировать с vfs_cache_pressure.
Для установки этих значений вы можете использовать команду sysctl
. Например, чтобы установить значение swappiness равным 10, вы должны использовать:
sudo sysctl vm.swappiness=10
Не существует заранее определенного ответа на вопрос об оптимальных значениях этих параметров. Необходимо поэкспериментировать чтобы найти оптимальную конфигурацию для вашего конкретного оборудования и рабочей нагрузки.
Смотрите также
- Страница на Arch Wiki про swap
- Страница на Arch Wiki про zswap.
- Документация ядра Linux про zswap
- Доументация ядра Linux про swappiness и vfs_cache_pressure
- Руководство по ZFS в Linux по разделам Swap