Що відбувається з даними в свопі, коли ваш комп’ютер сплять?


12

Коли комп'ютер переходить у режим сплячого режиму, він зберігає вміст ОЗУ в просторі обміну, щоб він міг відновитись саме там, де він зупинився, коли він увімкнеться знову.

Отже, що робити, якщо ви зараз використовуєте більше пам'яті, ніж у вас є оперативна пам'ять. У цьому випадку деякі дані, які інакше були б в оперативній пам'яті, зберігаються для заміни.

Приклад. На комп’ютері є 1 Гб оперативної пам’яті та 1 Гб місця підкачки. Наразі він використовує всі, крім 100 МБ оперативної пам’яті та 500 МБ свопу. Таким чином, для збереження свого стану потрібно пам'ятати про 1,4 ГБ пам'яті. Однак своп становить лише 1 Гб.

Що буде в цьому випадку?

~~ редагувати ~~

Як відповів нижче, сплячий стан не вдається. Тоді наступне запитання:

Якщо це не вдається, де повідомляється про помилку?

Відповіді:


11

Це залежить від режиму сплячки. Навіть якщо ви обмежите це питання Linux, впровадження з часом розвивалося.

Спочатку врахуйте, що частина оперативної пам’яті використовується для кеш-дисків. Це не потрібно переносити на своп, оскільки він може бути перезавантажений з диска після відновлення системи. Для системи з хорошим співвідношенням витрат та ефективності, як правило, приблизно половина оперативної пам’яті виділяється на кеші. (Див. Також Навіщо використовувати swap, коли оперативної пам’яті більше ніж достатньо .) У Linux деякі початкові реалізації зберігатимуть усю виділену пам’ять у своп, але поточна реалізація (-ів) сплячки кеш-диска пропускає.

По-друге, деякі системи стискають пам'ять під час написання свопу, що може передбачити точний необхідний обмін важко передбачити. Деякі версії підтримки гібернації Linux підтримують стиснення; Я не знаю, чи справді це.

Що, як правило, можна очікувати, якщо не вистачає місця для обміну, це те, що сплячка закінчиться невдачею: система намагатиметься зберігати (корисний) вміст ОЗУ в своп, і як тільки виявить, що не вистачає місця, спроба сплячки перервана (зазвичай із повідомленням про помилку на консолі та в системних журналах). Наскільки мені відомо, Linux завжди поводився так (не те, що насправді є інша розумна поведінка).


1
Я спробував це на віртуальній машині, і він не вдався, хоча він не відображав жодного повідомлення для користувача (я намагався з ubuntu 10.4). У якому системному журналі буде повідомлено про цю помилку?
Девід Онелл

3
@David: Однозначно має бути щось у /var/log/kern.log. Я не знаю, чи відсутність повідомлення на консолі є химерністю цієї конкретної версії ядра чи навмисною конфігурацією Ubuntu (я знаю, що вони навмисно придушили якийсь інший вихід консолі).
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.