LINUX.ORG.RU

У меня таких показателей сжатия даже близко нет

$ zramctl
NAME       ALGORITHM DISKSIZE   DATA  COMPR  TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4             1G     4K    64B     4K       8 [SWAP]
/dev/zram1 lz4             1G 577,3M 490,1M 493,7M       8 /tmp
Deleted ()
Ответ на: комментарий от Deleted

похоже у меня ситуация лучше.

zramctl
NAME       ALGORITHM DISKSIZE   DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo           2,5G 277,6M 80,8M 85,5M       4 [SWAP]
осталось поиграться с размерами и количеством.

Спасибо за ответ! ^͜^

NextGenenration ★★ ()
Ответ на: комментарий от Deleted

У меня zramctl чего-то ничего не кажет.

 # > dfh | grep zram
/dev/zram0      6.0G  1.4M  6.0G   1% /var/tmp/portage
ЧЯДНТ?

r3lgar ★★★★★ ()
Ответ на: комментарий от YAR

zramctl в свежих util-linux

Утилита есть, но она ничего не выплёвывает:

 # > zramctl
 # > 
Но при этом видит девайс:
 # > zramctl -f
/dev/zram0
 # > 
Но ничего о нём не знает:
 # > zramctl /dev/zram0
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo             0B   0B    0B    0B       8 
 # > 
Ни точки монтирования, ни объёмов (смотри выхлоп df в моём предыдущем комментарии). Может быть, потому без аргументов и молчит. Но тогда почему оно не может определить ничего?

r3lgar ★★★★★ ()
Ответ на: комментарий от Deleted

ты всё опять сломал

Раз ты такой умный, подскажи, куда копать.

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

для начала покажи, как ты активируешь её

Deleted ()

Посмотрел мануальник по ссылке, перед использованием надо делать

echo $(($SIZE*1024*1024)) > /sys/block/zram0/disksize
mkswap /dev/zram0

В общем просто сделать запись в fstab не достаточно, надо делать скрипт выполняющийся при старте системы.
С init скриптами всё более менее ясно, сделал копии симлинка и rc скрипта вписав внего что нужно и всё.
А вот как быть с проклятущим Потерингоподелием, в инитах которого и алкоголику не разобраться?

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от greenman

Всё что есть в тестовом(stretch) Дебиане :(

tima@home-pc:~$ apt list |grep swap

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

cramfsswap/testing 1.4.1-1.1 amd64
dphys-swapfile/testing,testing 20100506-2 all
hotswap/testing,testing 0.4.0-15 all
hotswap-gui/testing 0.4.0-15 amd64
hotswap-text/testing 0.4.0-15 amd64
libdata-swap-perl/testing 0.07-2+b3 amd64
python-swap/testing,testing 1.2.1-7 all
swap-cwm/testing,testing 1.2.1-7 all
swapspace/testing 1.10-4 amd64
tima@home-pc:~$ 

torvn77 ★★★★★ ()
Ответ на: комментарий от torvn77

Я через udev делал. Там и размер диска задавался и mkswap запускался.

#etc/udev/rules.d/10-zram.rules
KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="размер", RUN="/sbin/mkswap $env{DEVNAME}"

И запись в /etc/fstab и /etc/modules

Radjah ★★★★★ ()
Ответ на: комментарий от Radjah

А почему у тебя ATTR{disksize} в ноль выставлен?
И что что делает или какой смысл в параметре ATTR{disksize}=«размер» ?

А так спасибо огромное.

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от torvn77

Чтобы при добавлении диска его размер задавался автоматом.

Radjah ★★★★★ ()
Ответ на: комментарий от torvn77

Всё что есть в тестовом(stretch) Дебиане :(

хватит ждать ебилдов, собери дебку сам!

NextGenenration ★★ ()
Ответ на: комментарий от Radjah

Это понятно, но почему в качестве размера указан ноль и зачем во втором параметре указывать тип «размер», хотя по идее и так должно быть ясно, что в первом параметре размер, а не что-то иное?

Или ноль указывают для автоматического определения размера модулем?

torvn77 ★★★★★ ()
Ответ на: комментарий от Radjah

А есть возможность задавать уровень компрессии? А то судя по озвученным выше результатам он по умолчанию задан не большим, около 3, а я бы хотел 7 для более полного занимания места.
(В теории то конечно пожимать пожатое смысла нету, да на практике достаточно часто эфект от этого имеется, при том что супротив пугалок и расход времени процессора на сильное сжатие и распаковку выходит не большим или вообще не заметным)

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от NextGenenration

Это я прочитал, я спрашиваю как задать уровень компрессии?
В gzip он например принимает значения от 1-9, при том самый вкусный, 7 программисты не любят как избыточный, считая что уровни больше 5 «не нужно».

torvn77 ★★★★★ ()

Как-то так, дальше копировать лень.

NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo         968.7M 19.4M  9.2M  9.7M       1 [SWAP]
/dev/zram1 lzo         968.7M 19.4M  9.2M  9.8M       1 [SWAP]
/dev/zram2 lzo         968.7M 19.2M  9.2M  9.7M       1 [SWAP]
/dev/zram3 lzo         968.7M 19.4M  9.1M  9.7M       1 [SWAP]
NAME       ALGORITHM DISKSIZE   DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lzo         213.6M 163.2M 55.1M 57.8M       1 [SWAP]
/dev/zram1 lzo         213.6M 163.4M 55.2M 57.8M       1 [SWAP]

anonymous_sama ★★★★★ ()
Ответ на: комментарий от torvn77

надо делать скрипт выполняющийся при старте системы.

/etc/rc.local

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous_sama

Если несколько zram устройств сделано для параллельного сжатия на всех ядрах, это уже не актуально:

https://www.kernel.org/doc/Documentation/blockdev/zram.txt

Regardless the value passed to this attribute, ZRAM will always allocate multiple compression streams - one per online CPUs - thus allowing several concurrent compression operations. The number of allocated compression streams goes down when some of the CPUs become offline. There is no single-compression-stream mode anymore, unless you are running a UP system or has only 1 CPU online.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Так сделано по дефолту в пакете zram-config. Я даже не настраиваю, ибо дефолт устраивает.

# Calculate memory to use for zram (1/2 of ram)
totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/  *.*//'`
mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024))

