своп в оперативную память - модуль zRam | zSwap

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 05 июл 2019, 01:06

Как использовать Zram (модуль ядра zram) вручную, без установочного пакета (когда его нет, например, в репозитории)?
А вот так (это я устанавливал в Astra Linux CE - это Debian 9 ... но это не имеет большого значения):

Код: Выделить всё

root@astra:/etc/apt/sources.list.d# modprobe --all lz4 lzo deflate zram

root@astra:/etc/apt/sources.list.d# lsmod | grep zram
zram                   24576  0

root@astra:/etc/apt/sources.list.d# cat /sys/block/zram0/comp_algorithm
[lzo] lz4 lz4hc 842 zstd

root@astra:/etc/apt/sources.list.d# echo 500m >/sys/block/zram0/disksize

root@astra:/etc/apt/sources.list.d# echo 300m >/sys/block/zram0/mem_limit

root@astra:/etc/apt/sources.list.d# mkswap /dev/zram0
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
без метки, UUID=c8071abb-8df6-4cd7-ba83-c0c985e1793c

root@astra:/etc/apt/sources.list.d# swapon -p10 /dev/zram0

root@astra:/etc/apt/sources.list.d# swapon -s
Имя файла                               Тип             Размер  Исп-но  Приоритет
/dev/sda5                               partition       4191228 0       -2
/dev/zram0                              partition       511996  0       10

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 05 июл 2019, 01:18

Olej писал(а):Как использовать Zram (модуль ядра zram) вручную,
Там настроечных параметров - уйма:

Код: Выделить всё

olej@ACER:~$ tree /sys/block/zram0/
/sys/block/zram0/
├── alignment_offset
├── backing_dev
├── bdi -> ../../bdi/254:0
├── capability
├── compact
├── comp_algorithm
├── debug_stat
├── dev
├── discard_alignment
├── disksize
├── ext_range
├── hidden
├── holders
├── inflight
├── initstate
├── integrity
│   ├── device_is_integrity_capable
│   ├── format
│   ├── protection_interval_bytes
│   ├── read_verify
│   ├── tag_size
│   └── write_generate
├── io_stat
├── max_comp_streams
├── mem_limit
├── mem_used_max
├── mm_stat
├── power
│   ├── async
│   ├── autosuspend_delay_ms
│   ├── control
│   ├── runtime_active_kids
│   ├── runtime_active_time
│   ├── runtime_enabled
│   ├── runtime_status
│   ├── runtime_suspended_time
│   └── runtime_usage
├── queue
│   ├── add_random
│   ├── chunk_sectors
│   ├── dax
│   ├── discard_granularity
│   ├── discard_max_bytes
│   ├── discard_max_hw_bytes
│   ├── discard_zeroes_data
│   ├── fua
│   ├── hw_sector_size
│   ├── io_poll
│   ├── io_poll_delay
│   ├── iostats
│   ├── logical_block_size
│   ├── max_discard_segments
│   ├── max_hw_sectors_kb
│   ├── max_integrity_segments
│   ├── max_sectors_kb
│   ├── max_segments
│   ├── max_segment_size
│   ├── minimum_io_size
│   ├── nomerges
│   ├── nr_requests
│   ├── optimal_io_size
│   ├── physical_block_size
│   ├── read_ahead_kb
│   ├── rotational
│   ├── rq_affinity
│   ├── scheduler
│   ├── wbt_lat_usec
│   ├── write_cache
│   ├── write_same_max_bytes
│   ├── write_zeroes_max_bytes
│   └── zoned
├── range
├── removable
├── reset
├── ro
├── size
├── slaves
├── stat
├── subsystem -> ../../../../class/block
├── trace
│   ├── act_mask
│   ├── enable
│   ├── end_lba
│   ├── pid
│   └── start_lba
└── uevent

8 directories, 78 files

Код: Выделить всё

olej@ACER:~$ cat /sys/block/zram0/comp_algorithm
[lzo] lz4 lz4hc 

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 05 июл 2019, 01:44

Olej писал(а):Как использовать Zram (модуль ядра zram) вручную,

Код: Выделить всё

