своп в оперативную память - модуль zRam | zSwap

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

своп в оперативную память - модуль zRam | zSwap

Непрочитанное сообщение Olej » 10 апр 2015, 12:42

Вот такая смешная экзотика: модуль ядра zRam :-o

В свое время zRam был разработан в виде экспериментального модуля ядра Linux и поддерживался версиями ядра, начиная с 2.6.37.
А вот уже с версии 3.13 zRam есть по умолчанию. Благодаря zRam можно очень эффективно увеличить скорость работы на маломощных ПК, имеющих маленькие объемы оперативной памяти. Этот вариант прекрасно подойдет для нетбуков, имеющих всего 2Гб ОЗУ.
(так пишут, но я думаю, что эта фича имеет смысл на старых компьютерах с RAM <1Gb)

В случае использования zRam, swap будет находиться в специальном сжатом разделе оперативной памяти. А поскольку скорость обмена информацией с ОЗУ намного выше, чем с другими видами памяти, данное решение в разы может улучшить быстродействие системы. У кого очень маленький объем ОЗУ, для жесткого диска лучше использовать zRam, поскольку жесткий диск не предназначен для столь частого перезаписывания информации.

Устанавливается модуль прямо из репозитариев:

Код: Выделить всё

$ sudo apt-get install -y zram-config
Настраивать ничего не нужно, zRam самостоятельно определяет размеры swap. Узнать об использовании памяти в системе и о разделах zRAM командой:
$ free -m

frost42
Писатель
Сообщения: 44
Зарегистрирован: 21 фев 2012, 19:50
Откуда: Новокузнецк
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение frost42 » 04 июн 2016, 08:24

Давно использую, и на буке с Manjaro, и на основном компе со слакой.
Для Arch
Для Slackware

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 14 мар 2019, 12:22

Хорошее внятное описание механизмов свопирования в память, включённых в ядро Linux:
Zram и Zswap или как увеличить эффективность оперативной памяти
ВТОРНИК, 15 ДЕКАБРЯ 2015 Г.
ZRAM - модуль ядра Linux, ранее известный как compcache. До версии ядра 3.14 находился в эксперементальной ветке, с 3.14 перемещён в основную. Суть его в том, что в оперативной памяти создаётся сжатый раздел подкачки (swap). Создавая swap в ОЗУ, мы тем самым хоть и уменьшаем объем доступной оперативной памяти, но тем не менее информация в оперативной памяти всегда хранится в несжатом виде, а при использовании ZRAM происходит следующее: как только системе начинает не хватать оперативной памяти, она начинает активно занимать swap, а так как swap у нас в оперативной-же памяти, то по факту система начинает просто сжимать информацию из оперативки и помещать ее в оперативку же. Скорость работы ОЗУ всегда существенно выше чем дисковой подсистемы, а алгоритмы сжатия lzo и lz4 настолько быстры, что в итоге мы получаем существенное "увеличение" оперативной памяти за счет небольших процессорных издержек на архивацию. Таким образом, ZRAM позволяет разместить в оперативной памяти в несколько раз больше информации за счёт сжатия. Эта технология активно используется в Android, ТВ-приставках, ChromeOS, SteamOS и много где ещё. При использовании ZRAM, swap-раздел на диске необязателен. Это особенно полезно для SSD-накопителей, так как частые записи для них вредны.
ZSWAP - модуль ядра Linux, доступный с версии 3.11. Отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные. Размер пула можно указать вручную, по умолчанию он динамический (то есть будет использовать всю доступную оперативку). Реализация такого подхода позволяет, при возникновении необходимости сброса памяти в раздел подкачки, сократить ввод-вывод и повысить скорость работы системы в целом, за счет того, что по возможности избегается использование медленного носителя. Ценой сокращения ввода/вывода является увеличение нагрузки на процессор, который тратит дополнительные ресурсы на сжатие и распаковку данных. По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит своппинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш. Можно считать ZSWAP продвинутым вариантом ZRAM.
Zram или Zswap?
Чтобы узнать что из этого лучше подойдёт вам, возьмём два примера: ноутбук с 4 гигами оперативки и медленным жёстким диском (представьте себе работу подкачки на таком) или с SSD-накопителем; компьютер с 8 гигами оперативки, на котором планируется запускать много виртуальных машин и других ресурсоёмких приложений. В первом случае, более подходящим будет ZRAM, так как ему не нужен swap-раздел на диске (это особенно вредно для SSD) и он позволит размещать все данные непосредственно в памяти. Однако раздел swap нужно обязательно создать если вы будете использовать на ноутбуке режим сна. На компьютере предпочтительнее будет ZSWAP, так как оперативка не будет занята виртуальными swap-файлами (а виртуалкам нужно много оперативки), а в оперативке будет хранится только сжатый кэш, что при нехватке памяти предотвратит своппинг, а в критической ситуации - быстренько скинет его на swap-раздел на диске.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 14 мар 2019, 12:37

Olej писал(а):Хорошее внятное описание механизмов свопирования в память, включённых в ядро Linux:
Zram и Zswap или как увеличить эффективность оперативной памяти

