Поиск по сайту:

Включите Zram в Ubuntu для повышения производительности при ограниченной оперативной памяти

В этом пошаговом руководстве показано, как включить модуль ядра zram и использовать его в качестве устройства подкачки для повышения производительности системы на ПК/ноутбуке Ubuntu 24.04 с ограниченным объемом оперативной памяти.

Как вы, возможно, знаете, Ubuntu обычно включает в себя пространство подкачки. Он работает как «виртуальная память» MS Windows, которая использует жесткий диск в качестве дополнительной памяти, когда физической оперативной памяти недостаточно для запроса всех задач.

Однако обмен на диске выполняется медленно, что снижает общую производительность системы. Итак, в Linux представлены модули ядра «zram» и «zswap» для повышения производительности компьютеров с небольшим объемом оперативной памяти.

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

Я писал о том, как включить zswap в Ubuntu для выполнения аналогичной работы, предоставляя сжатый кэш ОЗУ для страниц подкачки. Здесь я собираюсь показать вам, как вместо этого использовать zram, который включен по умолчанию в Fedora и Pop!_OS.

ПРИМЕЧАНИЕ 1. Если у вас много оперативной памяти, которая редко использует пространство подкачки, или вы ограничены в ресурсах ЦП, держитесь подальше от zram или zswap, поскольку они потребляют больше ресурсов ЦП для сжатия/распаковки.

ПРИМЕЧАНИЕ 2: zram предотвратит переход в спящий режим для правильной работы! Вместо этого используйте zswap, если вам нужно перевести диск в режим сна.

Отключить zswap (если включен)

Zswap предотвратит эффективное использование zram. Если он включен на вашем компьютере с Ubuntu, вам необходимо сначала отключить его, чтобы опробовать zram.

Чтобы проверить, включен ли zswap, просто откройте терминал (Ctrl+Alt+T) и выполните команду:

systool -v -m zswap

Запустите sudo apt install sysfsutils, если команда не найдена. В выводе «enabled=«N»» означает, что эта функция не включена.

Если написано «enabled=«Y»», то вы можете запустить приведенную ниже команду, чтобы отключить zswap во время выполнения (работает до перезагрузки):

echo 0 | sudo tee /sys/module/zswap/parameters/enabled

ПРИМЕЧАНИЕ. Согласно документации ядра, данные в zswap НЕ будут освобождены немедленно. Вам нужно подождать, пока они не станут недействительными или не вернутся в память по ошибке, или вручную swapoff подкачку и swapon (если необходимо) снова.

Если вы хотите навсегда отключить zswap, попробуйте отредактировать загрузчик Grub и удалить параметры ядра для zswap (если таковые имеются).

sudo nano /etc/default/grub

Удалите zswap.enabled=1 из «GRUB_CMDLINE_LINUX_DEFAULT» и, наконец, запустите sudo update-grub, чтобы применить изменения.

Вариант 1. Включить Zram во время выполнения

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

1. Сначала нажмите Ctrl+Alt+T на клавиатуре, чтобы открыть окно терминала. Затем выполните команду:

sudo modprobe zram

Команда загружает модуль zram и создает в оперативной памяти одноблочное устройство. При этом все файлы конфигурации хранятся в каталоге /sys/block/zram0.

Советы. При желании вы можете создать в оперативной памяти несколько блочных устройств zram. Например, запуск sudo modprobe zram num_devices=4 создаст 4, а файлы конфигурации расположены в /sys/block/zram{0, 1, 2, 3}.

2. Как вы можете видеть на последнем снимке экрана, устройство блокировки zram включает множество файлов конфигурации в /sys/block/zram0. Они включают в себя:

  • disksize — максимальный размер несжатых данных, которые он может хранить.
  • mem_limit — максимальная физическая память, которую он может использовать для хранения сжатых данных.
  • comp_algorithm — установите алгоритм сжатия. Поддерживаемые значения: lzo, z4, lz4hc, 842, zstd. Посмотрите сравнение.
  • max_comp_streams – количество возможных операций сжатия, выполняемых одновременно. По умолчанию — номер ядра вашего процессора.
  • Есть также много других вариантов настройки. Дополнительную информацию см. в документации ядра.

Чтобы установить максимальный размер несжатых данных, который он может хранить, например, 4 ГБ (замените число соответствующим образом), используйте команду:

echo 4G | sudo tee /sys/block/zram0/disksize

Чтобы установить максимальный размер памяти, который он может использовать для хранения сжатых данных, например 2 ГБ (соответственно замените число), используйте команду:

echo 2G | sudo tee /sys/block/zram0/mem_limit

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

echo lzo | sudo tee /sys/block/zram0/comp_algorithm

Аналогичным образом вы можете использовать команду echo для настройки других параметров блочного устройства zram.

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

sudo mkswap /dev/zram0