olej@ACER:~$ /sbin/modinfo zram
filename:       /lib/modules/4.19.0-5-amd64/kernel/drivers/block/zram/zram.ko
description:    Compressed RAM Block Device
author:         Nitin Gupta <ngupta@vflare.org>
license:        Dual BSD/GPL
depends:        zsmalloc
retpoline:      Y
intree:         Y
name:           zram
vermagic:       4.19.0-5-amd64 SMP mod_unload modversions 
sig_id:         PKCS#7
signer:         Debian Secure Boot CA
sig_key:        A7:46:8D:EF
sig_hashalgo:   sha256
signature:      67:71:B0:10:15:13:0F:ED:EE:7F:3D:90:92:7E:A7:17:18:10:1E:26:
		E4:30:A0:07:09:54:CC:B8:35:53:D3:71:32:28:EA:92:A6:6B:D8:8A:
		C6:76:A4:E8:63:D3:E7:17:F3:B0:ED:C9:FC:24:91:E9:C8:EA:F4:79:
		20:E8:E4:A1:1B:92:91:80:B7:50:59:B2:1B:81:4A:E1:1C:DA:2E:68:
		5F:C4:EE:93:C6:4C:A8:DD:01:20:FA:54:52:4E:21:81:6D:50:72:31:
		EF:C7:59:01:B0:23:32:C7:4A:56:75:1C:93:A0:6F:F4:9E:03:04:C5:
		60:E6:A0:DF:AA:31:D4:B4:8D:08:A6:B1:DC:0C:29:D0:B2:08:6C:4C:
		01:6C:F0:C0:39:3E:B5:66:2A:98:7B:79:0B:21:B8:DA:0A:41:4D:D8:
		5A:23:17:A2:63:35:82:2F:71:7C:A4:9B:D8:D1:91:F8:3D:6B:48:9D:
		F4:CF:55:2F:52:5B:46:CC:A5:7F:51:F8:C2:4B:E7:BE:0B:D7:7A:22:
		09:39:92:B7:73:C3:76:1C:F4:FE:46:05:CC:44:5C:71:B1:38:59:D5:
		73:B8:11:AB:5B:44:B0:92:00:CE:C4:EC:7C:98:C7:BB:97:C4:05:48:
		38:8A:1F:AD:CE:B2:A4:42:8C:A1:56:57:1B:5B:8A:02
parm:           num_devices:Number of pre-created zram devices (uint)
Параметр num_devices - это число создаваемых /dev/zramN ... как-то так:

Код: Выделить всё

# modprobe zram num_devices=4

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 авг 2020, 12:51

Использование ZRAM в свежем дистрибутиве Mint 20 в деталях с копи-паст здесь: Mint 20

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 авг 2020, 15:23

Olej писал(а):
01 авг 2020, 12:51
Использование ZRAM в свежем дистрибутиве Mint 20 в деталях скопи-паст здесь: Mint 20
Интересно ведёт себя ZRAM при последовательном заполнении памяти...
Изначально:

Код: Выделить всё

root@nvidia:/etc# swapon
NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition  64M   0B    5
/dev/zram1 partition  64M   0B    5
/dev/zram2 partition  64M   0B  100
/dev/zram3 partition  64M   0B  100

root@nvidia:/etc# free
              всего        занято        свободно      общая  буф./врем.   доступно
Память:     3887920     2120476      323768      216516     1443676     1293164
Подкачка:      262128           0      262128
4 устройства ... почему он стартовал с такими хитрыми приоритетами - для меня загадка: всё установлено из пакетной системы по дефаулту...
Загружаются почта, 2 месенджера (Viber & Telegram):

Код: Выделить всё

root@nvidia:/etc# swapon
NAME       TYPE      SIZE  USED PRIO
/dev/zram0 partition  64M    0B    5
/dev/zram1 partition  64M    0B    5
/dev/zram2 partition  64M 16,3M  100
/dev/zram3 partition  64M   16M  100
Открывается пара-тройка десятков вкладок в Opera:

Код: Выделить всё

root@nvidia:/etc# swapon
NAME       TYPE      SIZE  USED PRIO
/dev/zram0 partition  64M  2,5M    5
/dev/zram1 partition  64M  2,5M    5
/dev/zram2 partition  64M 62,4M  100
/dev/zram3 partition  64M 62,8M  100

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 авг 2020, 17:03

Olej писал(а):
01 авг 2020, 15:23
4 устройства ... почему он стартовал с такими хитрыми приоритетами - для меня загадка: всё установлено из пакетной системы по дефаулту..
Управление:

Код: Выделить всё

root@nvidia:/sys/block/zram0# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	65532	28924	5
/dev/zram1                              partition	65532	28932	5
/dev/zram2                              partition	65532	62252	100
/dev/zram3                              partition	65532	62476	100
Остановили:

Код: Выделить всё

root@nvidia:/sys/block/zram0# swapoff -v /dev/zram0
swapoff /dev/zram0
Переопределили и запустили:

Код: Выделить всё

root@nvidia:/sys/block/zram0# swapon -p120 -v /dev/zram0
swapon: /dev/zram0: found signature [pagesize=4096, signature=swap]
swapon: /dev/zram0: pagesize=4096, swapsize=67108864, devsize=67108864
swapon /dev/zram0

