LINUX.ORG.RU

Хочу разобраться со Swap в Fedora

 ,


0

1

У меня 16 GB RAM. При установке я создал раздел на 20 GB и назначил его как swap. Суть проблемы в том, что этот раздел никак не используется, на нём всегда по нулям. Правда не пробовал превышать память, боюсь oom killer-а, но даже без превышения я ожидаю, что ядро будет использовать своп. Так всегда было. А в Fedora почему-то не так. Как я вижу, она ещё создала swap на ZRAM, в моём понимании это по сути сжатие неиспользуемой памяти, я не против этой технологии, но во-первых она не должна в моём понимании заменять своп, во-вторых этот swap тоже не используется.

Вот пример, система работала 32 часа.

$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       2.3Gi       7.4Gi       382Mi       5.6Gi        12Gi
Swap:           28Gi          0B        28Gi

$ swapon --show
NAME           TYPE      SIZE USED PRIO
/dev/nvme0n1p3 partition  20G   0B   -2
/dev/zram0     partition   8G   0B  100

$ sysctl vm.swappiness 
vm.swappiness = 60

vm.swappiness настроен вроде адекватно, система должна свопиться, как положено. Она не свопится вообще, по нулям.

Во-вторых я не очень понимаю, где настраиваются приоритеты свопа и вообще этот zram. В /etc/fstab никаких упоминаний нет. grep -iR zram /etc тоже ничего по теме не вернул. С приориетом моего свопа тоже не понятно: почему -2? В man swapon написано, что приоритет бывает от -1 до 32767.

★★★★★

Последнее исправление: Legioner (всего исправлений: 1)

У тебя 7 гигов свободно. Почему должен использоваться своп?

Как ты получил рабочий zram мне тоже интересно. В leap 15.2 zram у меня заработал, а в 15.3 с теми же настройками показал болт.

Собственно, zram в 15.2 настроен следующим образом:

грузится модуль zram
в правиле udev размер zram меняется на нужный и вызывается mkswap
в fstab есть запись для zram, либо юнит dev-zram.swap

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

У тебя 7 гигов свободно. Почему должен использоваться своп?

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

К примеру есть хорошая статья: In defence of swap: common misconceptions в которой написано:

Under no/low memory contention With swap: We can choose to swap out rarely-used anonymous memory that may only be used during a small part of the process lifecycle, allowing us to use this memory to improve cache hit rate, or do other optimisations.

Собственно это меня и интересует. Я знаю, что в старых (относительно) системах в своп страницы улетают всегда, даже если память не занята особо ничем. Просто страница и в памяти лежит и на диске. Если вдруг понадобилось больше физической памяти, значит эта страница просто считается засвопленной. не понадобилось - ну и ладно. Пусть даже сжимает, но хотя бы что-то происходит.

Как ты получил рабочий zram мне тоже интересно. В leap 15.2 zram у меня заработал, а в 15.3 с теми же настройками показал болт.

В Fedora сам настроился. Судя по всему конфиг лежит в /usr/lib/systemd/zram-generator.conf (в этом systemd даже конфиги лежат не как у нормальных людей, блин). Ну и юнит, судя по всему, /usr/lib/systemd/system/systemd-zram-setup@.service, видимо он и настраивает.

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

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

Хватит насиловать HDD.

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

У тебя 7 гигов свободно. Почему должен использоваться своп?

Сделал sha256sum *.7z на кучу больших файлов. Теперь

$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       2.1Gi       151Mi       304Mi        13Gi        12Gi
Swap:           28Gi          0B        28Gi

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

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

Отправь в гибернацию, если проснется норм, значит ты что-то делаешь не так с тестами. Если нет - ищи причину, своп не используется.

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

Ну, фиг его знает. Я когда своп к шлюзу со 128 МБ оперативки подключил, он тоже не использовался, пока tor не запускал, который без свопа через какое-то время падал из-за нехватки памяти.

Попробуй какую-нибудь фотку галактики в raw-формате гигов на 100 открыть.

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

Приложения какие-то открыты?

Вообще система при таком уже активно своппиться.

Можете поставить vm.swappiness ближе к 100.

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

Он или что-то делает не так или своп тупо не работает. После тем нужно ли чистить арч, ставь линкс2 на 4гига ОЗУ и тп, мне только шамана с его ненавистью не хватает от многозвездных)) Ну и ещё чтобы тебя сделали модемом))) Если добивать ЛОР так уж совсем.

Гибернацию делай, умник (ТС)! Что уж элементарнее.

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

сделали модемом

