LINUX.ORG.RU

Swap сегодня и в будущем - есть ли смысл?

 , , , ,


1

4

Интересный вопрос возник. А нужен ли swap в 2020 году? Оперативки в современных компах уже так много, что в потолок еще никогда не упирался. Нагуглил тут для чего он вообще нужен, поправьте если есть еще варианты.

  • Ждущий/спящий режим, все время их путаю, в одном из них нужен swap раздел или файл подкачки. Но это вроде только для ноутбуков, для тех кто не любит выключать их. Сомнительная нужность сегодня, когда многие DE в Linux умеют сохранять сеанс.

  • Когда оперативная память кончается, чтобы не возникла ошибка, нужен swap. Новые компы сегодня имеют по 16-32 гига, мало кто может заполнить их целиком. Возможно спецы в фото/видео или программисты, компиляция там, не знаю. Обычный пользователь никогда не заполнит столько. У меня редко выходит за пределы 3 гигов.

Может есть еще применение?

Из очевидных проблем:

В Linux традиционно при установке дистрибутивы советуют ставить размер swap равный размеру оперативки. Значит на новых компах надо будет отдавать уже 32 или 64 гига, которые никогда не будут использоваться. Не мало! А если это дорогущий SSD?

Кстати, про swap на SSD:

https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-18-04

Warning: Although swap is generally recommended for systems utilizing traditional spinning hard drives, using swap with SSDs can cause issues with hardware degradation over time. Due to this consideration, we do not recommend enabling swap on DigitalOcean or any other provider that utilizes SSD storage.

Вообще не советуют включать swap на SSD, т.к. быстро угробит диск.

Получается, эпоха swap подходит в концу? А как же спящий режим и все такое?

есть. У мя 48Г плюс столько же свапа.

cvv ★★★★★ ()

Оперативки в современных компах уже так много

Для игр. Рабочее ПО те же 16 гигабайт съест и не поперхнётся.

Возможно спецы в фото/видео или программисты, компиляция там, не знаю

Это да, 32 гигабайта в таких случаях — банальный минимум. Но здесь важнее скорость доступа, к примеру, поэтому программисты так котируют «хуананы» под сокет 2011-3, про ECC-память я умолчу.

Вообще не советуют включать swap на SSD, т.к. быстро угробит диск.

Тратиться не хотят. ИМХО, с обычным потребительским SSD максимум, что будет — пара гигабайт через пару лет пропадёт, и придётся переделать разделы (необязательно с файлом подкачки).

Получается, эпоха swap подходит в концу?

Если и подходит, то точно не сегодня. Ибо бывают ситуации, когда максимум доступной оперативки — слишком мало.

Korchevatel ★★ ()

Недавно слыхал про ситуацию. Здоровый процесс (например JVM на сервере) форкается. При этом система проверяет, что достаточно свободной памяти (включая своп). Т.е. если JVM сожрала 80% памяти, а свопа совсем мало, то fork не сработает. При этом swap решает проблема. Понятно, что память COW и дочерний процесс сразу сделает exec, но до него дело не доходит.

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

На своих серверах всегда выделяю своп как память * 1.1. На диске места обычно хватает.

Legioner ★★★★★ ()

По поводу угробит SSD — это страшилки из эпохи ранних устройств. Современные SSD очень трудно вывести из строя: https://3dnews.ru/938764

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Korchevatel

А что обычно бывает, когда оперативка кончается, а swap не установлен? Программы закрываются, или система виснет целиком?

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

Если багов нет, то OOM Killer начинает отстреливать программы, которые по его мнению виновны в исчерпании памяти (не всегда угадывает). Насколько хорошо протестировано ядро при работе в условиях нехватки памяти это отдельный вопрос. Имхо, никто его в таких условиях не тестирует, поэтому в таком режиме куча багов и лучше до такого не доводить, а если довели, то сразу перезагрузиться.

А ещё лучше жить со свопом. С SSD это даже не ставит систему раком при нехватке памяти, можно спокойно завершить ненужные приложения.

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

А если это дорогущий SSD?

Аж приблизительно $5 под своп. Бесчеловечно

wxw ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Хороший камент, правда там чувак пишет, что и 512 мегов тоже норм swap. Но тогда у него не заработает спящий режим.

shkolnik_2022 ()

Нужен. Своп на SSD работает очень хорошо, у меня постоянно 6-10 Гб всякой ненужнины в нём болтается.

izzholtik ()
Ответ на: комментарий от Vsevolod-linuxoid

Даже не знаю, DigitalOcean вроде авторитетная контора, а статья относительно свежая July 5, 2018. Они там диски тысячами закупают.

shkolnik_2022 ()
Ответ на: комментарий от Vsevolod-linuxoid

Есть решения, которые делают размер swap динамическим.

