вторник, 16 июня 2015 г.

zRAM на Raspberry Pi 2.



zRAM - это такой хитрый механизм, который создаёт сжатое блочное устройство в оперативной памяти. Чем оно полезно для Raspberry Pi? В него можно засунуть swap-раздел и ценой небольшого уменьшения доступной оперативной памяти значительно увеличить ресурс карты памяти, на которой этот самый раздел и располагается. На старых моделях Raspberry Pi от zRAM польза была довольно сомнительная, потому что они обладали одноядерным процессором, который и так производительностью не отличался.
Еще zRAM в последнее время довольно часто используют производители мобильный устройств на ОС Android.

Итак, механизм этот задействовать довольно просто.
Достаточно подгрузить модуль ядра, задать размер, отформатировать как swap-раздел и подключить этот самый swap-раздел.
Чтобы не городить свой велосипед, будем использовать средства системы. Сначала надо загрузить модуль:

sudo modprobe zram

А для того, чтобы он каждый раз сам загружался, пропишем его имя в файл "/etc/modules".  Без указания дополнительных параметров модуль создаёт одно блочное устройство "/dev/zram0" нулевого размера.
Устройство есть, теперь надо задать его размер. Делается это следующим образом:

echo размер_в_байтах > /sys/block/zram0/disksize

Теперь надо сделать из этого блочного устройства swap и подключить.

mkswap /dev/zram0
swapon /dev/zram0 -p 10

Делать подобное каждый раз руками - это себя не уважать, поэтому возложим всё на систему.
Загрузку модуля уже автоматизировали, осталось автоматизировать форматирование и подключение. Мне больше понравился вариант с использованием udev. Достаточно создать файл "/etc/udev/rules.d/10-zram.rules" с такой строкой:

KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="128M", RUN+="/sbin/mkswap $env{DEVNAME}"

Здесь 128M - это размер блочного устройства в мегабайтах.
Для подключения swap при загрузке системы пропишем в "/etc/fstab":

/dev/zram0      none            swap            defaults          0       0

Если всё сделано правильно, то в системном журнале можно увидеть примерно такие записи:

[    7.583494] zram: Created 1 device(s) ...
[    7.584840] zram0: detected capacity change from 0 to 134217728
[    9.572654] Adding 131068k swap on /dev/zram0.  Priority:-1 extents:1 across:131068k SSFS