Чому нам потрібно встановити простір підкачки вдвічі більше, ніж наша фізична пам'ять?


11

Коли ми хочемо встановити систему Linux, є загальна пропозиція встановити простір підкачки вдвічі більше, ніж фізична пам'ять. Я хочу знати, навіщо нам це потрібно, і як це ця пропозиція?

Відповіді:


8

Коротка відповідь - «Не треба ».

Залежно від типу ядра / системи, можливо, має сенс розміщувати розмір простору, таким чином, наприклад, на сторінці налаштування FreeBSD (7) ми знаходимо наступне обґрунтування розміру підміни принаймні 2 рази від фізичного розміру пам'яті:

Зазвичай слід розмістити простір для заміни приблизно в 2 рази основної пам’яті для систем, що мають менше 2 Гб оперативної пам’яті, або приблизно 1х основної пам'яті, якщо у вас є більше. Якщо у вас немає багато оперативної пам’яті, ви, як правило, хочете набагато більше заміни. Не рекомендується налаштовувати в системі менше, ніж 256 Мб своп, і слід пам’ятати про розширення пам’яті в майбутньому під час розміщення розділу підкачки. Алгоритми виклику підключення VM ядра налаштовуються на найкращу ефективність, коли існує принаймні 2x обмін порівняно з основною пам'яттю. Настроювання занадто малої кількості свопів може призвести до неефективності коду сканування сторінки VM, а також створити проблеми пізніше, якщо ви додасте більше пам’яті на свою машину. Нарешті, у великих системах з декількома дисками SCSI (або декількома дисками IDE, що працюють на різних контролерах), ми настійно рекомендуємо налаштувати заміну на кожному диску. Перемінні розділи на дисках повинні бути приблизно однакового розміру. Ядро може обробляти довільні розміри, але внутрішні структури даних масштабуються до 4 разів найбільшим розділом підкачки. Утримуючи розміри розділів майже однакового розміру, ядро ​​дозволить оптимально розмістити простір для заміни на N дисках. Не хвилюйтеся з приводу переборщення з ним, обмінний простір - це заощаджувальна грань UNIX, і навіть якщо ви зазвичай не використовуєте багато свопів, це може дати вам більше часу на відновлення після запущеної програми, перш ніж вимушені перезавантажуватися. Утримуючи розміри розділів майже однакового розміру, ядро ​​дозволить оптимально розмістити простір для заміни на N дисках. Не хвилюйтеся з приводу переборщення з ним, обмінний простір - це заощаджувальна грань UNIX, і навіть якщо ви зазвичай не використовуєте багато свопів, це може дати вам більше часу на відновлення після запущеної програми, перш ніж вимушені перезавантажуватися. Утримуючи розміри розділів майже однакового розміру, ядро ​​дозволить оптимально розмістити простір для заміни на N дисках. Не хвилюйтеся з приводу переборщення з ним, обмінний простір - це заощаджувальна грань UNIX, і навіть якщо ви зазвичай не використовуєте багато свопів, це може дати вам більше часу на відновлення після запущеної програми, перш ніж вимушені перезавантажуватися.

Інші фактори можуть бути важливими, коли ви вирішуєте, скільки місця для розміщення місця, де його виділити тощо. Наприклад, якщо ви встановлюєте великий сервер із 128 Гб фізичної пам’яті, можливо, це гарна ідея уникати попереднього виділення 256 ГБ дискового простору для заміни, який ніколи не буде використовуватися.

З іншого боку, маючи деякий простір підкачки часто дозволяє захоплювати дампи ядра (наприклад , в розімкнутому, Net- і FreeBSD). Тож гарна ідея мати принаймні достатньо місця для обміну, щоб захопити повний дамп ядра на паніку.

Не існує абсолютного правила, яке підходить для всіх випадків. Ви повинні ознайомитись з поведінкою вашої конкретної системи, дізнатися, як вона працює, подумати про цільове використання системи та визначити найкращий розмір місця для обміну, що відповідає вашим потребам.


5