Мне тут в предыдущей теме про swap говорят, что в Ubuntu 18.04 при установке системы теперь настраивается не swap-раздел, а swap-файл. И что он как раз динамический и может сам меняться когда ему вздумается. Я вроде помню, что устанавливал ему размер равный оперативке (8 гигов), но недавно залез в системный монитор и вижу «Подкачка 0 / 900 МиБ». Он и правда меняется? Мог ли он уменьшиться из-за того, что однажды у меня почти весь хард закончился (оставалось 300 мегов на HDD)?

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

Да. Systemd-swap (ЕМНИП, это именно он в Ubuntu) оперирует «кусками» «свапа», обычно по 512МБ.

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

Т.е. если JVM сожрала 80% памяти, а свопа совсем мало, то fork не сработает. При этом swap решает проблема.

Если jvm лезет в своп то это здорово увеличивает время сборки мусора, что ведет к проблемам и зачастую лучше бы процесс просто рухнул.

micronekodesu ★★ ()

А если это дорогущий SSD?

Террабайтный ssd стоит условные 150 баксов, сколько оперативы ты можешь на эту сумму купить и какой процент от этого ssd это будет? При том что мне например просто за глаза хватает 120 гигового диска, который занят чуть больше чем на половину, при том что в захламлении его я никак себя не ограничиваю и свапа у меня 16гб. Это не винда же.

Вообще не советуют включать swap на SSD, т.к. быстро угробит диск.

Пользуюсь ssd последние лет так 5..7, никогда ничего не тюнил под них - не отключал журнал, не убирал кэши, не переносил своп, и пока ни один диск не сдох.

А нужен ли swap в 2020 году?

Вот у меня другой вопрос - а нужно ли париться по этому вопросу в 2020 году? Реально все так плохо что нет никакой возможности отдать под нужды системы 10-20-30 гигов и не забивать себе голову?

micronekodesu ★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

он нужен для одного их режимов сна.

...который то работает, то не работает, то работает через пень-колоду, то не работает вообще.

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

А если я захочу нажать «ждущий режим» на обычном стационарном ПК, то он сработает с этим 1 гигом swap или он увеличится перед тем, как войти в ждущий режим?

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

В документации Kubernetes явно говорится, что перед запуском нужно избавиться от swap, например.

Я конечно не в теме, но Kubernetes эта популярная изолирующая штука, которая крутится на серверах. Разве на серверах отключают swap? Или под Kubernetes настраивают отдельные серверы, на которых кроме Kubernetes ничего нет?

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

Если у устройство ACPI не по стандартам. Там, где они рассчитаны на что-то кроме Windows, всё работает как часы.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от micronekodesu

Вот у меня другой вопрос - а нужно ли париться по этому вопросу в 2020 году? Реально все так плохо что нет никакой возможности отдать под нужды системы 10-20-30 гигов и не забивать себе голову?

Не знаю, у меня swap оказалось всего 1 гиг, а что будет если нажму «ждущий режим» на обычном ПК? Зависнет? Не проснется? Увеличится swap и все сработает?

shkolnik_2022 ()

Вообще не советуют включать swap на SSD, т.к. быстро угробит диск.

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

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

Да щас вообще не поймешь, то ли в винде, то ли в Linux понятия «ждущий» и «спящий» режим поменялись местами в какой-то момент, да еще и «гибернация» где-то мелькала. Теперь вообще не разберешь что куда.

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

Гибернация это спящий режим, когда данные скидывают на диск. Вообще есть термины "sleep to ram" и "sleep to disk", можешь гуглить по ним (и даже вызывать эти процедуры ты можешь через "s2ram" и "s2disk").

К слову, когда у тебя данные в своп сбрасываются при гибернации (спящем режиме) они там как-то могут ужиматься, и там несколько степней этого сжатия есть, от которого зависит как долго у тебя будет засыпать и просыпаться пекарня, и я думаю ядро не идиоты писали и в случае если свопа критически не хватит может сработать что-то типа OOM-killer'а чтоб сохранить наиболее важные данные чтоб хост таки смог уснуть и проснуться нормально.

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

Мне особо нечего добавить, там всё правильно написано.

Наличие свопа позволяет ядру одинаково «справедливо» (fairly) вытеснять как страницы дискового кэша, так и анонимные страницы. В отсутствие свопа ядро вынуждено всегда предпочитать анонимные страницы дисковому кэшу — т. е. если есть выбор между тем, чтобы вытеснить используемую раз в час анонимную страницу и используемую раз в секунду страницу дискового кэша, ядро всё равно будет вынуждено вытеснить дисковый кэш. В случае наличия свопа ядро может вытеснить анонимную страницу и забыть про неё на этот час.

Под анонимными страницами понимается собственно память приложений — т. е. страницы, которые не принадлежат каким-либо файлам (отсюда «анонимные»).

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