# initialize the devices
for i in $(seq ${NRDEVICES}); do
  DEVNUMBER=$((i - 1))
  echo $mem > /sys/block/zram${DEVNUMBER}/disksize
  mkswap /dev/zram${DEVNUMBER}
  swapon -p 5 /dev/zram${DEVNUMBER}
done

anonymous_sama ★★★★★ ()

А чего этот zram даёт, кроме +5 к понтам?

King_Carlo ★★★★★ ()
Ответ на: комментарий от NextGenenration

похоже у меня ситуация лучше

Ну так у тебя lzo, а у него lz4, так что степень сжатия у тебя выше, вот только скорость у него больше.

surefire ★★★ ()
Ответ на: комментарий от King_Carlo

Возможность пожертвовать процессором на машинах с недостатком оперативы в пользу экономии этой самой оперативы. Для примера - на работе очень туго компилять что-то жирное при запущенных KDE, Firefox и Thunderbird. Памяти 4 гига, нарастить нет возможности(мать - древнее говно).

С zram - всё гораздо лучше. В OOM всё выпадает только если в tmpfs компилять, ну дак это и понятно. Вышеозначенное трио(Firefox+Thunderbird+KDE) через некоторое время выжирает >2 гигов.

Система 64-битная, но на 32-битной было не лучше(я на ней давно сидел пока памяти было 2 гига - смысла в 64 битах было немного, а жор был бы больше).

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от King_Carlo

А чего этот zram даёт, кроме +5 к понтам?

свопить на жесткий стало реже. а это серьёзный выигрыш - не так часто надо ждать пока система прочитает что-то с жесткого.

NextGenenration ★★ ()
Ответ на: комментарий от Pinkbyte

Я в курсе существования данного пакета, но у меня systemd, да. Я не стану перекатываться обратно на OpenRC только потому, что обжился, обмазался скриптотой и прочее, не хейтер OpenRC и не фанатик systemd.

Алсо, systemd на десктопе (если не хочется странного) проще юзать.

r3lgar ★★★★★ ()
Ответ на: комментарий от i-rinat

Впервые слышу, что у zram ограничена степень сжатия.

tailgunner ★★★★★ ()
Ответ на: комментарий от i-rinat

Они оба умеют lz4, так что разницы не должно быть.

Deleted ()
Ответ на: комментарий от King_Carlo

Не более, чем пейджинг - технология для старых ПК.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

В zswap получается на одну прослойку больше.

zram: память -> сжатый swap раздел

zswap: память -> буфер zswap -> swap

Вопрос, как zswap из буфера в swap переносит страницы, в сжатом виде или нет. Если нет, то при жесткой нехватке памяти получится что сжатия нет вообще.

Deleted ()
Ответ на: комментарий от Deleted

