Я использую native-zfs, и мне было интересно, есть ли способ использовать раздел ZFS для SWAP. Я запускаю свой сервер с флеш-накопителя и подумал, что это будет хорошим способом немного ускорить его.
Разделы подкачки должны иметь определенный формат, который подходит для подкачки, поэтому вы не можете использовать любую другую файловую систему для подкачки. Это исключает zfs по этой причине.
Использование ZFS для свопинга должно работать так же, как в Solaris и FreeBSD.
zfs create pool/swap -V 1G -b 4K
mkswap -f /dev/pool/swap
swapon /dev/pool/swap
Вот более подробное руководство, скопированное из zfsonlinux wiki :
zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \
-o logbias=throughput -o sync=always \
-o primarycache=metadata -o secondarycache=none \
-o com.sun:auto-snapshot=false rpool/swap
[ 1118] Вы можете настроить размер (часть 4G
) в соответствии со своими потребностями.
Алгоритм сжатия установлен на zle
, потому что это самый дешевый из доступных алгоритмов. При ashift=12
(блоки по 4 КБ на диске) общий случай размера страницы 4 КБ означает, что ни один алгоритм сжатия не может уменьшить количество операций ввода-вывода. Исключением являются все ноль страниц, которые удаляются ZFS; но некоторая форма сжатия должна быть включена, чтобы получить это поведение. Если ваш пул использует ashift=9
, вы можете использовать compression=lz4
.
mkswap -f /dev/zvol/rpool/swap
/etc/fstab
echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab
Предупреждение. Всегда используйте длинные псевдонимы /dev/zvol
в файлах конфигурации. Никогда не используйте короткое /dev/zdX
имя устройства.
swapon -av
Обмен на ZFS zvol возможен, но не является хорошей идеей, потому что об открытой ошибке, которая может привести к зависанию компьютера при нехватке места.
Пространство подкачки используется, когда на машине мало памяти и она пытается освободить ее, выгружая менее часто используемые данные.
Когда процессы ZFS выполняют запись в zvol, может потребоваться выделение новой памяти внутри ядра для обработки обновлений различных структур данных ZFS. Если на машине уже мало места, может потребоваться что-то поменять местами, чтобы освободить это пространство, но это вызывает бесконечный цикл.
Итак, вместо свопинга в ZFS просто создайте небольшой дополнительный раздел для пространства подкачки. Или во многих ситуациях вы можете просто не иметь подкачки и полагаться на то, что другие данные выгружаются в файловую систему, чтобы освободить память.