Наконец, включите область подкачки с более высоким приоритетом с помощью команды:

sudo swapon --priority 100 /dev/zram0

4. Наконец, вы можете запустить swapon, чтобы идентифицировать текущие устройства подкачки (zram должен иметь наивысший приоритет). И запустите команду ниже, чтобы проверить статистику zram.

zramctl

В выводе:

  • DISKSIZE – означает максимальный размер несжатых данных, которые он может хранить.
  • ДАННЫЕ – означает текущий размер несжатых данных (в моем случае 1,1 ГБ).
  • COMPR – данные 1,1G сжаты до 209,1M.
  • TOTAL — текущий размер физической памяти, которую использует zram (метаданные + сжатые данные).

5. (Необязательно) Чтобы воспользоваться всеми преимуществами zram, вы можете настроить подкачку системы с помощью 4 команд ниже:

echo 180 | sudo tee /proc/sys/vm/swappiness
echo 0 | sudo tee /proc/sys/vm/watermark_boost_factor
echo 125 | sudo tee /proc/sys/vm/watermark_scale_factor
echo 0 | sudo tee /proc/sys/vm/page-cluster

Это настройки подкачки по умолчанию в Pop!_OS, но НЕ проверенные в моем случае.

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

sudo swapoff /dev/zram0
sudo modprobe --remove zram

Вариант 2. Включить Zram при запуске (сделать его постоянным)

Шаги, описанные в «Варианте 1», НЕ сохраняются после перезагрузки. Если zram отлично работает на вашем компьютере, вы можете вместо этого выполнить следующие шаги, чтобы сделать его постоянным.

ПРИМЕЧАНИЕ. В приведенных ниже шагах я буду использовать текстовый редактор командной строки nano для редактирования файлов конфигурации, который работает на большинстве настольных компьютеров. По выбору вы можете заменить его на gnome-text-editor для версии 24.04 на GNOME по умолчанию, gedit для версии 22.04 и более ранних на GNOME по умолчанию, коврик для мыши для XFCE, xed для Linux Mint Cinnamon или другого текстового редактора в соответствии с средой вашего рабочего стола.

1. Сначала выполните команду, чтобы создать (и отредактировать) файл конфигурации для загрузки модуля zram при загрузке:

sudo nano /etc/modules-load.d/zram.conf

Когда файл откроется, просто напишите в него zram. Затем нажмите Ctrl+S для сохранения и Ctrl+X для выхода.

Советы. Если вы хотите создать несколько блочных устройств ZRAM в оперативной памяти, создайте еще один файл с помощью команды ниже:

sudo nano /etc/modprobe.d/zram.conf

Затем напишите options zram num_devices=1 (измените номер по своему усмотрению).

2. Затем выполните команду, чтобы создать файл правил udev для настройки параметров устройства zram.

sudo nano /etc/udev/rules.d/99-zram.rules

Когда файл откроется, добавьте строку ниже (ПРИМЕЧАНИЕ: строка включает как «==», так и «=»):

ACTION=="add", KERNEL=="zram0", ATTR{comp_algorithm}="lto", ATTR{disksize}="4G", ATTR{mem_limit}="2G"

Здесь измените значения «disksize», «mem_limit» и «comp_algorithm» в соответствии с вашими потребностями. Для нескольких устройств zram добавьте дополнительные строки с разными именами устройств для KERNEL (zram1, zram2, …).

3. Вики Arch Linux рекомендует использовать правило udev + /etc/fstab для автоматического создания и использования устройства zram в качестве подкачки при запуске. Однако в моем случае в Ubuntu 24.04 это вызывает проблему «Не удалось активировать подкачку dev-zram0.swap».

Вместо этого в моем случае создается служба systemd для автоматической настройки и включения блочного устройства zram в качестве подкачки. Сначала запустите команду для создания служебного файла:

sudo nano /etc/systemd/system/zram.service

Когда файл откроется, добавьте содержимое ниже и сохраните (Ctrl+S, затем Ctrl+X).

[Unit]
Description=Swap with zram
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=/sbin/mkswap /dev/zram0
ExecStart=/sbin/swapon -p 100 /dev/zram0
ExecStop=/sbin/swapoff /dev/zram0

[Install]
WantedBy=multi-user.target

После сохранения файла запустите команду systemctl Enable zram, чтобы включить службу.

(Необязательно) Если вы хотите использовать конфигурацию подкачки Pop!_OS, чтобы в полной мере воспользоваться преимуществами zram, выполните команду для создания файла конфигурации:

sudo nano /etc/sysctl.d/99-vm-zram-parameters.conf

добавьте строки ниже и сохраните.

vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0

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

Чтобы отменить «Вариант 2», сначала запустите systemctl Disable Zram, чтобы отключить службу, затем удалите все созданные вами файлы, заменяя nano с rm в приведенных выше командах.

Статьи по данной тематике