Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 21 ноя 2017, 02:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 19:50 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Последние времена:

- RAM Linux обязательно перевалили минимум за 1Gb (ещё не так давно 256Mb было "за глаза"), нормой стало 4Gb, очень часто на типовом десктопе 8Gb или 16Gb ... про сервера здесь не говорим...
- многие переходят на быстрые твёрдотельные SSD диски.

В связи с этим очень говорят и пишут, даже очень авторитетные люди и источники, утверждают (и именно в такой формулировке):
Цитата:
У меня много оперативной памяти и диск SSD и именно поэтому у меня вообще нет swap и нет в нём нужды.


Я думаю (IMHO :!: ), что это принципиально неверно. И поэтому в деталях хотелось бы уточнить (и собрать из разных мест) всё о swap в этой теме:
1. обязателен ли swap?
2. какие есть способы (варианты) организации swap?
3. связано ли как-то использование swap с SSD?
4. какой размер выбирать для swap?
5. как управлять (оптимизировать) работой swap.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 20:17 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
1. обязателен ли swap?
2. какие есть способы (варианты) организации swap?
3. связано ли как-то использование swap с SSD?
4. какой размер выбирать для swap?

1. swap обязателен.
Вообще без swap систем может замечательно работать. И даже весьма долго... Но это до поры, до времени...
И падать система без свап никогда не будет.
Со swap как с понятием произошла дурная история, которая тянется ещё из Windows 3.11 ... с самим термином. Но swap Linux - это не выгрузка областей памяти на диск, а отображение логических страниц RAM на сектора диска (хотя при этом может происходить и выгрузка) - виртуализации.
При активной эксплуатации (в реальных условиях, а не "на поиграться") вся доступная RAM может исчерпаться практически на 100%. И тогда система истерически ищет хоть ненадолго освободить 1-2-3 физических страниц памяти, но без swap это невозможно, система начинает искать страницы, которые нужно просто утилизировать (самые неиспользуемые). и скорость системы может снизиться на 1-2-3 и более порядков! И выгребаться из этого состояния система может 1 минуту, 10 минут и т.д. ... и в это время вы не сможете вмешаться в её работу, её реакция отбита (или почти отбита).
(такую картину можно смоделировать если в современных браузерах открывать, открывать и открывать новые закладки ... и ещё при этом не перезагружать систему 2-3-5 дней ... в ждущем режиме)
Хуже того, что даже ядро Linux в некоторых случаях (достаточно редких) может потребовать загрузки-выгрузки образа страниц RAM. И здесь будут те же проблемы.
А при доступности swap таких эффектов не возникает.

3. SSD или не-SSD здесь вообще не при чём.
Увязывание SSD в контекст разговоров про swap связано, скорее всего, с опасением испортить SSD перезаписью. Но я где-то встречал оценки, что перезапись swap на современных (последних) SSD может его убить ... но случится это, скорее всего, лет через 99 непрерывной эксплуатации.
Но нужно поискать и уточнить такие оценки специально.

4. Когда-то, на заре Linux и Windows ... да и других систем, QNX, например, во всех них рекомендовали размер swap = 2 * RAM - в 2 раза больше оперативной памяти. Но это мотивировалось тем, что они хотели расширить размер небольшой памяти!
А на сегодня задача расширения большой памяти (4-8-16Gb) не стоит. А задача - подстраховаться на короткие периоды от клинча памяти, и освободить несколько страниц (по 4Kb для 32-бит, или 64Kb для 32-бит PAE) RAM. И вовсе не нужно, как советовали в древние времена, иметь swap размером в RAM*2 - более чем достаточно просто небольшого swap, скажем в 1Gb.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 21:43 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Тема очень актуальная!
Хотел этот же вопрос обсудить на форумах Mint, применительно к последним Mint (особенно в связи с тем, что в последних Ubuntu в качестве swap по умолчанию устанавливается файл, а не раздел)...

Но вот здесь, к примеру - Русский форум пользователей Linux Min - законченные дегенераты, ... они считают такие обсуждения флудом, отвлекающим их от обсуждения раскрасок свистелок и перделок.
Так что мнений из этого источника мы не узнаем. :evil:
Цитата:
Страна должна знать своих героев.

© И.В.Сталин


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 22:54 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
2. какие есть способы (варианты) организации swap?

1. Самый распространённый и популярный способ - выделение раздела диска. Это общеизвестно.

2. Наверное все знают другом способе - использовании для swap файла в файловой системе. Объявлено, что в Ubuntu последних версий этот способ используется по умолчанию. Я могу предположить, что это сделано именно из-за нарастающего распространения SSD, желания облегчить их от многократной перезаписи: swap-раздел всегда находится в ограниченном числе последовательных фиксированных секторов диска, а файл в файловой системе "разбросан", не располагается в последовательных секторах, и при перезаписи "размазывается" по диску. Это предположение (IMHO :!: ).

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       

Но в RPM дистрибутивах (Fedora 23) я его не вижу.

Текущий используемый swap смотрим:
Код:
[olej@dell .ssh]$ swapon -s
Имя файла            Тип      Размер   Исп-но   Приоритет
/dev/dm-0                                 partition   6288892   480   -1


4. Менее известно, что для swap могут одновременно использоваться несколько источников, которые могут быть разбросаны по разным ... "остаткам" на дисковых устройствах. Подключаются все они swapon, а отключаются, соответственно, swapoff (об этом позже).


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 23:25 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
5. как управлять (оптимизировать) работой swap.

Активность текущего использования swap смотрим легко:
Код:
[olej@dell ~]$ free
              total        used        free      shared  buff/cache   available
Mem:        8160932     3855356      229272      198868     4076304     3708128
Swap:       6288892         484     6288408

В ядре Linux есть такой параметр swappiness, который устанавливает значение в % (значение от 0 до 100) сколько должно в % остаться свободной памяти, когда начинать активно использовать виртуализацию страниц в swap.
Этот параметр отображается, и по чтению и по записи:
Код:
 
[olej@dell ~]$ cat /proc/sys/vm/swappiness
60

Это умалчиваемое обычное значение.
Если его уменьшить, это означает, что ядро начнёт агрессивно использовать swap когда останется 15% доступной RAM:
Код:
[root@dell ~]# echo 15 > /proc/sys/vm/swappiness
[olej@dell ~]$ cat /proc/sys/vm/swappiness
15

Но это можно проделать только с терминала, зарегистрированного как root, простое перенаправление с sudo здесь не проканывает:
Код:
[olej@dell ~]$ sudo echo 10 > /proc/sys/vm/swappiness
bash: /proc/sys/vm/swappiness: Отказано в доступе

Но если вы этого (регистрироваться как root) не хотите ... или затрудняетесь (в Ubuntu это можно, но с хлопотами), то этого можно добиться так:
Код:
[olej@dell ~]$ echo 10 | sudo tee /proc/sys/vm/swappiness
[sudo] пароль для olej:
10
[olej@dell ~]$ cat /proc/sys/vm/swappiness
10

Olej писал(а):
3. связано ли как-то использование swap с SSD?

В принципе, для SSD, пожалуй, этот параметр можно установить, например, в swappiness = 5, чтобы swap включался как можно позже и только в экстренных случаях.

При достаточно большой RAM и малых значениях swappiness реакция системы субъективно будет быстрее.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 23:40 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
Если его уменьшить, это означает, что ядро начнёт агрессивно использовать swap когда останется 15% доступной RAM:
Код:
[root@dell ~]# echo 15 > /proc/sys/vm/swappiness
[olej@dell ~]$ cat /proc/sys/vm/swappiness
15

...
При достаточно большой RAM и малых значениях swappiness реакция системы субъективно будет быстрее.

После этого действия, через некоторое время и запустив виртуальную машину под VirtualBox (для потребления памяти) увидим что-то такое:
Код:
[olej@dell ~]$ free
              total        used        free      shared  buff/cache   available
Mem:        8160932     4670500      131676      205148     3358756     2881484
Swap:       6288892         612     6288280

Код:
[olej@dell Linux.books.own]$ cat /proc/sys/vm/swappiness
10

131676 ÷ 8160932 ×100 = 16,13%


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 16 апр 2017, 23:53 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
В ядре Linux есть такой параметр swappiness, который устанавливает значение в % (значение от 0 до 100) сколько должно в % остаться свободной памяти, когда начинать активно использовать виртуализацию страниц в swap.
Этот параметр отображается, и по чтению и по записи:

Но если изменить значение swappiness как показано выше, то изменения будут действовать только до следующей перезагрузки, после чего опять восстановится умалчиваемое значение.
Чтобы желаемое вами значение для swappiness устанавливалось сразу после загрузки, нужно в конфигурационный файл /etc/sysctl.conf строку вида:
Код:
vm.swappiness=15


P.S. Если не хотите портить /etc/sysctl.conf, можно то же записать в любой файл (а ещё лучше добавить свой файл) в:
Код:
[olej@dell Privat.bank]$ ls /usr/lib/sysctl.d
00-system.conf  10-default-yama-scope.conf  50-coredump.conf  50-default.conf  60-libvirtd.conf

Или даже в каталог /run/sysctl.d/, но его обычно нет, и нужно создать.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 17 апр 2017, 21:00 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
2. Наверное все знают другом способе - использовании для swap файла в файловой системе. Объявлено, что в Ubuntu последних версий этот способ используется по умолчанию.

Создание и использование swapfile хорошо известно и описано. Общая схема выглядит так:
1. Создать сам файл:
Код:
[olej@dell 17]$ sudo dd if=/dev/zero of=/swapfile bs=1M count=500
[sudo] пароль для olej:
500+0 записей получено
500+0 записей отправлено
 скопировано 524288000 байт (524 MB), 0,239128 c, 2,2 GB/c

[olej@dell 17]$ ls -l /swapfile
-rw-r--r-- 1 root root 524288000 апр 17 20:38 /swapfile

2. Создать структуру свап-файла (разметка, форматирование?):
Код:
[olej@dell 17]$ sudo mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
без метки, UUID=ab4a48f4-1fdd-4486-850c-c8f4817cc747

3. Подключить его как swap:
Код:
[olej@dell 17]$ sudo swapon /swapfile
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
swapon: /swapfile: swapon failed: Недопустимый аргумент

4. Первую ошибку легко устранить:
Код:
[olej@dell 17]$ sudo chmod 0600 /swapfile
[olej@dell 17]$ ls -ln /swapfile
-rw------- 1 0 0 524288000 апр 17 20:40 /swapfile

... повторяем подключение swap:
Код:
[olej@dell 17]$ sudo swapon /swapfile
swapon: /swapfile: swapon failed: Недопустимый аргумент

Вот так! Облом... :cry:
Ответ находим:
Код:
[olej@dell ~]$ man swapon
...
       swapon may not work correctly when using a swap file with some versions of btrfs.  This is due to btrfs being a copy-
       on-write filesystem: the file location may not be static and corruption can result.  Btrfs actively disallows the use
       of swap files on its filesystems by refusing to map the file.
...
[olej@dell 17]$ mount | grep /dev/sd
/dev/sda5 on / type btrfs (rw,relatime,space_cache,subvolid=257,subvol=/root)
/dev/sda3 on /boot type ext4 (rw,relatime,data=ordered)

На btrfs создать swap нельзя! :-o


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: swap
Непрочитанное сообщениеДобавлено: 17 апр 2017, 23:40 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10219
Откуда: Харьков
Olej писал(а):
На btrfs создать swap нельзя! :-o

А теперь то же самое, но на другой системе с традиционной ext4:
Код:
olej@nvidia ~ $ mount | grep sd
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda2 on /home type ext4 (rw,relatime,data=ordered)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)

olej@nvidia ~ $ swapon -s
Filename            Type      Size   Used   Priority
/dev/sda3                                 partition   4606972   0   -1

olej@nvidia ~ $ free
              total        used        free      shared  buff/cache   available
Память:     4045840      472432     2633704       25404      939704     3300720
Подкачка:     4606972           0     4606972

Повторяем ту же последовательность:
Код:
olej@nvidia ~ $ sudo dd if=/dev/zero of=/swapfile bs=1M count=500
[sudo] пароль для olej:
500+0 записей получено
500+0 записей отправлено
524288000 байт (524 MB, 500 MiB) скопирован, 0,60167 s, 871 MB/s

olej@nvidia ~ $ sudo mkswap /swapfile
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
без метки, UUID=664baecc-ec29-42de-a0d1-1e89499c09da

olej@nvidia ~ $ sudo chmod 0600 /swapfile

olej@nvidia ~ $ ls -l /swapfile
-rw------- 1 root root 524288000 Апр 17 21:45 /swapfile

Подключаем:
Код:
olej@nvidia ~ $ sudo swapon -va /swapfile
swapon /swapfile
swapon: /swapfile: found swap signature: version 1d, page-size 4, same byte order
swapon: /swapfile: pagesize=4096, swapsize=524288000, devsize=524288000

olej@nvidia ~ $ swapon -s
Filename            Type      Size   Used   Priority
/dev/sda3                                 partition   4606972   0   -1
/swapfile                                 file       511996   0   -2

olej@nvidia ~ $ free
              total        used        free      shared  buff/cache   available
Память:     4045840      472668     2633388       25404      939784     3300448
Подкачка:     5118968           0     5118968

Теперь используются одновременно 2 swap ... пространства.
А теперь старый раздел убираем из swap:
Код:
olej@nvidia ~ $ sudo swapoff /dev/sda3

olej@nvidia ~ $ swapon -s
Filename            Type      Size   Used   Priority
/swapfile                                 file       511996   0   -1

olej@nvidia ~ $ free
              total        used        free      shared  buff/cache   available
Память:     4045840      474000     2631852       25404      939988     3299188
Подкачка:      511996           0      511996


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.253s | 17 Queries | GZIP : On ]