Это проблема куба, а не свопа. Условно, планировщик видит, что на ноде A доступно ещё два гигабайта памяти, и пихает на эту ноду очередной контейнер, но ему не видно, что на этой ноде два гигабайта доступно только потому что четыре уже в свопе, и на самом деле на ноду уже ничего пихать нельзя.

В идеале эту проблему нужно решать какими-нибудь развесистыми эвристиками вокруг PSI, но куб появился гораздо раньше чем PSI. Рано или поздно решат, наверное.

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

Kubernetes эта популярная изолирующая штука

Нет, Kubernetes это кластерная среда. Она умеет гораздо больше чем просто изоляцию.

Или под Kubernetes настраивают отдельные серверы, на которых кроме Kubernetes ничего нет?

Естественно.

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

Ты, наверное, не понял суть проблемы. JVM не лезет в своп. Это виртуальная память, без которой fork не работает.

А так да, согласен, Java должна влезать в реальную память.

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

Спящий режим это когда процессор выключается почти полностью, но на память питание остаётся. Можно включить моментально, но если пропадёт питание, несохранённые данные будут потеряны.

Гибернация это когда содержимое оперативной памяти сохраняется на диск и компьютер полностью выключается.

Гибридный режим это когда содержимое оперативной памяти сохраняется на диск, но при этом компьютер выключается не полностью и на память питание остаётся. С одной стороны его можно включить моментально, как спящий режим, с другой стороны можно выключить питание и тогда он загрузится, как в режиме гибернации.

В ранних версиях Windows спящий режим назывался ждущим режимом, а гибернация называлась спящим режимом.

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

ZVOL, например. Принадлежит к разряду прореженных файлов-виртуальных устройств с заранее определённым пределом заполнения.

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

Спящий режим это

Гибернация это

Ты бы хоть перевод слова hibernate в словаре посмотрел, прежде чем пытаться умничать.

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

Я тебе объясняю общепринятую терминологию. При чём тут словарь? Учись, а не критикуй, если что-то не понимаешь.

Legioner ★★★★★ ()

Ждущий/спящий режим, все время их путаю, в одном из них нужен swap раздел или файл подкачки. Но это вроде только для ноутбуков, для тех кто не любит выключать их. Сомнительная нужность сегодня, когда многие DE в Linux умеют сохранять сеанс.

Гибернация. Это когда вся система складывается в своп в текущем состоянии, и потом просто раскатывается обратно в раму в том же состоянии, что и была. Удобно - ты продолжаешься работать в том же месте, где остановился.

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

Я последнее время своп не делают, хотя у меня и всего лишь 8 гигов рамы.

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

Я тебе объясняю общепринятую терминологию.

Только её нету. В некоторых системах «спящим режимом» называется ровно то же самое, что в других «гибернацией». В других это разные вещи. И это приводит к путанице.

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

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

Конкретно у тебя быстро — это сколько?

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

Конкретно у тебя быстро — это сколько?

Ну, у меня вообще обычный жесткий диск =) И меня устраивает. От нажатия кнопки до готовые кед проходит где-то около минуты, наверное. Меня устраивает. Когда воткнул ссд - до полной готовности системы проходило секуд 15 вроде. Потом, правда, ссд сдох, и я вернул обычный винт.

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

Думаю, терминологию Windows можно считать общепринятой. У Microsoft переводчики очень высокого уровня. Адекватного перевода слову hibernate в русском языке нет, поэтому разумно использовать слово «гибернация».

Legioner ★★★★★ ()

А нужен ли swap в 2020 году?

Конечно нужен, ща диски от 500 гигов, тебе что жалко 30 под свап отрезать? Тем более если ссд, то и со скоростью всё будет более-менее.

Вообще не советуют включать swap на SSD, т.к. быстро угробит диск.

В инете много вредных советов.

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

Думаю, терминологию Windows можно считать общепринятой.

Так вот что самое интересное, в Windows XP «спящий режим» обозначал именно ЭТО, то же самое, что «гибернация». Потом у них терминология поплыла.

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

Перепутано только в русском языке. В английском всё понятно:

  • suspend - пониженное энергосбережение, быстрый выход, на диск ничего не пишется. Если питание отключилось, то всё потеряется. То, что в Windows XP назывлось «Ждущий режим».
  • hibernate - запись памяти на диск и выключение питания, относительно долгое пробуждение (с SSD почти не актуально). В Windows XP называлось «Спящий режим».
  • hybrid suspend - выполняется запись памяти на диск, но вместо выключения происходит переход в suspend. Результат - быстрое пробуждение обычно, ну а если произошёл отвал питания, то выход как из hibernate. Это то, что называется «Спящий режим» в современных виндах.
nebularia ()

А нужен ли swap в 2020 году?

Нужен. Хотя бы для режима спячки.

EDIT: Не обязательно swap раздел, swap файл достаточно.

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

А есть ли какие-то общепринятые (английские) термины этих 3х режимов: ждущий, спящий, гибернация?

shkolnik_2022 ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей