Тому що більшість вважає, що заміна = погана, і якщо ви не зменшите свопп, система буде міняти місцями, коли цього насправді не потрібно. Жодне з них не є правдою. Люди пов'язують обмін із часом, коли їхня система забуває - однак, це в основному відбувається обмін, тому що система забивається, а не навпаки. Коли система обміняється, вона вже врахувала вартість продуктивності до свого рішення про обмін, і вирішила, що не робити цього буде мати більшу загальну пеню в продуктивності або стабільності системи.
В цілому налаштування за замовчуванням призводять до хорошої загальної продуктивності та стабільності. Я рекомендую залишити його за замовчуванням. Є додаткові шляхи для Linux, щоб покращити управління пам’яттю для вирішення деяких кращих випадків, але за великим рахунком контроль заміщення не є хорошим вирішенням - налаштуйте його в одному напрямку, і ви можете виправити одну проблему та створити інші проблеми. Якщо це взагалі можливо, просто встановлення більшої кількості фізичної оперативної пам’яті (і залишення простоти в спокої) затьмарює всі інші засоби захисту.
Як Linux використовує оперативну пам’ять
Будь-яка ОЗУ, яка не використовується додатками, може використовуватися як "кеш". Кеш важливий для швидкої, плавної роботи системи, що прискорює читання та запис на диск.
Якщо ваші додатки збільшать обсяг пам’яті до того часу, в якому вони використовують майже всю вашу оперативну пам’ять, ваш кеш скоротиться, і в середньому операції з диском уповільниться в результаті. Зараз недостатньо лише десятків мегабайт або менше для кешу.
Якщо додатки ще більше збільшують обсяг пам’яті - якщо припустити, що у вас немає місця для заміни - у вас не тільки не буде місця для кешу, але ви зрештою втрачаєте пам’ять, і вашій системі доведеться вбивати запущені процеси. Процеси вбивства гірші, ніж уповільнення, оскільки вони дають вам нестабільну, непередбачувану систему.
Як Linux використовує своп
Для боротьби з обома цими проблемами ваша система може переділити деяку часто використовувану пам’ять додатків для місця обміну на диску, звільнивши оперативну пам’ять. Додаткова оперативна пам’ять може запобігти відмирання процесів через нестачу пам’яті та може відновити трохи кешу, щоб дискові операції могли працювати більш плавно.
Це перерозподіл не проводиться відповідно до певного обмеження. Ви не досягаєте певного відсотка розподілу, після якого Linux починає мінятися. Він має "нечіткий" алгоритм. Це враховує багато речей, які найкраще можна охарактеризувати «скільки тиску існує для розподілу пам’яті». Якщо є багато «тиску» для виділення нової пам’яті, то це збільшить шанси на те, що деякі будуть помінятися, щоб звільнити більше місця. Якщо "тиск" буде меншим, то це знизить ці шанси.
У вашій системі встановлено функцію "простоти", яка допоможе вам налаштувати, як обчислюється цей "тиск". Він часто помилково представлений як "відсоток оперативної пам'яті", але це не так, це просто значення, яке використовується як частина формули. Значення приблизно від 40 до 60 є рекомендованими здоровими значеннями, 60 зараз є типовими.
Дозволяти вашій системі поміняти місцями, коли це потрібно, - це дуже гарна річ, навіть якщо у вас багато оперативної пам’яті. Дозволяючи вашій системі поміняти місцями, якщо це потребує душевного спокою, що якщо ви коли-небудь стикаєтесь із ситуацією з низькою пам’яттю навіть тимчасово (під час короткого процесу, що використовує багато пам’яті), у вашої системи є другий шанс зберегти все, що працює. Якщо ви підете так далеко, щоб повністю відключити заміну, то ви ризикуєте вбити процеси через те, що не зможете виділити пам'ять.
Що відбувається, коли система замикається та сильно змінюється?
Заміна - це повільна і дорога операція, тому система уникає цього, якщо не розрахує, що компроміс у кеш-пам'яті буде компенсувати її в цілому, або якщо це потрібно, щоб уникнути процесів вбивства.
Багато часу люди будуть дивитись на свою систему, яка сильно обмолочує диск і використовує багато місця для обміну і звинувачує в цьому. Це неправильний підхід. Якщо заміна коли-небудь досягає цієї крайності, це означає, що заміна - це спроба вашої системи вирішити проблеми з низькою пам’яттю, а не причиною проблеми, і що без заміни вашого запущеного процесу просто випадково загине.
Що з настільними системами? Чи не вимагають вони іншого підходу?
Користувачі настільної системи дійсно очікують, що система "почує себе чуйною" у відповідь на ініційовані користувачем дії, такі як відкриття програми, який є типом дій, який іноді може викликати заміну через збільшення необхідної пам'яті.
Один із способів, який деякі люди намагаються налаштувати, це зменшити параметр zamppiness, що може підвищити толерантність системи до додатків, використовуючи пам'ять і втрачаючи мало місця в кеші.
Однак це лише зміщення воріт. Перша програма тепер може завантажуватися без операції swap, але вона залишить меншою слабкість для наступного завантаження. Ця ж заміна може статися пізніше, коли ви наступного разу відкриєте програму. Тим часом продуктивність системи знижується в цілому через зменшений розмір кешу. Таким чином, будь-яку вигоду від налаштування зменшеної затишності може бути важко виміряти, зменшуючи затримку заміни на деякі моменти, але викликаючи інші повільні показники в інший час. Трохи зменшити свобідність, можливо, виправдано, якщо ви знаєте, що ви робите, але зменшення його до 10% може залишити систему толерантною до дуже малих розмірів кешу і залишити систему більш підданою заміні за короткий час.
Повністю слід уникати відключення swap, оскільки ви втрачаєте додатковий захист від умов пам'яті, які можуть спричинити збій або загибель процесів.
На сьогоднішній день найбільш ефективним засобом є встановлення більшої кількості оперативної пам’яті, якщо ви можете собі це дозволити.
Чи можна відключити заміну в системі, яка має багато оперативної пам’яті?
Якщо у вас набагато більше оперативної пам’яті, ніж ви, швидше за все, знадобиться для додатків, вам рідко знадобиться своп. Відключення swap, ймовірно, не змінить більшість часу. Але якщо у вас є багато оперативної пам’яті, за умови активації swap також не буде штрафу, оскільки система не заміняється, коли цього не потрібно.
Єдиними ситуаціями, в яких це змінило б, було б малоймовірна ситуація, коли система втрачає пам'ять, і, отже, кеш-система перешкоджає, і саме в такому типі ситуацій, де ви б хотіли найбільше обмінятися. Таким чином, ви можете спокійно залишити своп у звичайних налаштуваннях для додаткового спокою, без негативного впливу, коли у вас буде багато пам’яті.
Але як своп може пришвидшити мою систему? Чи не міняє повільні речі?
Акт передачі даних з оперативної пам’яті на своп - це повільна операція, але вона приймається лише тоді, коли ядро впевнене, що загальна вигода в результаті збереження розумного розміру кешу перевершить це.
Коли дані перебувають у свопі, коли вони знову з’являються?
Будь-яка частина пам’яті повернеться із заміни, як тільки вона буде використана - прочитана або написана на. Однак, як правило, пам'ять, до якої поміняється, - це пам'ять, до якої не було доступно протягом тривалого часу, і, як очікується, вона не буде потрібна незабаром.
Передача даних із свопу - це забирає багато часу, як і їх розміщення. Ваше ядро не видалить дані з нього, якщо цього не потрібно. Хоча дані знаходяться в обміні і не використовуються, це залишає більше пам'яті для інших речей, які використовуються, і більше системного кешу.
Чи існують випадки, коли зменшення свобідності доцільно?
Так. Якщо ви використовуєте сервер, призначений для одного конкретного серверного додатку, який не має вигоди від кеш-системи. Деякі сервери баз даних, такі як сервер Oracle, MySQL / MariaDB, рекомендують в деяких випадках зменшувати простоту до 1 до 10, оскільки ці двигуни бази даних використовують власне кешування.
Зауважте, що це справедливо лише в тому випадку, якщо ваша система присвячена цьому одному завданню, а у випадку MySQL / MariaDB лише якщо ви використовуєте суто InnoDB або XtraDB, а не MyISAM чи Aria тощо.