Код: Выделить всё

olej@ACER:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux buster/sid
Release:	testing
Codename:	buster

Код: Выделить всё

olej@ACER:~$ apt search zram
Сортировка… Готово
Полнотекстовый поиск… Готово
libblockdev-kbd2/testing 2.20-6 amd64
  kernel block device plugin for libblockdev

udisks2-zram/testing 2.8.1-4 amd64
  zram support for udisks2

zram-tools/testing 0.3.2.1-1 all
  utilities for working with zram

Код: Выделить всё

olej@ACER:~$ aptitude show udisks2-zram
Пакет: udisks2-zram                              
Версия: 2.8.1-4
Состояние: не установлен
Мультиархитектура: сторонняя
Приоритет: необязательный
Раздел: admin
Сопровождающий: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
Архитектура: amd64
Размер в распакованном виде: 112 k
Зависит: udisks2 (= 2.8.1-4), libblockdev-kbd2, libblockdev-swap2, libblockdev2 (>= 2.19), libc6 (>= 2.4), libglib2.0-0 (>= 2.50), libgudev-1.0-0 (>= 165),
         libpolkit-gobject-1-0 (>= 0.94)
Описание: zram support for udisks2
 The udisks daemon serves as an interface to system block devices, implemented via D-Bus. It handles operations such as querying, mounting, unmounting, formatting, or
 detaching storage devices such as hard disks or USB thumb drives. 
 
 This package provides support for zram configuration.
Домашняя страница: https://www.freedesktop.org/wiki/Software/udisks

Код: Выделить всё

olej@ACER:~$ aptitude show zram-tools
Пакет: zram-tools                                
Версия: 0.3.2.1-1
Состояние: не установлен
Приоритет: необязательный
Раздел: utils
Сопровождающий: Jonathan Carter <jcc@debian.org>
Архитектура: all
Размер в распакованном виде: 28,7 k
Зависит: bc
Описание: utilities for working with zram
 zram is a Linux kernel module that allows you to set up compressed filesystems in RAM. 
 
 zram-tools uses this module to set up compressed swap space. This is useful on systems with low memory or servers running a large amount of services with data that's easily
 swappable but that you may wish to swap back fast without sacrificing disk bandwidth. 
 
 By default it allocates 100MB of RAM, you can configure this in /etc/default/zramswap.
Домашняя страница: https://github.com/highvoltage/zram-tools

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 14 мар 2019, 12:39

Olej писал(а):Хорошее внятное описание механизмов свопирования в память, включённых в ядро Linux:
Zram и Zswap или как увеличить эффективность оперативной памяти
Теперь о ZSWAP. Здесь всё значительно проще. Нужно лишь передать ядру во время загрузки, параметр zswap.enabled=1. Для этого открываем файл /etc/default/grub

sudo nano /etc/default/grub

И в строку GRUB_CMDLINE_LINUX_DEFAULT дописываем этот параметр. Чтобы было вот так:

GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 quiet"

Далее:

sudo update-grub

и перезагрузка. После перезагрузки, можете убедиться в работе ZSWAP, введя команду dmesg | grep zswap Если ответом будет

[ 1.273249] zswap: loading zswap
[ 1.273252] zswap: using lzo compressor

значит всё сработало на отлично. Способ включения ZSWAP одинаков для большинства дистрибутивов. Если нужно ограничить объём пула для ZSWAP, то там же в параметрах указываем:

zswap.max_pool_percent=x

где x - процент отведённой памяти под ZSWAP.

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

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 14 мар 2019, 12:50

Код: Выделить всё

olej@ACER:~$ aptitude search zswap*                  
olej@ACER:~$    
Потому что там ничего не надо использовать!
Детальное обсуждение ZSWAP на форуме Debian: Включение и использование ZSWAP

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/03/13$ cat /boot/config-`uname -r` | grep -i zswap
CONFIG_ZSWAP=y
начиная с 4-го ядра zbud или zsmalloc, необходимые для zswap, собранны в виде модуля, поэтому сначала смотрим, что у нас есть:

Код: Выделить всё

olej@ACER:~/2019_WORK/HISTORY/03/13$ cat /boot/config-`uname -r` | grep -i zbud
CONFIG_ZBUD=y

olej@ACER:~/2019_WORK/HISTORY/03/13$ cat /boot/config-`uname -r` | grep -i zsmalloc
CONFIG_ZSMALLOC=m
# CONFIG_ZSMALLOC_STAT is not set

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 июл 2019, 18:50

Olej писал(а): Потому что там ничего не надо использовать!
Детальное обсуждение ZSWAP на форуме Debian: Включение и использование ZSWAP
Использовать zswap, а тем более проверить, что он используется правильно и эффективно, посложнее будет, похоже, чем zram.
Но по предыдущей ссылки информации достаточно.
Ну и ещё здесь заметка в тему: lkml.org

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 июл 2019, 19:06

Olej писал(а): Использовать zswap, а тем более проверить, что он используется правильно и эффективно, посложнее будет, похоже, чем zram.
До установки:

Код: Выделить всё

olej@ACER:~$ /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/sda3                              	partition	12456956	0	-2
Установка:

