Manjaro Difference between revisions of "Swap/ru"

Difference between revisions of "Swap/ru"

From Manjaro
(Created page with "''Если вы используете HDD'' (вращающийся диск) - поместите раздел подкачки *в начало диска*, посколь...")
Tags: Mobile web edit Mobile edit
(Updating to match new version of source page)
 
(65 intermediate revisions by 2 users not shown)
Line 16: Line 16:




Эта статья старается быть максимально полной, но еще больше информации можно найти в [[Special:MyLanguage/#See_Also|articles linked below]].
Эта статья старается быть максимально полной, но еще больше информации можно найти в [[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 [[ $? -eq 0 ]]; then
   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] zwap not active. Continuing"
     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:
==Создание и включение раздела подкачки==
==Создание и включение раздела подкачки==


Чтобы создать раздел подкачки - необходимо достаточно нераспределенного дискового пространства для создания дополнительного раздела. Если у вас недостаточно места - перейдите к следующему разделу [[Special:MyLanguage/#Using_a_swap_file|#Using_a_swap_file]]. Раздел подкачки может быть создан в любом инструменте управления дисками / разделами и должен быть установлен как тип {{ic|linuxswap}}.
Чтобы создать раздел подкачки - необходимо достаточно нераспределенного дискового пространства для создания дополнительного раздела. Если у вас недостаточно места - перейдите к следующему разделу [[#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'' (вращающийся диск) - поместите раздел подкачки *в начало диска*, поскольку скорость диска выше на внутренних дорожках. На SSD это не имеет значения.}}
{{tip|''Если вы используете HDD'' (вращающийся диск) - поместите раздел подкачки '''в начало диска''', поскольку скорость диска выше на внешних дорожках. На SSD это не имеет значения.}}
 
=Использование файла подкачки=
=Использование файла подкачки=


Using a swap partition has one major disadvantageChanging the size of swap or adding swap requires repartitioning the disk. In current Linux kernels, it is possible to use a swap file instead of a dedicated partition and as from kernel 2.6 onwards there is no performance difference any more between the two.
Использование раздела подкачки имеет один существенный недостатокИзменение размера swap или добавление swap требует переразметки диска. В текущих ядрах Linux можно использовать файл подкачки вместо выделенного раздела и начиная с ядра 2.6 разница в производительности между ними больше не ощущается.


==Создание и включение статического файла подкачки==
==Создание и включение статического файла подкачки==
{{tip|There is no reason you can't have both a swap partition and a swapfile. This is an easy way to add more swap without repartitioning.}}
{{tip|Нет причин, по которым вы не можете иметь как раздел подкачки, так и файл подкачки. Это простой способ добавить дополнительный раздел подкачки без переразметки.}}




First create and intialize the file to hold the swap. For example, to create a 4GB swapfile, you could use the command:
Сначала создайте и инциализируйте файл для подкачки. Например, чтобы создать файл подкачки размером 4 ГБ необходимо использовать команду:


  sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
  sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress




Set the appropriate permissions on the file. It should be readable and writable only by {{ic|root}}. This can be done with the command:
Установите соответствующие разрешения на файл. Он должен быть доступен для чтения и записи только {{ic|root}}. Это можно сделать с помощью команды:


  sudo chmod 600 /swapfile
  sudo chmod 600 /swapfile




Next we need to format and enable the swapfile:
Далее нам нужно отформатировать и включить файл подкачки:


  sudo mkswap /swapfile
  sudo mkswap /swapfile
Line 134: Line 136:




In order to ensure that the swap is enabled at boot we can add an entry to {{ic|/etc/fstab}}. You can add the line to fstab manually or using the command:
Чтобы гарантировать, что подкачка будет включена при загрузке - мы должны добавить запись в {{ic|/etc/fstab}}. Вам нужно добавить строку в fstab вручную или с помощью команды:


  sudo bash -c "echo /swapfile none swap defaults 0 0 >> /etc/fstab"
  sudo bash -c "echo /swapfile none swap defaults 0 0 >> /etc/fstab"
Line 141: Line 143:
==Файл подкачки на BTRFS==
==Файл подкачки на BTRFS==


As of kernel 5.0 and higher, swapfiles are supported on btfrs.  They still require some special handling in addition to the above steps.
Начиная с ядра 5.0 и выше, файлы подкачки поддерживаются на btfrs.  Они все еще требуют некоторых специальных действий в дополнение к описанным выше.


Prior to running the {{ic|fallocate}} step above, you should run these commands:
Перед выполнением шага {{ic|dd}}, описанного выше, Вы должны выполнить эти команды:
  sudo truncate -s 0 /swapfile
  sudo truncate -s 0 /swapfile
  sudo chattr +C /swapfile
  sudo chattr +C /swapfile
Line 149: Line 151:




These commands create an empty swapfile, disable COW for that file and ensure that compression is disabled.
Эти команды создают пустой файл подкачки, отключают COW для этого файла и обеспечивают отключение сжатия.


{{tip|To stay compatible with Timeshift, it is necessary to create the swapfile outside the root subvolume "@".
{{tip|Чтобы сохранить совместимость с Timeshift, необходимо создать файл подкачки вне корневого подтома "@".
{{RootCmd|command=btrfs subvolume create /@swapfile}}
{{RootCmd|command=btrfs subvolume create /@swapfile}}
Just replace /swapfile with /@swapfile/swapfile.}}
Просто замените /swapfile на /@swapfile/swapfile.}}




==Файл подкачки на ZFS==
==Файл подкачки на ZFS==


zfs doesn't support swapfiles, however you can achieve a similar benefit using a zvol as a swap volume.
zfs не поддерживает файлы подкачки, однако вы можете добиться аналогичного преимущества, используя zvol в качестве тома подкачки.
 
 
Detailed instructions on how to accomplish this can be found in this [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device ZoL guide].
=Автоматизированное управление подкачкой с помощью systemd-swap=
{{note|Using systemd-swap with on btrfs/zfs or with hibernation support requires special handling beyond the scope of this article}}
 
It is possible to automatically manage the size of your swapfile using {{ic|systemd-swap}}.  It can create swap files dynamically based on memory needs.  It is also an easy way to enable/manage [[#Using_zswap_with_systemd-swap|zswap]]
 
==Установка и настройка systemd-swap==
 
First, install and enable {{ic|systemd-swap}}:
pamac install systemd-swap
sudo systemctl enable systemd-swap.service
 
 
Next enable dynamic swap management by creating a file {{ic|/etc/systemd/swap.conf.d/myswap.conf}} with the following parameters:
zswap_enabled=0
zram_enabled=0
swapfc_enabled=1
 
 
If you would prefer a single command to create this file you could use:
sudo bash -c 'echo -e "zswap_enabled=0\nzram_enabled=0\nswapfc_enabled=1" > /etc/systemd/swap.conf.d/myswap.conf'
 
==Удаление другой подкачки==
 
In order for systemd-swap to be effective you need to remove any traditional swap devices you have.
 
 
To display your current swap devices you can use the command {{ic|swapon}}.  For example, my test machine displays the following:
swapon
NAME      TYPE      SIZE USED PRIO
/swapfile file        4G  0B  -2
/dev/sda3 partition 8.4G  0B  -3
 
 
In this example there are two swap devices.  A swapfile and a swap partition.  To turn them off we can use the command {{ic|swapoff}}.
sudo swapoff /swapfile
sudo swapoff /dev/sda3
 
 
Next we need to remove them. 
The swap partition will need to be deleted using your favorite partitioning tool.  You can remove the swapfile by simply deleting it.
sudo rm /swapfile
 
 
We need to also remove any lines related to swap from {{ic|/etc/fstab}}.  Edit the file with an [[Special:MyLanguage/Viewing_and_editing_configuration_files|appropriate text editor]] and remove or comment out the lines for the swap space.  In the example above, we would remove these lines:
UUID=c2430cf1-8ea9-4422-a5c5-5a38779194c3 swap          swap    defaults,noatime 0 2
/swapfile none swap defaults 0 0
 
 
With hibernation configured it will also be necessary to edit {{ic|/etc/default/grub}}. Find and remove option {{ic|<nowiki>resume=UUID=...</nowiki>}} or replace the UUID with a new proper value.  In the example above, we would remove this text:
resume=UUID=c2430cf1-8ea9-4422-a5c5-5a38779194c3
Then run:
sudo update-grub
If removing hibernation entirely then also delete {{ic|resume}} from the {{ic|HOOKS}} line in {{ic|/etc/mkinitpcio.conf}} and run:
sudo mkinitpcio -P
 
 
Next reboot.  After the reboot, when running {{ic|swapon}} you should see something similiar to the following:
NAME                          TYPE SIZE USED PRIO
/var/lib/systemd-swap/swapfc/1 file 512M  0B  -2
 
 
systemd-swap will add and remove swapfiles as your memory usage dictates.
 
{{note|If you don't delete your existing swap partition it will be automatically activated by systemd even though you have removed it from fstab}}
 
 
==Использование zswap с systemd-swap==


zswap is compressed swap kept in RAM. zswap keeps the most frequently used pages in RAM and writes less frequently used pages to the swap space on disk.  In many workloads, this will result in increased swap performance and less wear and tear on SSDs.


To enable zswap with systemd-swap, simply alter the instructions above and set Linux Kernel parameter  zswap_enabled=1
Подробные инструкции о том, как это сделать, можно найти в этом [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device руководстве по ZoL].
=Настройка и соображения по производительности=
=Настройка и соображения по производительности=


Although swap seems like a great way to expand memory, excessive swap use will cause severe performance degradation, as mentioned before.
Хотя подкачка кажется отличным способом расширения памяти - чрезмерное её использование приведет к серьезному снижению производительности как уже говорилось ранее.


There are couple of parameters that can be used to tune swap utilization. These are swappiness and vfs_cache_pressure. To see your current settings for these you can use the following commands:
Существует несколько параметров, которые можно использовать для настройки использования подкачки. Это 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}} controls how likely a page is to be transferred to swap. This value represents the percentage of the free memory before activating swap. The lower the value, the less swapping is used and the more memory pages are kept in physical memory where:
{{ic|swappiness}} контролирует, насколько вероятно что страница будет передана в своп. Это значение представляет собой процент свободной памяти перед активацией подкачки. Чем меньше значение - тем меньше используется подкачка и тем больше страниц памяти хранится в физической памяти:
* 0 disables swap
* 0 отключает подкачку
* 60 is the default value which is ideal for a server that is memory-starved and running a lot of services
* 60 - это значение по умолчанию, идеально подходящее для сервера, испытывающего недостаток памяти и запускающего много служб.
* 100 is very aggressive swapping.
* 100 - это очень агрессивная подкачка.


For ''most'' desktop computers the recommended value is 10: Theoretically, this means to only start swapping when RAM usage reaches around 90 percent.
Для ''большинства'' настольных компьютеров рекомендуемое значение составляет 10: Теоретически это означает, что подкачка начинается только тогда, когда использование оперативной памяти достигает примерно 90 процентов.


{{ic|vfs_cache_pressure}} used to be a percentage value that controls the tendency of the kernel to ''reclaim'' the memory which is used for caching of directory and inode objects with a default value of 100 on Kernels <5.4. On Kernels >=5.4 can be increased beyond 100.  Increasing this value will increase the rate in which these objects are removed from the RAM cache. Decreasing it will allow these objects to be cached in memory longer, consuming additional RAM over timeDepending on your specific workload, increasing or decreasing this value too far can have significant negative impacts on system performanceExperimentation is needed to find the appropriate balance and the default value is reasonable. In general, it is more common to optimize swappiness before experimenting with vfs_cache_pressure.
{{ic|vfs_cache_pressure}} раньше было процентным значением, которое контролирует тенденцию ядра к ''возврату'' памяти, используемой для кэширования объектов каталогов и инодов, со значением по умолчанию 100 на ядрах <5.4. На ядрах >=5.4 значение может быть увеличено до 100.  Увеличение этого значения увеличит скорость удаления этих объектов из кэша оперативной памяти. Уменьшение этого значения позволит этим объектам дольше кэшироваться в памяти, потребляя со временем дополнительную оперативную памятьВ зависимости от конкретной рабочей нагрузки - слишком сильное увеличение или уменьшение этого значения может оказать значительное негативное влияние на производительность системыЧтобы найти подходящий баланс необходимо поэкспериментировать, а значение по умолчанию является разумным. В целом, чаще всего оптимизируют swappiness, прежде чем экспериментировать с vfs_cache_pressure.


To set these values you can use the command {{ic|sysctl}}. For example, to set the swappiness value to 10 you could use:
Для установки этих значений вы можете использовать команду {{ic|sysctl}}. Например, чтобы установить значение swappiness равным 10, вы должны использовать:
  sudo sysctl vm.swappiness=10
  sudo sysctl vm.swappiness=10




'''There is no preset defined answer on the optimal values for these parameters.'''  Experimentation is needed to find the optimum configuration for your specific hardware and workload.
'''Не существует заранее определенного ответа на вопрос об оптимальных значениях этих параметров.'''  Необходимо поэкспериментировать чтобы найти оптимальную конфигурацию для вашего конкретного оборудования и рабочей нагрузки.




=Смотрите также=
=Смотрите также=
* The Arch Wiki page on [https://wiki.archlinux.org/index.php/Swap swap]
* Страница на Arch Wiki про [https://wiki.archlinux.org/index.php/Swap swap]
* The Arch Wiki page on [https://wiki.archlinux.org/index.php/Zswap zswap]
* Страница на Arch Wiki про [https://wiki.archlinux.org/index.php/Zswap zswap].
* The Linux kernel documentation on [https://www.kernel.org/doc/Documentation/vm/zswap.txt zswap]
* Документация ядра Linux про [https://www.kernel.org/doc/Documentation/vm/zswap.txt zswap]
* The Linux kernel documentation on [https://www.kernel.org/doc/Documentation/sysctl/vm.txt swappiness and vfs_cache_pressure]
* Доументация ядра Linux про [https://www.kernel.org/doc/Documentation/sysctl/vm.txt swappiness и vfs_cache_pressure]
* The openSUSE guide to [https://doc.opensuse.org/documentation/leap/tuning/html/book.sle.tuning/cha.tuning.memory.html tuning memory]
* Руководство по ZFS в Linux по [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device разделам Swap]
* The [https://github.com/Nefelim4ag/systemd-swap systemd-swap page]
* The ZFS on Linux guide on [https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-use-a-zvol-as-a-swap-device Swap Volumes]




[[Category:Contents Page{{#translation:}}]]
[[Category:Contents Page{{#translation:}}]]

Latest revision as of 04:38, 31 July 2023

Other languages:
Deutsch • ‎English • ‎français • ‎русский


Обзор

Пространство подкачки используется для расширения объема памяти (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
Note
Самый большой сервер, который когда-либо устанавливал один из авторов этой вики-статьи, действительно имел 8 ТБ оперативной памяти и даже эта машина имеет указанные выше настройки подкачки, так почему бы и вашей машине не быть такой?

Отображение информации о подкачке

Команда 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"

Если Вы хотите иметь более одного раздела подкачки - просто повторите описанные выше шаги для всех дополнительных разделов.


Note
Обязательно замените /dev/sda3 в приведенных выше командах на ваш реальный раздел подкачки.


Tip
Если вы используете HDD (вращающийся диск) - поместите раздел подкачки в начало диска, поскольку скорость диска выше на внешних дорожках. На SSD это не имеет значения.

Использование файла подкачки

Использование раздела подкачки имеет один существенный недостаток: Изменение размера swap или добавление swap требует переразметки диска. В текущих ядрах Linux можно использовать файл подкачки вместо выделенного раздела и начиная с ядра 2.6 разница в производительности между ними больше не ощущается.

Создание и включение статического файла подкачки

Tip
Нет причин, по которым вы не можете иметь как раздел подкачки, так и файл подкачки. Это простой способ добавить дополнительный раздел подкачки без переразметки.


Сначала создайте и инциализируйте файл для подкачки. Например, чтобы создать файл подкачки размером 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 для этого файла и обеспечивают отключение сжатия.



Tip
Чтобы сохранить совместимость с Timeshift, необходимо создать файл подкачки вне корневого подтома "@".
root # btrfs subvolume create /@swapfile COPY TO CLIPBOARD

Просто замените /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


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


Смотрите также

Cookies help us deliver our services. By using our services, you agree to our use of cookies.