Я использовал unix довольно долгое время, и в последние пару лет я чувствовал, что своп - это анахронизм, но мне было бы любопытно, что думают другие люди.
Мой аргумент примерно такой (при условии отсутствия глобального ограничения или изменения настроек OOM):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
Для любого сервиса, который настроен на производительность, я бы подумал, что понимание верхних пределов его использования ресурсов было бы ключом к его настройке в первую очередь, и в этом случае вы знаете, сколько вам нужно.
Я не могу представить себе много ситуаций (в некоторых, но не многих), когда вы бы приостановили запущенный процесс, и он мог бы поменяться местами, чтобы освободить место для других вещей, но вы все равно потеряли бы свои сокеты, если бы сделали это, поэтому core-dump через gcc или копирование памяти вручную будет функционально эквивалентным.
Я определенно не хотел бы менять встроенную систему (даже если она может иметь меньшую доступную оперативную память), если у вас закончится оперативная память, я предпочел бы, чтобы мой процесс умер, чем разрыв флэш-памяти с миллионами записей на сектор. проезжайте выходные, выравнивая секторы до самого конца.
У каких-нибудь юникс-бород есть какие-то веские причины, чтобы продолжать обмениваться?
ОБНОВЛЕНИЕ ответов && анализ:
ПОДТВЕРЖДЕНЫ? - fork () требует того же объема памяти для дочернего процесса, что и родительский
Modern fork () - это копирование при записи для детей в POSIX (в целом), но особенно для Linux и FreeBSD , и я предполагаю OSX путем экстраполяции. Я считаю эту часть анахроничного багажа, который своп несет с собой.
Любопытно, что в этой статье о Solaris утверждается, что, хотя Solaris использует Copy-on-Write с fork (), вы должны иметь по крайней мере 2x (!) Размера родительского процесса в свободной виртуальной памяти, чтобы fork () не сгорела в средний. Хотя элемент Solaris несколько опровергает аргумент о том, что своп является анахронизмом - я думаю, что достаточно операционных систем правильно реализуют CoW таким образом, что важнее развеять миф, чем пометить его как дополнительное оправдание свопа. Поскольку. Давайте смотреть правде в глаза. На данный момент люди, которые на самом деле используют Solaris, вероятно, просто парни из Oracle. Без обид Солярис!
ПОДТВЕРЖДЕНО - файлы tmpfs / ramfs могут быть заменены для удобства при заполнении tmpfs / ramfs
Не используйте безлимитные tmpfs / ramfs! Всегда явно определяйте количество оперативной памяти, которое вы хотите использовать tmpfs / ramfs.
УДОВЛЕТВОРЕННЫЙ - Сделайте небольшой обмен 'на всякий случай'
У одного из моих старых боссов была замечательная поговорка: «ты не знаешь, чего не знаешь» - по сути, ты не можешь принять решение, основываясь на информации, которой у тебя еще нет. Однако это правдоподобный аргумент в пользу подкачки - я подозреваю, что типы действий, которые вы бы предприняли, чтобы определить, поменяется ли ваше приложение или нет, были бы более тяжелыми, чем проверка, чтобы убедиться, что malloc () успешна или перехватывает исключение из Неудачный новый ().
Это может быть полезно в тех случаях, когда вы используете настольный компьютер и у вас происходит куча случайных вещей, но даже все же - если что-то сходит с ума, я бы предпочел, чтобы это было пожнением, а не погружением в ад. Это всего лишь я.
Разорен! - На Solaris , обмен является важным для нескольких причин
tmpfs - состояния Количество свободного места, доступного для tmpfs, зависит от количества нераспределенного пространства подкачки в системе. Размер файловой системы tmpfs увеличивается, чтобы вместить записанные в нее файлы, но для активных пользователей tmpfs есть некоторые компромиссы. Tmpfs совместно использует ресурсы с сегментами данных и стека выполняемых программ. Это может повлиять на выполнение очень больших программ, если файловые системы tmpfs близки к максимально допустимому размеру. Tmpfs может свободно выделять все, кроме 4 МБ, пространства подкачки системы.
Solaris факты и мифы о свопе - говорится виртуальной памяти на сегодняшний день состоит из общей суммы физической памяти и пространства подкачки на диске. Solaris НЕ требует настройки пространства подкачки. Если вы выберете эту опцию, после заполнения ОЗУ вы не сможете запускать новые процессы. ,
Я не уверен, означает ли это, что максимальная виртуальная карта, которую вы можете создать, это ram + swap , или если вы все еще можете сделать что-то вроде mmap () файл больше, чем ram, и полагаться на ленивую инициализацию mmap (). Пока вы Скорее всего, в наши дни можно запустить Solaris без подкачки, похоже, он менее дружелюбен, чем другие операционные системы POSIXy.
Разорен! Похоже, что популярные инструменты гибернации в Linux полагаются на своп
По умолчанию TuxOnIce выглядит так, как будто он переключается в режим гибернации, хотя существуют и другие бэкэнды. Тем не менее, если вы не используете коробку, которая нуждается в спящем режиме, я бы все равно поддержал утверждение, что «своп является анакронизмом в Linux».