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

Был, был и весь вышел...

2

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

3

 Консоль: root
[root@linuxforum.ru ~]# 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

Давно пользуюсь. Глюков не заметил.

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

4

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

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

5

zenon⇓ пишет:

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

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

Был, был и весь вышел...

6

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

Linux Mint 19.3 Mate Edition
Windows 7

7

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

8

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

Linux Mint 19.3 Mate Edition
Windows 7

9

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

10 (16.03.2013 15:56:54 отредактировано ormorph)

Lupo Alberto⇓ пишет:

Сегодня прочитал на «хабре», прикрутил, наблюдаю...

Если использовать встроенный 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

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

11

Lupo Alberto⇓ пишет:

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

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

12

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

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

13

yars⇓ пишет:

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

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

14

ormorph пишет:

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

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

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

15

yars⇓ пишет:

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

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

16

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

ormorph пишет:

Т.е. ничего страшного если вы используете под zram всю память

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

17

yars⇓ пишет:

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

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

18

Немного усовершенствовал скрипт запуска 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 $?
}

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

19

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

Был, был и весь вышел...

20

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

21

fragment, неплохо, конечно, но перезагружаться нельзя bx

Был, был и весь вышел...

22

Lupo Alberto⇓ пишет:

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

Да все довольно просто, так как сжатие zram однопоточное, то для каждого потока должно быть выделено равное количество памяти, для эффективного ее использования при полном распределении процессов(загрузке всех ядер-потоков).

Тут немного не верное высказывание про количество ядер, на двух ядерном процессоре, в котором на каждое ядро отводится два потока, это число будет равно четырем, так как на самом деле считаются потоки а не ядра.

В режиме компиляции очень даже заметен выигрыш, меньше лазит в своп на жестком диске(практически не используется), только после того как будет использовано все пространство памяти.