17123
Ускоряем старые машинки - systemd-swap
Взял статью полностью с форума Арча спасибо за неё автору, мне она сегодня оченно помогла в офисе, она уже была запощена в нашем старом форуме, но думаю ей тут тоже самое место.
Преамбула
zRam — это модуль ядра Linux который включён в стандартную поставку ядра начиная с версии 3.14. Целью данного модуля служит создание блочного устройства в оперативной памяти, но в отличии от tmpfs, данные записываются на него в сжатом виде. Поэтому одно из основных его полезных применений это возможность создание прессующего раздела подкачки в оперативной памяти. Всё это позволяет, хоть и неявно, увеличить размер ОЗУ среднем в 2-3 раза, за счёт незначительной нагрузки ЦП на компрессию и декомпрессию данных.
На данный момент zRam поддерживает два вида компрессии: lzo(по умолчании) и lz4(начиная с версии ядра 3.15).
Амбула
Итак, у нас есть модуль и знание для чего он нужен, осталось всё это дело применить на практике.
Есть несколько вариантов как всё это запилить:
Рассмотрим третий способ.
systemd-swap — как написано на github-е это скрипт автоматического создания и подключения: zram swap, swap файлы (через loop) устройств, swap.
а) Устанавливаем:
б) Настраиваем:
Вся настройка осуществляется в файле /etc/systemd-swap.conf
Для наших нужд достаточно раскомментировать всего четыре строчки.
— первая: размер создаваемого раздела — по умолчанию 1/4 от размера ОЗУ, если маловато памяти то лучше поставить 1/3 или 1/2.
— вторая: количество потоков сжатия — по умолчанию используется один поток, если раскомментировать то количество потоков будет равно количеству ядер процессора.
— третья: алгоритм сжатия — по умолчанию используется lz4, раньше было lzo.
— четвертая: включаем собственно zram, меняем 0 на 1
в) Добавляем в автозагрузку и запускаем:
г) Посмотреть статус устройства:
zramctl — простой инструмент для контроля устройств zram (создать, удалить, найти, статус). Входит в состав util-linux начиная с версии 2.26.
где
NAME — название(устройство)
ALGORITHM — алгоритм сжатия
DISKSIZE — размер раздела подкачки в оперативной памяти
DATA — размер данных до сжатия
COMPR — размер данных после сжатия
TOTAL — STREAMS — количество потоков сжатия
MOUNTPOINT — точка монтирования
Постамбула
Вот таким не хитрым способом можно увеличить оперативную память. В среднем у меня жмётся в три раза, но конечно всё зависит от поступающих данных.
Единственное что хотелось ещё добавить это то что существует такой параметр ядра vm.swappiness отвечающий за то при каком уровне свободной оперативной памяти нужно использовать своп, по умолчанию он равен 60(40% заполнено а 60% свободно).
Если учесть что средний параметр сжатия равен 1 к 3, а также оставить некий запас прочности то можно очень приблизительно определить граничные значения:
— итоговая память ~ RAM*3: vm.swappiness = 90; ZRAM/RAM = 1/1 (при большой нагрузке возможна нестабильность системы)
— итоговая память ~ RAM*2: vm.swappiness ~ 70; ZRAM/RAM = 1/2
— итоговая память ~ RAM*1.5: vm.swappiness = 60; ZRAM/RAM = 1/4 или 1/3
Поменять vm.swappiness можно следующим образом
Создать файл /etc/sysctl.d/99-sysctl.conf и добавим в него строчку:
vm.swappiness=70
Подгрузить созданный файл конфигурации:
Посмотреть что параметр действительно поменялся можно выполнив команду:
На этом всё.
Спасибо за внимание.
update: 25.03.2015
Обновил статью так как на днях вышла новая версия набора системных linux утилит util-linux 2.26, в эту версию вошел инструмент zramctl. При установке/обновлении util-linux, пакет zramctl будет удалён. В остальном практически всё осталось как и прежде.
Ещё раз спасибо автору, мне сегодня это помогло довольно таки неплохо вдохнуть жизнь в офисную машину.
Преамбула
zRam — это модуль ядра Linux который включён в стандартную поставку ядра начиная с версии 3.14. Целью данного модуля служит создание блочного устройства в оперативной памяти, но в отличии от tmpfs, данные записываются на него в сжатом виде. Поэтому одно из основных его полезных применений это возможность создание прессующего раздела подкачки в оперативной памяти. Всё это позволяет, хоть и неявно, увеличить размер ОЗУ среднем в 2-3 раза, за счёт незначительной нагрузки ЦП на компрессию и декомпрессию данных.
На данный момент zRam поддерживает два вида компрессии: lzo(по умолчании) и lz4(начиная с версии ядра 3.15).
Амбула
Итак, у нас есть модуль и знание для чего он нужен, осталось всё это дело применить на практике.
Есть несколько вариантов как всё это запилить:
- вручную — для этого есть интересная статья на хабре, а также описание на kernel.org.
- с помощью zramswap из Аура — интересующиеся могут посмотреть тему на форуме Арча где об этом говорится.
- systemd-swap — об этом ниже.
Рассмотрим третий способ.
systemd-swap — как написано на github-е это скрипт автоматического создания и подключения: zram swap, swap файлы (через loop) устройств, swap.
а) Устанавливаем:
% sudo pacman -S systemd-swap
б) Настраиваем:
Вся настройка осуществляется в файле /etc/systemd-swap.conf
Для наших нужд достаточно раскомментировать всего четыре строчки.
— первая: размер создаваемого раздела — по умолчанию 1/4 от размера ОЗУ, если маловато памяти то лучше поставить 1/3 или 1/2.
zram[size]=$[${sys[ram_size]}/4]K
— вторая: количество потоков сжатия — по умолчанию используется один поток, если раскомментировать то количество потоков будет равно количеству ядер процессора.
zram[streams]=${sys[cpu_count]}
— третья: алгоритм сжатия — по умолчанию используется lz4, раньше было lzo.
zram[alg]=lz4
— четвертая: включаем собственно zram, меняем 0 на 1
zram_enabled=1
в) Добавляем в автозагрузку и запускаем:
% sudo systemctl enable systemd-swap
% sudo systemctl start systemd-swap
г) Посмотреть статус устройства:
zramctl — простой инструмент для контроля устройств zram (создать, удалить, найти, статус). Входит в состав util-linux начиная с версии 2.26.
% zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 926,1M 20,3M 6,6M 7,5M 1 [SWAP]
где
NAME — название(устройство)
ALGORITHM — алгоритм сжатия
DISKSIZE — размер раздела подкачки в оперативной памяти
DATA — размер данных до сжатия
COMPR — размер данных после сжатия
TOTAL — STREAMS — количество потоков сжатия
MOUNTPOINT — точка монтирования
Постамбула
Вот таким не хитрым способом можно увеличить оперативную память. В среднем у меня жмётся в три раза, но конечно всё зависит от поступающих данных.
Единственное что хотелось ещё добавить это то что существует такой параметр ядра vm.swappiness отвечающий за то при каком уровне свободной оперативной памяти нужно использовать своп, по умолчанию он равен 60(40% заполнено а 60% свободно).
Если учесть что средний параметр сжатия равен 1 к 3, а также оставить некий запас прочности то можно очень приблизительно определить граничные значения:
— итоговая память ~ RAM*3: vm.swappiness = 90; ZRAM/RAM = 1/1 (при большой нагрузке возможна нестабильность системы)
— итоговая память ~ RAM*2: vm.swappiness ~ 70; ZRAM/RAM = 1/2
— итоговая память ~ RAM*1.5: vm.swappiness = 60; ZRAM/RAM = 1/4 или 1/3
Поменять vm.swappiness можно следующим образом
Создать файл /etc/sysctl.d/99-sysctl.conf и добавим в него строчку:
vm.swappiness=70
Подгрузить созданный файл конфигурации:
% sudo sysctl -p /etc/sysctl.d/99-sysctl.conf
Посмотреть что параметр действительно поменялся можно выполнив команду:
% sudo sysctl -a |grep swappiness
На этом всё.
Спасибо за внимание.
update: 25.03.2015
Обновил статью так как на днях вышла новая версия набора системных linux утилит util-linux 2.26, в эту версию вошел инструмент zramctl. При установке/обновлении util-linux, пакет zramctl будет удалён. В остальном практически всё осталось как и прежде.
Ещё раз спасибо автору, мне сегодня это помогло довольно таки неплохо вдохнуть жизнь в офисную машину.
23 комментария
Раньше у меня вывод был просто
От куда появилось все остальное? ipv6 никогда не пользовался
что говорит zramctl в терминале?
Такая же проблема. А как его включить то.
Сервис висит со статусом exited и zramctl ничего не выдает.
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 473M 4K 65B 4K 1 [SWAP]
sudo sysctl -p /etc/sysctl.d/99-sysctl.conf
kernel.sysrq = 1
vm.swappiness = 70
sudo sysctl -a |grep swappiness
sysctl: reading key «net.ipv6.conf.all.stable_secret»
sysctl: reading key «net.ipv6.conf.default.stable_secret»
sysctl: reading key «net.ipv6.conf.enp0s4.stable_secret»
sysctl: reading key «net.ipv6.conf.lo.stable_secret»
sysctl: reading key «net.ipv6.conf.wlp0s3f3u5.stable_secret»
vm.swappiness = 70
Так и должно быть?
sudo sysctl -a |grep swappiness
sysctl: reading key «net.ipv6.conf.all.stable_secret»
sysctl: reading key «net.ipv6.conf.default.stable_secret»
sysctl: reading key «net.ipv6.conf.enp2s0.stable_secret»
sysctl: reading key «net.ipv6.conf.lo.stable_secret»
vm.swappiness = 1
Заставлять принудительно использовать свап, при каждом чихе. Пусть даже это ram.Тут актуальнее подобрать размер zram.