Код: Выделить всё

root@nvidia:/sys/block/zram0# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	65532	0	120
/dev/zram1                              partition	65532	28528	5
/dev/zram2                              partition	65532	63716	100
/dev/zram3                              partition	65532	63876	100
Через некоторое короткое время:

Код: Выделить всё

root@nvidia:/sys/block/zram0# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	65532	5120	120
/dev/zram1                              partition	65532	28528	5
/dev/zram2                              partition	65532	63716	100
/dev/zram3                              partition	65532	63876	100

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam

Непрочитанное сообщение Olej » 01 авг 2020, 17:18

Olej писал(а):
14 мар 2019, 12:22
Хорошее внятное описание механизмов свопирования в память, включённых в ядро Linux:
Zram и Zswap или как увеличить эффективность оперативной памяти
zram и zswap
zram создает виртуальный сжатый свап в оперативке, этим самым увеличивая размер свапа. Сначала используется виртуальный, а если его не хвататет, то уже реальный.

zswap требует обязательно наличие настоящего свапа. Он тоже создает пул в оперативке и по своему алгоритму сбрасывает в реальный свап страницы при необходимости.

На мой взгляд zswap лучше в том случае, когда свап довольно быстрый (SSD) и бывают ситуации, когда он реально будет использоваться. Например запуск виртуалок. А zram удобнее тогда, когда нужно постараться максимально исключить использоватия свапа на диске. Типичный пример 4 гига для серфинга и например либры. Обычно zram для этого хватает вообще без сваппинга. Ну а иметь реальный свап для того, чтобы система не грохнулась, если совсем всё забить. То есть на крайний случай.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam | zSwap

Непрочитанное сообщение Olej » 01 авг 2020, 17:52

Olej писал(а):
01 авг 2020, 17:03
Управление:
Попалась на глаза краткая но достаточная инструкция по управлению ZRAM: Linux: ускоряем систему...
Для управления ZRAM есть утилита:

Код: Выделить всё

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ which zramctl
/sbin/zramctl
Установилась, как ни странно, с пакетом:

Код: Выделить всё

olej@nvidia:~$ apt-file find zramctl
manpages-de: /usr/share/man/de/man8/zramctl.8.gz
util-linux: /sbin/zramctl
util-linux: /usr/share/bash-completion/completions/zramctl
util-linux: /usr/share/man/man8/zramctl.8.gz
Изначально:

Код: Выделить всё

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ zramctl
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram3 lzo-rle        64M 63,9M  4,1M  4,6M       4 [SWAP]
/dev/zram2 lzo-rle        64M 63,9M    4M  4,6M       4 [SWAP]
/dev/zram1 lzo-rle        64M 63,9M 14,7M 15,7M       4 [SWAP]
/dev/zram0 lzo-rle        64M   64M 16,4M 17,5M       4 [SWAP]
Сбросим одно устройство (всё "на ходу"):

Код: Выделить всё

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ sudo zramctl /dev/zram0 -r  

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ zramctl
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram3 lzo-rle        64M 63,9M  4,1M  4,6M       4 [SWAP]
/dev/zram2 lzo-rle        64M 63,9M    4M  4,6M       4 [SWAP]
/dev/zram1 lzo-rle        64M 63,9M 14,7M 15,7M       4 [SWAP]

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ sudo swapon -p 105 /dev/zram0  
swapon: невозможно открыть /dev/zram0: Нет такого файла или каталога
Теперь можем поменять любые или все параметры будущего устройства (даже алгоритм сжатия):

Код: Выделить всё

olej@nvidia:~$ sudo zramctl -f -s 115M -t 3 -a lz4hc
/dev/zram0

olej@nvidia:~$ zramctl 
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4hc         115M    0B    0B    0B       4 
/dev/zram3 lzo-rle        64M 63,9M  4,1M  4,6M       4 [SWAP]
/dev/zram2 lzo-rle        64M 63,9M    4M  4,6M       4 [SWAP]
/dev/zram1 lzo-rle        64M 63,8M 14,7M 15,7M       4 [SWAP]
Но это ещё не swap-устройство!
Отформатировали блочное устройство:

Код: Выделить всё

olej@nvidia:~$ sudo mkswap /dev/zram0
Setting up swapspace version 1, size = 115 MiB (120582144 bytes)
без метки, UUID=028057be-3118-4580-9e11-00f8779efc51
Объявили его активным swap-устройством:

Код: Выделить всё

olej@nvidia:~$ sudo swapon /dev/zram0
В итоге:

Код: Выделить всё

