Использование zRam для увеличения количества доступной памяти
Тоже заинтересовало, особенно для сервера виртуалок. Вечером дома вдумчиво пощупаю.
[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
Задумался. Вроде не проблема в tmpfs же смонтировать, а можно сделать так чтобы не указывать размер, и пусть себе жрет все доступное пока приложениям не надо?
Вроде не проблема в tmpfs же смонтировать, а можно сделать так чтобы не указывать размер, и пусть себе жрет все доступное пока приложениям не надо?
Так в zram оно же сжимает, и, насколько я понял, «swap'ить» в zram начнёт, когда оперативка закончится.
Извиняюсь за вопрос. Не совсем в тему.
Как на машине можно сделать 160Гб ОЗУ?
Wolfenberg, на серверной железяке реально набить модулями по 64 и 32 Гб, другой вопрос а на кой, собственно, так много?
Anarhyst, создание хранилища быстрого доступа.
Wolfenberg, в таком случае как я и говорил - на серверной железяке модулями по 32Гб набивать
Сегодня прочитал на «хабре», прикрутил, наблюдаю...
Если использовать встроенный zram в ядро, то в загрузчике следует использовать опцию:
zram.num_devices=4 где 4 количество ядер в процессоре.
Ну и под это состряпал скрипт запуска zram, который считает количество ядер и количество памяти для каждого устройства /dev/zram(i) а затем монтирует.
/sbin/zram.sh:
#!/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 скрипт автозагрузки.
#!/sbin/runscript
depend()
{
before xdm
}
start()
{
ebegin "Starting zram"
zram.sh
eend 0 "Failed to start zram"
}
Предполагается что перед началом выполнения данного скрипта, уже настроено загрузка модуля либо ядра с нужным количеством устройств /dev/zram
Проверил сжатие действительно работает в режиме компиляции тормоза пропали. Ну и память используется теперь значительно меньше.
Так в zram оно же сжимает, и, насколько я понял, «swap'ить» в zram начнёт, когда оперативка закончится.
Хм нет, тут swap'ить начнет в зависимости от значения в /proc/sys/vm/swappiness, чем меньше значение, тем больше оперативной памяти будет использовать прежде чем залезть в своп.
Для использования zram в полне подойдет значение по умолчанию в /proc/sys/vm/swappiness равное 60. При слишком маленьком значении выгода от использования zram будет небольшая.
И да, по моим набюдениям, на машинках типа моей профита от использования zram не сильно много. Но диск он способен разгрузить, так что еще наращу память и половину отдам zram.
И да, по моим набюдениям, на машинках типа моей профита от использования zram не сильно много. Но диск он способен разгрузить, так что еще наращу память и половину отдам zram.
В смысле хотите использовать вместо свопа другую ФС?
В смысле хотите использовать вместо свопа другую ФС?
Нет, как в этом топике обсуждается, часть оперативки. В текущих 512 с zRam тесновато.
Нет, как в этом топике обсуждается, часть оперативки. В текущих 512 с zRam тесновато.
Ну если обратите внимание на скрипт что я выложил, то тут используется для создание zram устройств полное количество памяти деленное на количество ядер, тем не менее использование свопа в zram начинается все так же в зависимости от значения в /proc/sys/vm/swappiness
Т.е. ничего страшного если вы используете под zram всю память, zram все равно будет использовать ее не всю а только часть в зависимости от значения в /proc/sys/vm/swappiness
ormorph, попробую... Меня смутило, что
Т.е. ничего страшного если вы используете под zram всю память
ormorph, попробую... Меня смутило, что
Ну так этот скрипт как раз и использует всю память для zram, я его и использую, наблюдая за выводом gkrellm видно что swap начинает использоваться только когда использование оперативной памяти приближается к процентному значению памяти в /proc/sys/vm/swappiness.
Т.е. до использования свопа память работает в своем обычном режиме, не смотря на то что размер под создание ФС(swap) был полный размер оперативной памяти.
Немного усовершенствовал скрипт запуска zram для gentoo
#!/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 $?
}
Теперь все довольно просто, не имеет значения, модулем собрана или в ядре.
ormorph, если я правильно понял, ваш скрипт создаёт количество swap'ов, прямо пропорциональное числу используемых процессоров (ядер), с размером, обратно пропорциональным их числу?
Объясните, пожалуйста, на чём основаны такие расчёты?
А я запихал в zram дерево portage вместе с оверлеями.