Skip to content

Latest commit

 

History

History
21 lines (12 loc) · 5.36 KB

ram_compression_on_linux.md

File metadata and controls

21 lines (12 loc) · 5.36 KB

Сжатие RAM в Linux

Источник: RAM Compression on Linux

Недавно я обновил свой MacBook Air 2013 года до macOS «Big Sur» 11.1. Я переживал, что это может быть последняя поддерживаемая версия macOS для этого ноутбука, и даже в этом случае не был уверен, что обновление пройдёт успешно — всё из-за того, что у него всего 4 ГБ RAM. Смешной объём, если учитывать раздутость современных веб-сайтов и браузеров. И тем не менее этот ноутбук до сих пор работает отлично — немалая заслуга того, насколько хорошо macOS выполняет сжатие RAM. Мне стало интересно, могли бы мой Raspberry Pi 3 (1 ГБ RAM) и моя маленькая виртуальная машина Ubuntu (4 ГБ RAM) использовать похожее сжатие RAM под Linux.

В Linux есть своего рода «RAM-диск» — на самом деле блочное устройство с памятью в RAM, которое сжимает данные перед их размещением в памяти. Оно называется zram — по всей видимости, потому что по умолчанию использует сжатие lzo, один из немногих алгоритмов сжатия, выбираемых за скорость. zram уже много лет доступен в ядре Linux по умолчанию, так что нет необходимости собирать кастомное ядро или подключать его как модуль.

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

Хороший пример настройки zram — пакет zram-config в Ubuntu. Он выделяет половину RAM под zram и делит её на по одному блочному устройству на каждое ядро CPU для максимизации производительности. После настройки можно следить за использованием zram командой zramctl (для запуска не нужен root). Я использовал это в своей маленькой Linux-VM и на Raspberry Pi, и это работало весьма неплохо. Просто скопируйте команды из этого пакета в скрипты «activate.sh» и «deactivate.sh» и запускайте их от root.

Что касается Raspberry Pi, есть open-source скрипт zram-config (не путать с пакетом Ubuntu), который куда более гибок: он использует конфигурационный файл для настройки объёма zram, алгоритма сжатия и так далее. Созданный под Debian-подобную ОС Raspberry Pi, он также предлагает использовать zram как промежуточное устройство для tmp или другой файловой системы, поскольку файловая система Raspberry Pi на SD-карте может быть довольно медленной.

Нагрузка на CPU должна быть минимальной (я читал, что это меньше 2% одного ядра CPU). Тем не менее, если вы редко используете swap на своей Linux-системе, выделять большой объём памяти под zram-устройство может не иметь смысла.


zram Linux память