Так.
Вам, безумовно, завжди слід увімкнути своп, за винятком випадків, коли існує дуже вагома причина заборони (наприклад, немає взагалі ніякого диска або лише мережевий диск). Якщо у вас є замовлення на замовлення часто рекомендованих смішних розмірів (наприклад, вдвічі більше оперативної пам’яті)? Ну, ні .
Причина полягає в тому, що своп корисний не лише тоді, коли ваші програми споживають більше пам’яті, ніж фізична оперативна пам’ять (насправді в цьому випадку своп зовсім не корисний, оскільки це серйозно впливає на продуктивність). Основний стимул для swap нині - не магічно перетворити 16 Гбіт оперативної пам’яті на 32 ГіБ, а більш ефективно використовувати встановлену, доступну оперативну пам’ять.
На сучасному комп’ютері оперативна пам’ять не залишається невикористаною. Невикористана оперативна пам’ять - це те, що ви могли так само не придбати і заощадити гроші. Тому, все, що ви завантажуєте або що - небудь , що в іншому випадку відображених в пам'яті, нічого , що могло можливо бути повторно використано ким - або пізніше в будь-який час (обмежено обмеження безпеки) знаходиться в кеші. Дуже скоро після завантаження машини вся фізична ОЗУ буде використана для чогось .
Щоразу, коли ви запитуєте нову сторінку пам'яті в операційній системі, менеджер пам'яті повинен приймати освічене рішення:
- Очистити сторінку з буфера кеша
- Очищення сторінки з відображення (фактично така ж, як №1, у більшості систем)
- Перемістіть сторінку, до якої не було доступно тривалий час - бажано ніколи - для обміну (це може насправді навіть статися проактивно, не обов'язково в останній момент)
- Вбийте процес або вбийте випадковий процес (OOM)
- Ядра панікує
Опції №4 та №5 дуже небажані і відбудуться лише в тому випадку, якщо в операційній системі немає іншого вибору. Варіанти №1 і №2 означають, що ви викинете щось, що вам, можливо, буде потрібно незабаром знову. Це негативно впливає на результативність.
Варіант №3 означає, що ви переміщуєте те, що вам (ймовірно) незабаром не потрібно на повільне зберігання. Це добре, тому що тепер те, що вам потрібно, може використовувати швидку ОЗУ.
Видаливши варіант №3, ви фактично обмежили операційну систему виконувати або №1, або №2. Перезавантаження сторінки з диска - це те саме, що і перезавантаження її з swap, за винятком того, що необхідність перезавантажуватися з swap, як правило, є менш ймовірною (через прийняття правильних рішень під час пейджингу).
Іншими словами, відключивши своп, ви нічого не отримуєте, але обмежуєте кількість корисних варіантів операційної системи для роботи із запитом на пам'ять. Що може бути , але, можливо, це може бути недоліком (і ніколи не буде перевагою).
[EDIT]
Уважний читач mmap
сторінки керівництва , а саме опис MAP_NORESERVE
, помітить ще одна причина , чому своп є в деякій мірі необхідності навіть в системі з «досить» фізичної пам'яті:
"Якщо місце для заміни не зарезервовано, ви можете отримати SIGSEGV під час запису, якщо фізична пам'ять недоступна."
- Зачекайте хвилинку, що це означає?
Якщо ви картографуєте файл, ви можете отримати доступ до вмісту файлу безпосередньо так, як якщо б файл був якимось чином за допомогою магії в адресному просторі вашої програми. Для доступу лише для читання операційній системі в принципі потрібно не більше однієї сторінки фізичної пам’яті, яку вона може переповнювати різними даними щоразу, коли ви отримуєте доступ до іншої віртуальної сторінки (з міркувань ефективності, це, звичайно, не те, що робиться, але в принципі ви могли отримати доступ до даних, що варті терабайт, за допомогою однієї сторінки фізичної пам'яті). А що робити, якщо ви такожнаписати в картографічне відображення? У цьому випадку для кожної сторінки, на яку написано, операційна система повинна мати фізичну сторінку - або обміняти місце. Немає іншого способу зберігати дані, поки процес запису брудних сторінок не виконає свою роботу (що може бути кілька секунд). З цієї причини ОС резервує (але не обов'язково ніколи вчиняє) місця для обміну, тому у випадку, якщо ви пишете на картографування, поки фізична сторінка не використовується, це неможливо і нормальний стан), знову гарантовано , що він все одно буде працювати.
А що робити, якщо немає заміни? Це означає, що жодний своп не може бути зарезервований (так!), І це означає, що як тільки не залишиться вільних фізичних сторінок, і ви пишете на сторінку, ви отримуєте приємний сюрприз у вигляді отримання вашого процесу вина про сегментацію і, ймовірно, вбита.
[/ EDIT]
Однак традиційна рекомендація робити своп вдвічі більше за об'єм оперативної пам’яті є безглуздим. Хоча дисковий простір дешевий, не має сенсу призначати стільки свопів. Витрачати щось дешеве, як і раніше, марно, і ви абсолютно не хочете постійно замінювати та виправляти робочі набори розміром у кілька сотень мегабайт (або більше).
Не існує єдиного "правильного" розміру свопу (існує стільки "правильних" розмірів, скільки є користувачів та думок). Зазвичай я призначаю фіксований 512MiB, незалежно від розміру оперативної пам’яті, що дуже добре працює для мене. Причина цього полягає в тому, що 512MiB - це те, що ви завжди можете собі дозволити, навіть на невеликому диску. З іншого боку, додавання декількох гігабайт swap - це не краще. Ви не збираєтесь їх використовувати, за винятком випадків, коли щось піде серйозно не так.
Навіть на SSD, swap - це на порядок повільніше, ніж оперативна пам'ять (через пропускну здатність і затримку шини), і хоча дуже зручно переміщувати щось для заміни, що, ймовірно, знову не знадобиться (тобто, швидше за все, ви не будете знову поміняти його, щоб ваш пул доступних сторінок ефективно збільшився безкоштовно), якщо вам дійсно потрібні значні обсяги заміни (тобто у вас є додаток, який використовує, наприклад, набір даних 50GiB), ви майже втратили.
Після того, як ваш комп’ютер починає заміняти та висувати гігабайти вартістю сторінок, все переходить до сканування. Отже, для більшості людей (включаючи мене) це не варіант, і такий обмін таким чином не має сенсу.