LinuxForum.Fans
Тема

Использование zRam для увеличения количества доступной памяти

Автор: Lupo_Alberto 22 сообщений 5457 просмотров
#308189

Сегодня прочитал на «хабре», прикрутил, наблюдаю...
Кто-нибудь имеет опыт использования и, соответственно, собственный взгляд на эту «фишку»?

#308196

Тоже заинтересовало, особенно для сервера виртуалок. Вечером дома вдумчиво пощупаю.

#308200

[console=root]systemctl status zramswap.service
zramswap.service - Service enabling compressing RAM with zRam
Loaded: loaded (/lib/systemd/system/zramswap.service; enabled)
Active: active (exited) since Tue, 12 Mar 2013 10:55:28 +0400; 9min ago
Process: 798 ExecStart=/usr/sbin/zramswapon (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/zramswap.service[/console]
Давно пользуюсь. Глюков не заметил.

з.ы. кому надо для openSUSE: первый совет Полезные советы для openSUSE 12.2

#308265

Задумался. Вроде не проблема в tmpfs же смонтировать, а можно сделать так чтобы не указывать размер, и пусть себе жрет все доступное пока приложениям не надо?

#308279
"zenon⇓" написал:
Вроде не проблема в tmpfs же смонтировать, а можно сделать так чтобы не указывать размер, и пусть себе жрет все доступное пока приложениям не надо?

Так в zram оно же сжимает, и, насколько я понял, «swap'ить» в zram начнёт, когда оперативка закончится.

#308281

Извиняюсь за вопрос. Не совсем в тему.
Как на машине можно сделать 160Гб ОЗУ?

#308819

Wolfenberg, на серверной железяке реально набить модулями по 64 и 32 Гб, другой вопрос а на кой, собственно, так много?

#308843

Anarhyst, создание хранилища быстрого доступа.

#308868

Wolfenberg, в таком случае как я и говорил - на серверной железяке модулями по 32Гб набивать

#309394
"Lupo Alberto⇓" написал:
Сегодня прочитал на «хабре», прикрутил, наблюдаю...

Если использовать встроенный zram в ядро, то в загрузчике следует использовать опцию:
zram.num_devices=4 где 4 количество ядер в процессоре.

Ну и под это состряпал скрипт запуска zram, который считает количество ядер и количество памяти для каждого устройства /dev/zram(i) а затем монтирует.
/sbin/zram.sh:

text
#!/bin/bash
zram_start() {
cpu=`awk -v cpu=0 '$1 == "processor" {cpu=cpu+1} END {print cpu}' /proc/cpuinfo`
SIZE=`awk -v cpu=$cpu '$1 == "MemTotal:" {print ((0 + $2) * 1024)/cpu}'  /proc/meminfo`
echo $SIZE

for ((a=0; a<cpu; a++)) do echo $SIZE >/sys/block/zram$a/disksize echo "$SIZE >/sys/block/zram$a/disksize" done

for ((a=0; a<cpu; a++)) do mkswap /dev/zram$a done

for ((a=0; a<cpu; a++)) do swapon /dev/zram$a -p 10 done }

zram_start >/dev/null &

ну и для gentoo скрипт автозагрузки.

text
#!/sbin/runscript

depend() { before xdm }

start() { ebegin "Starting zram" zram.sh eend 0 "Failed to start zram" }

Предполагается что перед началом выполнения данного скрипта, уже настроено загрузка модуля либо ядра с нужным количеством устройств /dev/zram

Проверил сжатие действительно работает в режиме компиляции тормоза пропали. Ну и память используется теперь значительно меньше.

#309400
"Lupo Alberto⇓" написал:
Так в zram оно же сжимает, и, насколько я понял, «swap'ить» в zram начнёт, когда оперативка закончится.

Хм нет, тут swap'ить начнет в зависимости от значения в /proc/sys/vm/swappiness, чем меньше значение, тем больше оперативной памяти будет использовать прежде чем залезть в своп.
Для использования zram в полне подойдет значение по умолчанию в /proc/sys/vm/swappiness равное 60. При слишком маленьком значении выгода от использования zram будет небольшая.

#309405

И да, по моим набюдениям, на машинках типа моей профита от использования zram не сильно много. Но диск он способен разгрузить, так что еще наращу память и половину отдам zram.

#309413
"yars⇓" написал:
И да, по моим набюдениям, на машинках типа моей профита от использования zram не сильно много. Но диск он способен разгрузить, так что еще наращу память и половину отдам zram.

В смысле хотите использовать вместо свопа другую ФС?

#309419
"ormorph" написал:
В смысле хотите использовать вместо свопа другую ФС?

Нет, как в этом топике обсуждается, часть оперативки. В текущих 512 с zRam тесновато.

#309429
"yars⇓" написал:
Нет, как в этом топике обсуждается, часть оперативки. В текущих 512 с zRam тесновато.

Ну если обратите внимание на скрипт что я выложил, то тут используется для создание zram устройств полное количество памяти деленное на количество ядер, тем не менее использование свопа в zram начинается все так же в зависимости от значения в /proc/sys/vm/swappiness
Т.е. ничего страшного если вы используете под zram всю память, zram все равно будет использовать ее не всю а только часть в зависимости от значения в /proc/sys/vm/swappiness

#309432

ormorph, попробую... Меня смутило, что

"ormorph" написал:
Т.е. ничего страшного если вы используете под zram всю память
#309453
"yars⇓" написал:
ormorph, попробую... Меня смутило, что

Ну так этот скрипт как раз и использует всю память для zram, я его и использую, наблюдая за выводом gkrellm видно что swap начинает использоваться только когда использование оперативной памяти приближается к процентному значению памяти в /proc/sys/vm/swappiness.
Т.е. до использования свопа память работает в своем обычном режиме, не смотря на то что размер под создание ФС(swap) был полный размер оперативной памяти.

#312302

Немного усовершенствовал скрипт запуска zram для gentoo

text
#!/sbin/runscript

MODULE=`zgrep CONFIG_ZRAM= /proc/config.gz|sed 's/CONFIG_ZRAM=//'` checkconfig(){ if [[ "$MODULE" == "y" ]] ; then return 0 elif [[ "$MODULE" == "m" ]] ; then return 0 fi eerror "Kernel does not support zram function. Recompile a kernel" return 1 }

CPU=`awk -v cpu=0 '$1 == "processor" {cpu=cpu+1} END {print cpu}' /proc/cpuinfo` SIZE=`awk -v cpu=$CPU '$1 == "MemTotal:" {print ((0 + $2) * 1024)/cpu}' /proc/meminfo`

start(){ checkconfig || return 1 ebegin "Starting zram" if [[ "$MODULE" == "m" ]] ; then modprobe zram num_devices=$CPU fi for (( i=0; i<$CPU; i++ )) do echo $SIZE > /sys/block/zram$i/disksize mkswap /dev/zram$i swapon -p 10 /dev/zram$i done eend $? }

stop(){ ebegin "Deactivating zram swap" for (( i=0; i<$CPU; i++ )) do swapoff /dev/zram$i echo 1 > /sys/block/zram$i/reset done if [[ "$MODULE" == "m" ]] ; then modprobe -r zram fi eend $? }

Теперь все довольно просто, не имеет значения, модулем собрана или в ядре.

#312303

ormorph, если я правильно понял, ваш скрипт создаёт количество swap'ов, прямо пропорциональное числу используемых процессоров (ядер), с размером, обратно пропорциональным их числу?
Объясните, пожалуйста, на чём основаны такие расчёты?

#312304

А я запихал в zram дерево portage вместе с оверлеями.

Войдите или зарегистрируйтесь, чтобы ответить.