Модератором. С смарта пишу. Не, ты парень ничего, но кляузы твои уже всех достали. Неважно по делу или нет. Тебя просто много в том разделе, без обид.

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

Запустил всякие виртуалки-докеры-идеи-игрушки. Отожрало 11 GiB, в свопе целых 46 мегабайтов. Ну хотя бы что-то полезло, но всё равно не серьёзно. Видимо сломали что-то в ядре.

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

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

Что уж элементарнее

В тмпфс создать большой файл + открыть студию А.Л. в браузере.

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

Но вот и решился вопрос.

Видимо сломали что-то в ядре

Просто почитайте про vm.swappiness, если хотите, чтобы больше заносилось в своп. Обычно стоит 60, возможно, в федоре что-то поменяли.

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

Больше паники развёл. Если при 11 из 16 уже полез своп, значит все норм. Но он скорее всего не на диске тоже лежит сейчас. Дать команды, чтобы проверить где своп или сам найдешь?

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

60 стоит, я выше показывал. Этого должно хватать, чтобы скидывало в своп всё, что ни попадя.

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

Больше паники развёл. Если при 11 из 16 уже полез своп, значит все норм. Но он скорее всего не на диске тоже лежит сейчас. Дать команды, чтобы проверить где своп или сам найдешь?

Я в курсе команд, не на диске лежит. Диск вообще не трогает.

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

Ну и правильно. По идее у тебя все хорошо. Ещё раз повторюсь - 100 процентов проверить, что все в порядке это отправить железо в режим гибернацию, при этом у тебя все с ОЗУ обязательно выгружаются на диск. Загрузится система в прежнем состоянии - все отлично.

anonymous
()

Сделай tail /dev/zero, вся память закончится, и в своп точно что-нибудь попадет.

А вообще, странные вы все. Кто-то жалуется, что своп заполняется, когда не должен, а кто-то - совсем наоборот.

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

А вообще, странные вы все. Кто-то жалуется, что своп заполняется, когда не должен, а кто-то - совсем наоборот.

И я о том же, уже есть желание зарегаться и поспорить в толксах. Жуть, конечно, не дай бог, да и отпуск скоро. Надо держать себя в руках. Пожалуй, останусь в анонимусах.

А эти фидорасты-реды таки обосрались, ничего у них с нашим дорогим Столлманом так и не вышло.

anonymous
()

Боже, раньше люди делали все, чтобы система не свопилась и не тормозила, а теперь хотят поскорее загнать систему в тормоза из-за каких-то киллеров. КСЖ, сука.

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

Сможешь внятно объяснить, что хорошего в том, что данные запущенных приложений и ос будут не в быстрой оперативной памяти, а на гораздо более медленном накопителе? (zram/zswap не учитываем)

я оом-киллера боюсь, прибьёт ещё что-нибудь не то

Ну и про это было бы интересно каких-нибудь подробностей.

Кажется ты паникуешь необоснованно.

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

Сможешь внятно объяснить, что хорошего в том, что данные запущенных приложений и ос будут не в быстрой оперативной памяти, а на гораздо более медленном накопителе? (zram/zswap не учитываем)

Если данные в свопе, это не значит, что их нет в оперативной памяти. Это значит, что при необходимости можно освободить оперативную память моментально. Т.е. в обычном режиме, когда памяти выше крыши, всё, что будет от свопа - запишется несколько сотен мегабайтов данных, про которые ядро посчитало, что они не используются. А вот если памяти действительно не будет хватать, то тут уже возможностей у ядра найти свободную память будет куда больше. И это хорошо.

Минус ровно один - SSD-диск умрёт не через тысячу лет, а через девятьсот. Но я скорей всего раньше куплю новый компьютер.

я оом-киллера боюсь, прибьёт ещё что-нибудь не то

Ну и про это было бы интересно каких-нибудь подробностей.

Я подробности сам не знаю. Но я знаю, что он рандомно грохает процессы. Например грохнет мою винду в виртуалочке и у меня диск останется битый, т.к. я там отключил все синхронизации для пущей скорости. А винду нынче ставить это пару дней минимум. Грохнет идею - у меня какие-нибудь там кеши побьются, после чего будет всё подсвечивать красными чёрточками и хорошо, если invalidate caches поможет. Грохнет какой-нибудь journald и у меня логи в системе потрутся, причём я про это даже не узнаю.

Кажется ты паникуешь необоснованно.

Неизвестность и отсутствие знаний всегда рождают страх. А линукс в последнее время как будто специально таким делают.

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

