swap

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

Модератор: Olej

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

Re: swap

Непрочитанное сообщение Olej » 14 мар 2019, 12:17

Olej писал(а): 3. Не очень известно, что есть такой проект-модуль zRam. В случае использования zRam, swap будет находиться в специальном сжатом разделе оперативной памяти. Как утверждают, этот вариант прекрасно подойдет для нетбуков, имеющих 2Гб ОЗУ.
Подробнее см. здесь своп в оперативную память - модуль zRam.
Этот проект включен в стандартные репозитории некоторых дистрибутивов:
Это Mint 17.3:

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

olej@atom ~ $ apt search zram-*
p   zram-config                     - Upstart job to enable zram support   
Это Mint 18.1:

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

olej@nvidia ~ $ apt search zram-*
p   zram-config                     - Upstart job to enable zram support        
Хорошее внятное описание механизмов свопирования в память, включённых в ядро Linux:
Zram и Zswap или как увеличить эффективность оперативной памяти
ВТОРНИК, 15 ДЕКАБРЯ 2015 Г.
Здесь в форуме есть уже отдельная тема: своп в оперативную память - модуль zRam, поэтому детальнее - там.

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

Re: swap

Непрочитанное сообщение Olej » 14 мар 2019, 13:15

Olej писал(а): 1. обязателен ли swap?
Интереснейший эффект (показательнейший пример отказа от swap!) наблюдается при инсталляции пакета Dlib (распознавание лиц) на одноплатном ARM DragonBoard 410c: распознавание лиц. Эта инсталляция пакета сопряжена с очень большим объёмом компиляции. Даже на очень быстром стационарном компьютере это занимает до 10 минут процессорного времени...
... хоть при установке из пакетной системы:

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ sudo time pip3 install Dlib
Collecting Dlib
  Using cached https://files.pythonhosted.org/packages/35/8d/e4ddf60452e2fb1ce3164f774e68968b3f110f1cb4cd353235d56875799e/dlib-19.16.0.tar.gz
Building wheels for collected packages: Dlib
  Running setup.py bdist_wheel for Dlib ... /
done
  Stored in directory: /root/.cache/pip/wheels/ce/f9/bc/1c51cd0b40a2b5dfd46ab79a73832b41e7c3aa918a508154f0
Successfully built Dlib
Installing collected packages: Dlib
Successfully installed Dlib-19.16.0
832.81user 20.58system 7:19.06elapsed 194%CPU (0avgtext+0avgdata 1496724maxresident)k
115936inputs+528880outputs (434major+8825255minor)pagefaults 0swaps
... хоть при сборке самой последней версии из исходников:

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ git clone https://github.com/davisking/dlib
Клонирование в «dlib»…
remote: Enumerating objects: 46806, done.
remote: Total 46806 (delta 0), reused 0 (delta 0), pack-reused 46806
Получение объектов: 100% (46806/46806), 21.96 MiB | 2.01 MiB/s, готово.
Определение изменений: 100% (32895/32895), готово.

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ cd dlib

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL/dlib$ time sudo python3 setup.py build
running build
running build_py
package init file 'dlib/__init__.py' not found (or not a regular file)
running build_ext
Building extension for Python 3.7.2rc1 (default, Dec 12 2018, 06:25:49)
...
[100%] Built target dlib_python

real    7m44,373s
user    14m8,277s
sys     0m22,124s
Естественно, что на одноплатном DragonBoard 410c, с дохленьким ARM процессором и 1Gb RAM, это может занимать несколько часов.

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

Re: swap

Непрочитанное сообщение Olej » 14 мар 2019, 13:27

Olej писал(а):Естественно, что на одноплатном DragonBoard 410c, с дохленьким ARM процессором и 1Gb RAM, это может занимать несколько часов.
Но!
Наблюдая командой top за загрузкой процессов, обнаруживаем, что поток ядра kswapd0 занимает (меняется, прыгает) 90% и 95% времени процессора. А это значит, что 90-95% времени система, установленная в EMM память без свопа занимается "тасовкой" активных и неактивных страниц RAM!

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

linaro@linaro-alip:~/FaceDL/dlib$ top

Tasks: 127 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 26.4 sy,  0.0 ni, 51.4 id, 20.6 wa,  0.9 hi,  0.6 si,  0.0 st
KiB Mem :   947380 total,    30484 free,   892304 used,    24592 buff/cache
KiB Swap:        0 total,        0 free,        0 used.     2792 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                              
  689 root      20   0       0      0      0 S  95.2  0.0   5:11.30 kswapd0                                                              
 1501 root      20   0       0      0      0 S   8.5  0.0   0:22.07 mmcqd/0                                                              
 5364 root      20   0  817896 764428   1556 D   4.4 80.7   1:29.70 cc1plus                                                              
 5065 linaro    20   0    7876    700     72 R   3.3  0.1   0:13.32 top                                                                  
 2008 root      20   0  470576   3472      0 S   0.4  0.4   1:02.94 NetworkManager                                
И только после того, как я:
- установил SD-карту в держатель платы...
- создал раздел для свопа...
- подготовил этот раздел для свопа (это эквивалентно форматированию для раздела данных)...

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

$ mkswap /dev/mmcblk1p2
- назначил своп системы на этот раздел...

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

$ swapon /dev/mmcblk1p2

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

linaro@linaro-alip:~/FaceDL/dlib$ sudo swapon --show
NAME           TYPE      SIZE USED PRIO
/dev/mmcblk1p2 partition 9.2G   0B   -2
Только тогда:

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

top - 10:57:02 up 15:34,  4 users,  load average: 0.81, 0.42, 0.85
Tasks: 132 total,   2 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.7 sy, 24.0 ni, 73.6 id,  0.2 wa,  0.9 hi,  0.5 si,  0.0 st
KiB Mem :   947380 total,    36856 free,   874064 used,    36460 buff/cache
KiB Swap:  9681916 total,  9608444 free,    73472 used.    17228 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                          
 5517 root      39  19  854412 813064  12052 R  97.4 85.8   1:27.30 cc1plus                                                          
  689 root      20   0       0      0      0 S   0.3  0.0   8:55.57 kswapd0                                                          
 2008 root      20   0  470576    132      0 S   0.3  0.0   1:09.91 NetworkManager                                                   
 5040 linaro    20   0   15152    640    568 S   0.3  0.1   0:00.50 mc                                                               
 5418 root      20   0       0      0      0 S   0.3  0.0   0:00.08 mmcqd/1                                                          
 5519 linaro    20   0    7876   1828   1192 R   0.3  0.2   0:00.57 top                                                              
    1 root      20   0  160640    280      0 S   0.0  0.0   0:05.22 systemd                                                          
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.10 kthreadd                                                         
...
И при этом сборка шла >2 часов непрерывного времени! (это последняя попытка make после предыдущих 30m):

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

...
real	97m4.898s
user	69m43.846s
sys	2m50.426s
А без свопа она бы продолжалась 2х(10-20) = 20-40 часов, т.е. 1-2 суток! ... если оно вообще когда-то закончится...

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

Re: swap

Непрочитанное сообщение Olej » 14 мар 2019, 13:45

Olej писал(а):А без свопа она бы продолжалась 2х(10-20) = 20-40 часов, т.е. 1-2 суток! ... если оно вообще когда-то закончится...
Это "в натуре" наблюдается тот эффект, который известен и называется пробуксовка:
Подкачка страниц
Системы с виртуальной памятью работают эффективно, когда сумма рабочих множеств всех процессов не превышает размер физической оперативной памяти. В этом случае время, требуемое на обработку отказов страниц не оказывает большого влияния на производительность. Однако, программа, работающая с большими структурами данных, может иметь слишком большой рабочий набор, который система подкачки не сможет эффективно обслуживать. Это приведет к непрерывному потоку отказов страниц и резкому снижению производительности компьютера. Такая ситуация называется пробуксовкой: страницы непрерывно выгружаются, а затем к ним происходит обращение, вызывая частые отказы страниц.

Интересной особенностью пробуксовки является медленный до определенной критической точки рост числа отказов страниц по мере роста рабочего множества. После достижения этой критической точки число отказов страниц резко возрастает и на их обработку тратится большая часть вычислительной мощности.
Пробуксовка (информатика)
Однако если сумма рабочих множеств всех процессов превышает объём оперативной памяти, резко возрастает вероятность отказа страницы, то есть отсутствия требуемой страницы в оперативной памяти. Происходит постоянная загрузка страниц рабочих множеств активных процессов и выгрузка страниц неактивных процессов. Поскольку загрузка страницы с внешнего носителя на несколько порядков медленнее обращения к оперативной памяти, производительность компьютера резко падает. Загрузка процессора при этом невысока. Такое состояние и называется пробуксовкой.
Такая же симптоматика наблюдается, очень редко, и на стационарном десктопе, сколько много RAM там не было бы установлено: 8G, 16Gb, 32Gb, ... - но всегда можно дойти до такой загрузки, когда возникнет пробуксовка - например, просто элементарным открытием всё новых и новых вкладок в браузере ... при некотором числе (большом: 50, 100, ...) страниц система впадёт в пробуксовку.
Болезненность такого состояния в том, что когда оно резко возникнет, вы уже практически не можете её вернуть обратно: реакция на действия пользователя замедляется в 1000, 10000 и т.д. раз, движение мышки требует 20-40 секунд, закрытие окна ("крестом") - 2-3 минуты... Фактически, выручает только перезагрузка кнопкой Reset!
Если такое впадание в ступор произойдёт одновременно с выполняющимся (начавшимся, но не завершившимся) банковским переводом денег, то последствия непредсказуемы и могут быть трагическими! :-o :cry:

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

Re: swap

Непрочитанное сообщение Olej » 14 мар 2019, 15:00

Olej писал(а): Если такое впадание в ступор произойдёт одновременно с выполняющимся (начавшимся, но не завершившимся) банковским переводом денег, то последствия непредсказуемы и могут быть трагическими! :-o :cry:
Интересный свежий перевод относительно а). необходимости swap, б). его размера и в). настроек его использования:
В защиту swap'а [в Linux]: распространенные заблуждения
8 февраля 2018 в 11:24
И ещё... Оптимальный размер swap в Linux для современных компьютеров
Например, специалисты Red Hat рекомендуют использовать 20% от RAM, но при условии, что компьютер является современным. Под современным инженеры RH понимают такие, в которых установлено 4 Гб и более.
Разработчики CentOS рекомендуют другую формулу: удваивайте объем ОЗУ, если на компьютере 2 Гб и менее. Если более, используйте формулу: объем ОЗУ + еще 2 Гб. Например, в системе 4 Гб оперативной памяти, тогда создавайте своп на 6.
Программисты Canonical советуют диапазон: от квадратного корня из объема RAM до удвоенного значения. Это при условии, что памяти больше, чем 1 Гб. В противном случае удваивать память.
Это границы ... от ... и до ...
Итого, например, при 8Gb RAM (это вскре станет нормой) это от 1.6Gb (RedHat) и от 2.8Gb (Canonical) ... до 10Gb (CentOS).
(а для 4Gb RAM, соответственно, от 0.8Gb - 2Gb до 6Gb)

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

Re: swap

Непрочитанное сообщение Olej » 16 июн 2019, 11:29

Olej писал(а): В ядре Linux есть такой параметр swappiness, который устанавливает значение в % (значение от 0 до 100) сколько должно в % остаться свободной памяти, когда начинать активно использовать виртуализацию страниц в swap.
И, кстати, интересный вопрос: какие значения swappiness будут оптимальны ... для рабочей станции, скажем ... при очень разных значениях RAM (1, 2, 4, 8, 16,...64, ...)?
Значение по умолчанию - 60, swap начинает использоваться когда в системе остаётся свободных 60% RAM. Это означает, что в системе с 16Gb RAM (а сейчас это не редкость, а вскоре станет обыденностью) swap начинает использоваться когда в системе остаётся свободных ещё 9.6Gb (почти 10Gb).
Так тогда зачем мы тратились на последние 8Gb? :lol:

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

Re: swap

Непрочитанное сообщение Olej » 16 июн 2019, 13:42

Вот, подсказали, любопытный проект (GIT): Swapspace
A fork of Jeroen T. Vermeulen's excellent dynamic swap space manager
Изображение
Swapspace - dynamic swap manager for Linux
...
Copyright (C) 2005, 2006 Software Industry Promotion Agency (SIPA), Thailand.
Copyright (C) 2010, 2012 Jeroen T. Vermeulen.
Written by Jeroen T. Vermeulen.
Maintained by Jacob Adams.
Последние изменения src - месяц назад...

Вот страница проекта - Swapspace: a Dynamic Swap Manager for GNU/Linux
This project is no longer being maintained. I think it's shown itself to be stable and useful over time, and needed only minimal changes, but I'm not going to build new features and even bug fixes at this point are unlikely. Feel free to fork the project, however, and continue to improve it!

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

Re: swap

Непрочитанное сообщение Olej » 16 июн 2019, 13:57

Olej писал(а): Вот страница проекта - Swapspace: a Dynamic Swap Manager for GNU/Linux
Там же:
The swapspace daemon has been in production use for several months on various 32-bit architectures before it was first released to the public, and has been tested with swapfiles larger than can be addressed in 32 bits. Some statistics for one test on a 32-bit PC with 1 gigabyte of memory:
Number of swapfiles 25
Largest swapfile 5.6 GB
Total swap allocated 44 GB
In other words, applications on this 1 GB desktop computer took up a whopping (by 2005 standards) 44 GB of memory space without falling over. They weren't very fast, of course, having to swap so much; but they did keep running.
На 1Gb компьютере приложения пользуют 44Gb RAM ...

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

Re: swap

Непрочитанное сообщение Olej » 16 июн 2019, 13:58

Olej писал(а):Вот, подсказали, любопытный проект (GIT): Swapspace
Кстати, пакет этот есть в стандартном репозитории Debian 10:

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

olej@ACER:~$ aptitude search Swapspace
p   swapspace                                                                 - dynamic swap space manager                                                          

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

olej@ACER:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

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

Re: swap

Непрочитанное сообщение Olej » 02 июл 2019, 16:27

Есть (из описанного выше), как минимум, 5 альтернативные (на выбор!) способов организации swap:
1. раздел (partition)
2. файл (файл - фиксированный, поэтому, вопреки бытующему мнению, скорость его не должна быть ниже раздела);
3. Zram
4. Zswap
5. проект Swapspace
Причём, некоторые из них могут использоваться на компьютере совместно, например: 1+3, 2+3, ...

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

olej@ACER:~$ /sbin/swapon -s
Имя файла                Тип        Размер    Исп-но    Приоритет
/dev/sda3                                  partition    12456956    0    -2
/dev/zram0                                 partition    131068    0    100
/dev/zram1                                 partition    131068    0    100

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

olej@ACER:~$ ls -l /dev/zram*
brw-rw---- 1 root disk 254, 0 июл  2 12:01 /dev/zram0
brw-rw---- 1 root disk 254, 1 июл  2 12:01 /dev/zram1

olej@ACER:~$ ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 июл  2 12:01 /dev/sda
brw-rw---- 1 root disk 8, 1 июл  2 12:01 /dev/sda1
brw-rw---- 1 root disk 8, 2 июл  2 12:01 /dev/sda2
brw-rw---- 1 root disk 8, 3 июл  2 12:01 /dev/sda3
brw-rw---- 1 root disk 8, 4 июл  2 12:01 /dev/sda4
По отзывам, при использовании, например, Zswap скорость выполнения больших GUI программ субъективно (на глаз) значительно возрастает, особенно на малых конфигурациях, с RAM 1-4Gb.
Хотелось бы сообразить, как вместо этого субъективно проверять (сравнивать) это объективно, в конкретной конфигурации конкретного компьютера? Какими экспериментами?

Ответить

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

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

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