Вам зовсім не потрібно. Старі версії Windows розглядають кожну сторінку виділеної пам’яті як фактично mmap для файлу swap, тому вам потрібен хоча б ваш загальний фізичний розмір оперативної пам’яті в свопі, щоб він був корисним - це вже не так і сьогодні, і ніколи не було випадок у Linux, але чутка зберігається.

Однак є випадок, коли мати хоча б стільки обміну, скільки бажано оперативної пам’яті, - сплячий режим. Оскільки Linux використовує файл swap для сплячого режиму (він же, призупинити на диск), вам потрібно достатньо swap для зберігання всіх даних в оперативній пам'яті, а також усіх даних, які вже були замінені (мінус оперативної пам'яті кешу). Це стосується лише машин, яким потрібно перезимувати, наприклад, ноутбуків.

Нарешті, занадто багато свопів може бути поганою справою, незважаючи на те, що можуть сказати інші. Подумайте - якщо у вас є 4G оперативної пам’яті, і крім цього вам потрібні додаткові 8G підкачки, чи вважаєте ви, що ваша система все ще буде корисною, що з усім обміном на диск з диска? Часто краще, щоб процес скасування пам’яті був убитий відразу, коли у вас не вистачає пам’яті, а не уповільнення всієї системи до непридатного рівня, коли вона починає витрачати весь свій час на переміщення даних у та заміни.


1

Дуже давно існував загальний варіант Unix (я думаю, це був BSD, але я не можу знайти посилання зараз), який би виділяв кожну сторінку віртуальної пам’яті у просторі swap. Отже, якби у вас було стільки, скільки було замінено оперативної пам’яті, розмір віртуальної пам’яті все одно був би таким же, як і ваша оперативна пам’ять. Звичайна рекомендація тоді полягала в тому, щоб зробити обмін пам'яті вдвічі більше, ніж оперативна пам'ять, що зробило віртуальну пам'ять удвічі більшою, ніж оперативна пам'ять.

Сучасні об'єднання не так поводяться, тому причина цього правила застаріла (я думаю, це було вже застарілим у 1992 році, тому воно ніколи не було актуальним для Linux). Але як не дивно правило витримало. Якщо ви дотримуєтесь цього, ви отримуєте віртуальну пам’ять, що втричі перевищує обсяг оперативної пам’яті, тоді як початковий намір полягав у тому, щоб отримати вдвічі більше.

Тільки тому, що історична причина, що стоїть за правилом, не означає, що вона дурна. Місце на диску стало дешевше, тому може бути сенс виділити більше свопів. Скільки потрібно мати своп, багато залежить від того, скільки у вас є оперативної пам’яті та як ви її використовуєте. Ви можете запустити систему без свопінгу, але тоді ви не отримаєте шансів вибрати програми, які потрібно вбити, якщо ваша ОЗУ заповнюється, а система може бути повільнішою (іноді краще використовувати ОЗУ для кешу та поміняти деяку пам'ять програми вихід). Виділення занадто великої кількості обміну коштує невелику кількість оперативної пам’яті (для структур даних ядра) і, звичайно, дискового простору (але в наш час це бруд дешево, крім SSD). Якщо ви хочете перейти в сплячку, достатньо підміняти місцями, щоб вмістити всю віртуальну пам'ять.


Windows теж робить це: якщо менеджер пам'яті має достатньо місця для обміну, він зберігає там також копію сторінок, які знаходяться в пам'яті (починаючи з найменш нещодавно змінених, я думаю,), тож якщо йому потрібно поміняти їх, це можна зробити просто відкидаючи сторінки в пам'ять.
pqnet

0

Стародавня рекомендація, заснована на припущеннях про типову ємність системної пам’яті, швидкість шини пам’яті проти швидкості диска та відсоток часу, який процес витрачає в різних станах очікування. Я скептично налаштований, що в ці дні вам потрібно більше, ніж можливо, 1/2 фізичної пам’яті в просторі обміну - достатньо, щоб запобігти випадковим вбивствам OOM, коли ви працюєте біля повного використання пам'яті. Але повністю залежить від вашого типового навантаження, YMMV тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.