olej@nvidia:~$ zramctl 
NAME       ALGORITHM DISKSIZE  DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4hc         115M    4K   61B    4K       4 [SWAP]
/dev/zram3 lzo-rle        64M 63,9M  4,1M  4,6M       4 [SWAP]
/dev/zram2 lzo-rle        64M 63,9M    4M  4,6M       4 [SWAP]
/dev/zram1 lzo-rle        64M 63,8M 14,7M 15,7M       4 [SWAP]

Код: Выделить всё

olej@nvidia:~$ cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	117756	109568	-2
/dev/zram1                              partition	65532	65532	5
/dev/zram2                              partition	65532	65532	100
/dev/zram3                              partition	65532	65532	100
Приоритет нужно устанавливать явно в команде swapon! (остановили - переопределили - запустили) :

Код: Выделить всё

olej@nvidia:~$ sudo swapoff /dev/zram0

olej@nvidia:~$ sudo swapon -p135 /dev/zram0

olej@nvidia:~$ cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	117756	0	135
/dev/zram1                              partition	65532	65524	5
/dev/zram2                              partition	65532	65532	100
/dev/zram3                              partition	65532	65532	100

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam | zSwap

Непрочитанное сообщение Olej » 01 авг 2020, 18:14

Olej писал(а):
01 авг 2020, 17:52

Код: Выделить всё

olej@nvidia:~$ cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	117756	0	135
/dev/zram1                              partition	65532	65524	5
/dev/zram2                              partition	65532	65532	100
/dev/zram3                              partition	65532	65532	100
И очень скоро это станет:

Код: Выделить всё

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ zramctl
NAME       ALGORITHM DISKSIZE   DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4hc         115M 114,9M 28,2M 29,8M       4 [SWAP]
/dev/zram3 lzo-rle        64M    64M    5M  5,5M       4 [SWAP]
/dev/zram2 lzo-rle        64M    64M  4,9M  5,4M       4 [SWAP]
/dev/zram1 lzo-rle        64M  63,9M 14,9M 15,9M       4 [SWAP]

olej@nvidia:~/2020_WORK/rus.linux.net.hist/timeweb/backups$ zramctl --help
...
Использование:
 zramctl [параметры] <устройство>
 zramctl -r <устройство> [...]
 zramctl [параметры] -f | <устройство> -s <размер>
...
Доступные столбцы вывода:
        NAME  имя zram-устройства
    DISKSIZE  лимит несжатого количества данных
        DATA  несжатый размер хранимых данных
       COMPR  сжатый размер хранимых данных
   ALGORITHM  выбранный алгоритм сжатия
     STREAMS  количество одновременных операций сжатия
  ZERO-PAGES  empty pages with no allocated memory
       TOTAL  all memory including allocator fragmentation and metadata overhead
   MEM-LIMIT  лимит памяти для хранения сжатых данных
    MEM-USED  память, использованная zram для хранения сжатых данных
    MIGRATED  number of objects migrated by compaction
  MOUNTPOINT  куда примонтировано устройство

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: своп в оперативную память - модуль zRam | zSwap

Непрочитанное сообщение Olej » 01 авг 2020, 20:35

Olej писал(а):
01 авг 2020, 17:03

Код: Выделить всё

root@nvidia:/sys/block/zram0# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/zram0                              partition	65532	5120	120
/dev/zram1                              partition	65532	28528	5
/dev/zram2                              partition	65532	63716	100
/dev/zram3
Всё-таки Mint 20 "завяз" при такой чисто виртуальной организации swap...
Olej писал(а):
01 авг 2020, 17:18
zram создает виртуальный сжатый свап в оперативке, этим самым увеличивая размер свапа. Сначала используется виртуальный, а если его не хвататет, то уже реальный.
... и вернул таки запись в /etc/fstab:

Код: Выделить всё

olej@nvidia:~$ cat /etc/fstab
...
# swap was on /dev/sda3 during installation
UUID=692eb628-1869-49e5-af7f-2b9dbd034471 none            swap    sw              0       0
...
После чего:

Код: Выделить всё

olej@nvidia:~$ sudo swapon -a
И стало:

Код: Выделить всё

olej@nvidia:~$ free
              всего        занято        свободно      общая  буф./врем.   доступно
Память:     3887920     1677132     1503520      157272      707268     1825088
Подкачка:     6550924      426496     6124428

olej@nvidia:~$ swapon -s
Имя файла				Тип		Размер	Исп-но	Приоритет
/dev/zram0                             	partition	485988	140968	100
/dev/zram1                             	partition	485988	142224	100
/dev/zram2                             	partition	485988	0	5
/dev/zram3                             	partition	485988	143304	100
/dev/sda3                              	partition	4606972	0	-2
Т.е.: поначалу свопируем в ZRAM ... а когда его не хватает - начинаем свопировать в реальный раздел/файл.

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя