Я користувався 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 або копіювання пам'яті вручну було б функціонально еквівалентним.
Я, безумовно, не хотів би поміняти місцями на вбудованій системі (навіть якщо у неї є менший доступний оперативний бал), якщо у вас закінчиться оперативний байз, я б швидше загинув, ніж зірвав флеш-пам’ять мільйона записів на сектор. їхати у вихідні, вирівнюючи зношення секторів до нуля.
У будь-яких Unix-бородах є якісь вагомі причини, щоб тримати своп?
ОНОВЛЕННЯ відповідей та аналіз:
ПІДТВЕРДЖЕНО? - fork () вимагає стільки ж пам’яті для дочірнього процесу, як і батьківський
Сучасний fork () - це копіювання на запис для дітей на POSIX (загалом), але спеціально для Linux та FreeBSD , і я припускаю OSX шляхом екстраполяції. Я вважаю цю частину анахронічного багажу, який перевозить своп.
Цікаво, що ця стаття Solaris стверджує, що, хоча Solaris використовує функцію Copy-on-Write за допомогою fork (), вам слід мати принаймні 2x (!) Розмір батьківського процесу у вільній віртуальній пам’яті, щоб fork () не лаявся в середній. Хоча елемент Solaris дещо перекручує аргумент, що своп - це анахронізм - я думаю, що достатньо операційних систем правильно реалізувати CoW таким чином, що важливіше розвіяти міф, ніж позначати його як подальше обґрунтування свопу. З тих пір. Давайте дивитися правді в очі. На даний момент люди, які насправді використовують Solaris, ймовірно, просто хлопці Oracle. Без образи Соляріс!
ПІДТВЕРДЖЕНО - файли tmpfs / ramfs можуть переходити до swap як зручності, коли tmpfs / ramfs заповнюється
Не використовуйте tmpfs / ramfs без обмежень! Завжди чітко визначайте кількість оперативної пам'яті, яку ви хочете використовувати tmpfs / ramfs.
ГРАФІЧНИЙ - Поміняйте трохи "про всяк випадок"
Один з моїх старих начальників мав чудову приказку: «ти не знаєш, чого не знаєш» - по суті, ти не можеш прийняти рішення на основі інформації, якої ти ще не маєш. Це правдоподібний аргумент для обміну для мене, однак - я підозрюю, що типи речей, які ви зробили б для виявлення, якщо ваша програма заміняється чи ні, не були б важчішими, ніж перевірка, чи вдасться malloc () або вилучити виняток із невдалий новий ().
Це може бути корисно в тих випадках, коли ви працюєте на робочому столі і маєте безліч випадкових речей, але навіть все-таки - якщо щось збивається, я вважаю за краще, щоб це OOM пожинало, ніж пірнати в swap-hell. Це тільки я.
ЗАГАЛЕНО! - На Solaris , обмін є важливим для кількох причин
tmpfs - держави Кількість вільного простору, доступного tmpfs, залежить від кількості нерозподіленого простору підкачки в системі. Розмір файлової системи tmpfs збільшується, щоб вмістити файли, записані на неї, але є деякі властиві компроміси для великих користувачів tmpfs. Tmpfs ділиться ресурсами з сегментами даних та стеками виконуваних програм. На виконання дуже великих програм може вплинути, якщо файлові системи tmpfs близькі до максимально допустимого розміру. Tmpfs може безкоштовно виділяти всі, крім 4 МБ, місця для обміну місцями в системі.
Факти Solaris та міфи про свопи - стани Віртуальна пам'ять сьогодні складається з загальної суми фізичної оперативної пам’яті та місця обміну на диску. Solaris НЕ вимагає взагалі налаштовувати будь-який простір підкачки. Якщо ви виберете цей варіант, як тільки оперативна пам’ять заповниться, ви не зможете запускати нові процеси. .
Я не впевнений, якщо це означає, що максимальна віртуальна карта, яку ви можете створити, - це ram + swap , або якщо ви все-таки можете зробити щось на зразок mmap () файлу, більший за ram, і покладатися на ледачу ініціалізацію mmap (). Поки ви Мабуть, може запустити Solaris в наші дні прекрасно без свопів, здається, що це менш привітно, ніж інші операційні системи POSIXy.
ЗАГАЛЕНО! Популярні інструменти для сплячки в Linux, схоже, покладаються на своп
За замовчуванням TuxOnIce виглядає так, що він покладається на своп для сплячки, хоча існують і інші засоби. Однак, якщо ви не працюєте з полем сплячки, я все одно стоятиму за твердженням, що "swap є анакронічним для Linux"