А линукс в последнее время как будто специально таким делают.

Каким таким? Ядро вроде под открытой лицензией, нашел баг - репорти. Отдельно взятое «федорино горе» это дистр, который ты не умеешь готовить. Лично по мне после всех действий RH/IBM так их и использовать стыдно. Но это личное мнение и исключительно из-за действий компании, а сам дистрибутив вполне себе ничего (тоже на любителя, я больше по deb тащусь, слаке, арчу).

Неизвестность и отсутствие знаний всегда рождают страх.

Тогда лучше на win пересесть. Сейчас здесь тем с ним и wsl, наверное, больше чем с линукс. Можно на мак, правда, это дороже, там тоже все из коробки. Тут таких 90% ЛОРа, даже модеры на маках сидят. Стеснятся особо нечего.

anonymous
()

Для примера, покажу как всё отправить в своп, если сильно приспичило:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       3.5Gi       2.9Gi       2.0Gi       9.0Gi       9.6Gi
Swap:         8.0Gi          0B       8.0Gi

$ swapon
NAME           TYPE      SIZE USED PRIO
/dev/nvme0n1p6 partition   4G   0B   -2
/dev/zram0     partition   4G   0B  100

$ systemd-run --scope --user tail /dev/zero
Running scope as unit: run-r20d18f9cb8c743818b862afc4bd9057e.scope
[1]    1277241 killed     systemd-run --scope --user tail /dev/zero

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       1.6Gi        12Gi       595Mi       894Mi        12Gi
Swap:         8.0Gi       4.0Gi       4.0Gi

$ swapon
NAME           TYPE      SIZE   USED PRIO
/dev/nvme0n1p6 partition   4G 142.7M   -2
/dev/zram0     partition   4G   3.9G  100
rupert ★★★★★
()

У тебя занято 2 гига из 16. Чего там свопить? Займи хотя б половину.

Во-вторых swappiness можно ставить в 200.

В-третьих, если нет симптомов - какого хрена ты выёживаешься?

Все летает - не лезь в систему, займись чем-нибудь полезным.

anonymous
()

ZRAM, в моём понимании это по сути сжатие неиспользуемой памяти, я не против этой технологии, но во-первых она не должна в моём понимании заменять своп

zram - это модуль ядра. Как он может заменять своп?

своп на zram - это вполне полноценный своп и позволяет экономить обращения к диску.

anonymous
()

хочешь своппинга?

выполни

tail /dev/zero
anonymous
()
Ответ на: комментарий от Legioner

Видимо сломали что-то в ядре.

Для SSD рекомендуют swappiness=100

https://chrisdown.name/2018/01/02/in-defence-of-swap.html

во-вторых

The swapper on kernels before 4.0 has a lot of pitfalls, and has contributed to a lot of people’s negative perceptions about swap due to its overeagerness to swap out pages. On kernels >4.0, the situation is significantly better.

Ничего не сломали, просто повышай свопинес

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

Этого должно хватать, чтобы скидывало в своп всё, что ни попадя

Как там, в 2007?

60 - это МАЛО. 60 - это для свопа на HDD. Для свопа на zram ставь больше. - Можно даже 200 начиная с ядра 5.8.

anonymous
()

В общем провёл ряд экспериментов.

  1. Заполнение нулями. До 16 GB своп практически не используется. После 16 GB и до 24 GB включается zswap, ну с нулями понятно, что практически идеально работает. После 24 GB включается SSD swap. В общем всё понятно и предсказуемо.

  2. Заполнение мусором. До 16 GB своп практически не используется. При приближении к 16 GB всё начинает замедляться, но не очень сильно. Когда достигает 16 GB, компьютер виснет на пару секунд и буквально за один шаг zswap оказывается «забитым» на 100%. Ну оно и понятно, мусор не сжимается. Хотя я бы предпочёл, чтобы этого зависания не было. Ну и дальше уже всё на SSD идёт.

oom killer вроде не приходил.

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

Спасибо, правда я мало чего понял, ну да ладно, буду иметь в виду, что это ядро само выставило.

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

Спасибо, поищу информацию на эту тему, пока не видел хороших руководств по этому параметру (просто «больше»/«меньше» не хочу крутить, хочется как-то осмысленно).

Пока видел только рекомендацию от Oracle ставить на 10 для серверов с СУБД. Ну оно и понятно, у Oracle свой своп, ОС ему будет только мешать.

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

Отправь в гибернацию

Плохой тест. Оно может не уснуть или не проснуться не только от неправильного swap’а, но еще и из-за включенного Secure Boot (и это не баг, а фича, без которой Microsoft бы не подписал Shim). А сейчас дистрибутивы, отличные от Alpine, Arch и Gentoo, настолько хорошо поддерживают Secure Boot, что люди даже не задумываются, что когда-то в этом месте были непреодолимые сложности.

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

Ну, это уже к ТС вопросы. Я на машине с 24 GiB RAM только из-за редкой необходимости гибернации своп и держу. Люди наоборот с такими объемами ОЗУ пытаются избежать свопа, а тут парадокс какой-то - не нравится, что система при первом чихе не свопит.

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

Вообще, с включенным секуре бутом должно вернуть что-то вроде: failed to hibernate sleep not supported. Не тестил, так, по памяти примерно. Так что, по идее, он просто не сможет уйти в этот режим. Как бы понятно, что тут не своп причина. А вот если «уснет», а проснется не в прежнем состоянии, тогда уже более вероятна причина со своим.

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

По железу и системе, повторюсь, это к ТС вопросы. Почему и предложил такой тест, ибо расспрашивать этого 5 🌟 можно долго. По факту тему можно закрывать, у него все хорошо, только перенервничал зря.

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

хороших руководств по этому параметру

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/sysctl/vm.rst#swappiness

This control is used to define the rough relative IO cost of swapping and filesystem paging, as a value between 0 and 200. At 100, the VM assumes equal IO cost and will thus apply memory pressure to the page cache and swap-backed pages equally; lower values signify more expensive swap IO, higher values indicates cheaper.

Keep in mind that filesystem IO patterns under memory pressure tend to be more efficient than swap's random IO. An optimal value will require experimentation and will also be workload-dependent.

The default value is 60.

For in-memory swap, like zram or zswap, as well as hybrid setups that have swap on faster devices than the filesystem, values beyond 100 can be considered. For example, if the random IO against the swap device is on average 2x faster than IO from the filesystem, swappiness should be 133 (x + 2x = 200, 2x = 133.33).

At 0, the kernel will not initiate swap until the amount of free and file-backed pages is less than the high watermark in a zone.

For in-memory swap, like zram or zswap, as well as hybrid setups that have swap on faster devices than the filesystem, values beyond 100 can be considered

И да, 60 - это маловато.

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

Хотя я бы предпочёл, чтобы этого зависания не было

  • высокий swappiness
  • earlyoom или nohang
  • не использовать своп на диске, оставь только zram

Заполнение мусором

Каким?

Хотя я бы предпочёл, чтобы этого зависания не было

Это можно сделать. Даже если система на HDD (и своп на zram, конечно).

hakavlad ★★★
()

Уже несколько лет живу на ноуте с NVMe SSD, vm.swappiness=100. Даже с таким конфигом в своп начинают попадать данные, когда память занята хотя бы на 50%, при этом VFS-кэш учитывается редко (например, когда какое-то приложение очень активно теребит данные с диска), потому что non-dirty файловые страницы ядро не складывает в своп, а просто выкидывает из памяти.

ЕМНИП, полную копию памяти в свопе одно время держала Mac OS, чтобы быстро выкидывать страницы, а вот в линуксе такого поведения не помню. Как выше советовали, самый дельный способ проверить работу свопа — отправить машину в гибернацию (resume= в cmdline ядра не забудь прописать).

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

Не очень понял твой комментарий. Мусором я память заполнял из своей программы на C, чтобы zswap не сработал. В реальности, наверное, он сжимать всё же что-то будет. Если бы у меня не было свопа на диске, он бы вообще упал, своп на диске мне однозначно нужен, это даже не обсуждается, 16 GB памяти это впритык и вполне может переполниться, если увлечься.

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

Поставил 133, посмотрим. Пока всё равно по нулям. Ладно, в целом вроде понятно, всем спасибо за помощь.

Legioner ★★★★★
() автор топика
14 сентября 2021 г.
Ответ на: комментарий от Legioner

Зачем свопить, если Free много? Своппинг полезен, когда неактивные анонимные страницы в памяти мешают ужерживать файл кэш. Зачем свопить, когда нет угрозы кэшу?

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

Неизвестность и отсутствие знаний всегда рождают страх. А линукс в последнее время как будто специально таким делают.

Ахаха, дело в тебе.

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

А винду нынче ставить это пару дней минимум

10 мин на установку, если установка не на вращающуюся ржавчину.

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

Если тебя удовлетворяет то, что получается после десяти минут установки, могу только позавидовать. Мой перфекционизм такого не выдерживает.

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