Код: Выделить всё

olej@ACER:~$ sudo apt install zram-tools
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
  zram-tools
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 1 пакетов не обновлено.
Необходимо скачать 5 528 B архивов.
После данной операции объём занятого дискового пространства возрастёт на 28,7 kB.
Пол:1 http://deb.debian.org/debian buster/main amd64 zram-tools all 0.3.2.1-1 [5 528 B]
Получено 5 528 B за 0с (23,2 kB/s)
Выбор ранее не выбранного пакета zram-tools.
(Чтение базы данных … на данный момент установлено 398877 файлов и каталогов.)
Подготовка к распаковке …/zram-tools_0.3.2.1-1_all.deb …
Распаковывается zram-tools (0.3.2.1-1) …
Настраивается пакет zram-tools (0.3.2.1-1) …
Created symlink /etc/systemd/system/multi-user.target.wants/zramswap.service → /lib/systemd/system/zramswap.service.
Обрабатываются триггеры для man-db (2.8.5-2) …
Сразу после установки:

Код: Выделить всё

olej@ACER:~$ /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/sda3                              	partition	12456956	0	-2
/dev/zram0                             	partition	131068	0	100
/dev/zram1                             	partition	131068	0	100

Код: Выделить всё

olej@ACER:~$ lsmod | grep zr
zram                   28672  2
zsmalloc               28672  1 zram

Код: Выделить всё

olej@ACER:~$ sudo dmesg | tail -n10 | grep z
[33365.189859] zram: Added device: zram0
[33365.190749] zram: Added device: zram1
[33365.195564] zram0: detected capacity change from 0 to 134217728
[33365.205476] Adding 131068k swap on /dev/zram0.  Priority:100 extents:1 across:131068k SSFS
[33365.206077] zram1: detected capacity change from 0 to 134217728
[33365.213328] Adding 131068k swap on /dev/zram1.  Priority:100 extents:1 across:131068k SSFS

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 июл 2019, 20:39

Olej писал(а): Сразу после установки:
Управление всем этим хозяйством - включение-отключение устройства:

Код: Выделить всё

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/sda3                              	partition	12456956	0	-2
/dev/zram0                             	partition	131068	0	100
/dev/zram1                             	partition	131068	0	100

Код: Выделить всё

root@ACER:/proc/sys/vm# /sbin/swapoff /dev/sda3

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram0                             	partition	131068	0	100
/dev/zram1                             	partition	131068	0	100

Код: Выделить всё

root@ACER:/proc/sys/vm# /sbin/swapoff /dev/zram1

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram0                             	partition	131068	0	100

Код: Выделить всё

root@ACER:/proc/sys/vm# /sbin/swapon /dev/zram1

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram1                             	partition	131068	0	-2
/dev/zram0                             	partition	131068	0	100
Только вот приоритет здесь гульнул из 100 до -2.

Аватара пользователя
Olej
Писатель
Сообщения: 13913
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 июл 2019, 20:55

Olej писал(а):Только вот приоритет здесь гульнул из 100 до -2.
Все о Linux swap space
В последнем поле указан приоритет, т.е. какие пространства системе использовать вначале. Стоит отметить, что если примонтировать несколько своп-простанств расположенных на разных жестких дисках, и выставить им одинаковый приоритет, то Linux будет равномерно распределять страницы памяти по ним, что приведет к существенному увеличению производительности системы.

Код: Выделить всё

olej@ACER:~$ man swapon
...
       -p, --priority priority
              Specify  the  priority of the swap device.  priority is a value between -1 and 32767.  Higher numbers indicate higher priority.  See swapon(2) for a full
              description of swap priorities.  Add pri=value to the option field of /etc/fstab for use with swapon -a.  When no priority is defined, it defaults to -1.

Код: Выделить всё

olej@ACER:~$ man 2 swapon
...
   Priority
       Each  swap area has a priority, either high or low.  The default priority is low.  Within the low-priority areas, newer areas are even lower priority than older
       areas.

       All priorities set with swapflags are high-priority, higher than default.  They may have any nonnegative value chosen by the caller.  Higher numbers mean higher
       priority.

       Swap  pages are allocated from areas in priority order, highest priority first.  For areas with different priorities, a higher-priority area is exhausted before
       using a lower-priority area.  If two or more areas have the same priority, and it is the highest priority available, pages are allocated on a round-robin  basis
       between them.

       As of Linux 1.3.6, the kernel usually follows these rules, but there are exceptions.

Код: Выделить всё

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram1                             	partition	131068	0	-2
/dev/zram0                             	partition	131068	0	100

root@ACER:/proc/sys/vm# /sbin/swapon /dev/zram1 -p100
swapon: /dev/zram1: swapon failed: Устройство или ресурс занято

root@ACER:/proc/sys/vm# /sbin/swapoff /dev/zram1

root@ACER:/proc/sys/vm# /sbin/swapon /dev/zram1 -p100

root@ACER:/proc/sys/vm# /sbin/swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram1                             	partition	131068	0	100
/dev/zram0                             	partition	131068	0	100

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя