Что происходит с данными в разделе подкачки, когда компьютер переходит в спящий режим?

12

Когда компьютер переходит в режим гибернации, он сохраняет содержимое оперативной памяти в пространство подкачки, чтобы он мог возобновить работу с того места, на котором он остановился, при повторном включении.

Итак, что если вы используете больше памяти, чем у вас есть RAM. В этом случае некоторые данные, которые в противном случае находились бы в ОЗУ, сохраняются для обмена.

Пример. Компьютер имеет 1 ГБ ОЗУ и 1 ГБ подкачки. В настоящее время он использует все, кроме 100 МБ оперативной памяти и 500 МБ подкачки. Таким образом, для сохранения состояния необходимо помнить о 1,4 ГБ памяти. Тем не менее, подкачка составляет всего 1 ГБ.

Что будет в этом случае?

~~ edit ~~

Как показано ниже, гибернация не работает. Итак, следующий вопрос:

Когда это не удается, где сообщается об ошибке?

Дэвид Онеилл
источник

Ответы:

11

Это зависит от реализации гибернации. Даже если вы ограничите вопрос Linux, реализация со временем эволюционировала.

Во-первых, учтите, что часть оперативной памяти используется для дискового кэша. Его не нужно переносить в раздел подкачки, поскольку его можно перезагрузить с диска после возобновления работы системы. В системе с хорошим балансом затрат и эффективности обычно около половины ОЗУ выделяется для кэшей. (См. Также Зачем использовать подкачку, когда ОЗУ более чем достаточно .) В Linux некоторые ранние реализации сохраняли всю выделенную память в подкачку, но текущая реализация (и?) Гибернации пропускает дисковые кэши.

Во-вторых, некоторые системы сжимают память во время ее записи в своп, что может затруднить прогнозирование точного необходимого количества свопа. Некоторые версии поддержки гибернации в Linux поддерживают сжатие; Я не знаю, делают ли нынешние.

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

Жиль "ТАК - перестань быть злым"
источник
1
Я попытался сделать это на машине с виртуальной коробкой, и это не удалось, хотя он не отображал никаких сообщений пользователю (я пытался с Ubuntu 10.4). В каком системном журнале будет сообщено об этой ошибке?
Дэвид Онеилл
3
@ Дэвид: Там определенно должно быть что-то /var/log/kern.log. Я не знаю, является ли отсутствие сообщения на консоли причудой данной конкретной версии ядра или преднамеренной конфигурацией Ubuntu (я знаю, что они намеренно подавили какой-то другой вывод консоли).
Жиль "ТАК - перестань быть злым"