zram: память -> сжатый swap раздел

Хм. Насколько я понял, zram: память -> сжатая память. На swap-раздел оно не попадает вообще.

Вопрос, как zswap из буфера в swap переносит страницы, в сжатом виде или нет

В сжатом.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Хм. Насколько я понял, zram: память -> сжатая память. На swap-раздел оно не попадает вообще.

Так-то да, но в данном случае на сжатом разделе у нас создан swap-раздел. А так там может быть что угодно. Поэтому zram универсальней.

Deleted ()
Ответ на: комментарий от Deleted

Так-то да, но в данном случае на сжатом разделе у нас создан swap-раздел.

Да. И что?

Поэтому zram универсальней.

Как раз zswap универсальней - он может хранить сжатые страницы памяти в RAM (в своем LRU) и может вытеснять эти страницы во внешнюю память. А zram умеет только первое.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Впервые слышу, что у zram ограничена степень сжатия.

Если ты так шутишь, то не смешно. На вопрос ответ «Степень сжатия может быть больше 2:1» на вопрос «чем это лучше zswap» означает, что у zram степень сжатия может быть больше 2:1, а не наоборот.

https://www.kernel.org/doc/Documentation/vm/zswap.txt

The zbud type zpool allocates exactly 1 page to store 2 compressed pages, which means the compression ratio will always be 2:1 or worse (because of half-full zbud pages). The zsmalloc type zpool has a more complex compressed page storage method, and it can achieve greater storage densities. However, zsmalloc does not implement compressed page eviction, so once zswap fills it cannot evict the oldest page, it can only reject new pages.

(Тут я перечитал последнее предложение снова, и начал сомневаться, правильно ли я его понял.)

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Да. И что?

Т.е. в swap оно таки попадает.

Как раз zswap универсальней

Я в том плане, что zram можно использовать не только для swap, но и для каких-нибудь других задач.

А zswap выполняет строго одну задачу. Но при этом настраиватся легче, но только при загрузке. zram можно увеличить, можно совсем убрать, прямо на живую.

Deleted ()
Последнее исправление: MyLittleLoli (всего исправлений: 1)
Ответ на: комментарий от Deleted

Т.е. в swap оно таки попадает

Каким образом? zram гарантированно размещается в свопабельной памяти?

tailgunner ★★★★★ ()
Ответ на: комментарий от surefire

Благодарю.

Хоть мне и не нравится, что там zswap в приоритете, я всё же гляну, как будет время.

r3lgar ★★★★★ ()
Ответ на: комментарий от tailgunner

Либо я тебя не понимаю, либо ты меня.

zram - блочное устройство в памяти. На нем мы создаем swap-раздел. Когда ядро решает, что пришло время свопиться, все происходит, грубо говоря, как обычно: память->swap. Но все это дело остается в памяти, само блочное устройство не свопится. До swap-раздела на диске дело не доходит, его может даже и не быть.

В случае zswap, есть еще промежуточный шаг, в виде буфера zswap, т.е. память->буфер zswap->swap. Тут swap-раздел насколько я понимаю, обязателен. Но он может быть хоть тем же разделом на zram-устройстве.

Deleted ()
Последнее исправление: MyLittleLoli (всего исправлений: 1)
Ответ на: комментарий от Deleted

До swap-раздела на диске дело не доходит, его может даже и не быть.

Это управляется приоритетом своп раздела и тем есть ли ещё в zram свободное место. так что может и дойти.

NextGenenration ★★ ()
Ответ на: комментарий от Radjah

Большое спасибо, после небольшого исследования интернета развил твой пример вот до такого состояния:

# Файл /etc/udev/rules.d/10-zram.rules
# Так же надо сделать записи в 
# Файл/etc/fstab
# /dev/zram0 none swap sw,pri=32767 0 1
# Файл /etc/modules
# zram
# Файл /etc/modprobe.d/zram.conf
# options zram num_devices=3 
#
# https://wiki.gentoo.org/wiki/Zram
# https://www.linux.org.ru/forum/general/13132596?cid=13133180
# Образец:
# KERNEL=="zram[0-9]*", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN="/sbin/mkswap -p4096 $env{DEVNAME}"
KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="1024M", RUN="/sbin/mkswap -p4096 $env{DEVNAME}"
KERNEL=="zram1", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="2048M"
KERNEL=="zram2", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="2048M"
В общем решил не рисковать и сделал zram0 в половину от объёма ОЗУ в компьютере.

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 2)
Ответ на: комментарий от r3lgar

ты понял, но опять всё не так делаешь

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.