Железячное

Jun 06, 2014 19:04

Была у домашнего десктопного компа такая проблема - он иногда не мог нормально выйти из гибернации (s2disk). Типичная ситуация - утром просыпается по будильнику, грузит ядро и начинает распаковывать сохраненный образ в память. С некоторой вероятностью (скажем, примерно в 3/4 случаев) процесс останавливается с сообщением «загружено столько-то процентов, произошла ошибка; перезагрузиться в режиме noresume? Да/нет». Если сказать «нет», то перезагружается и пробует восстановить образ еще раз, что происходит всегда успешно. Ошибку очень трудно воспроизвести: если усыпить комп, а потом разбудить, то всё происходит без ошибок. То есть проблема возникает (хотя не всегда), когда комп вечером усыпляли, а потом сам утром просыпался по rtcwake.

Итак, еще раз перечислю собранные факты:
  1. Ошибка проявляется при пробуждении rtcwake'ом, но не всегда.
  2. Если усыпить комп кнопкой питания или из консоли, то ошибка не проявляется.
  3. Если при возникновении ошибки повторить попробовать восстановиться еще раз, то вторая попытка всегда проходит успешно. (То есть образ на диске не был испорчен.)
Разумеется, я первым делом мучил память memtest'ом, изучал диск на предмет дефектов в своп-разделе, ничего подозрительного не находилось. Недавно я проснулся среди ночи и понял, что всё идет по плану. Сформулировал гипотезу, которая всё объясняла и была легко проверяема.

Дело в том, что многие современные мониторы являются по совместительству USB-хабами. Так что выключение монитора кнопкой питания приводит к тому, что пропадает поддерево USB-устройств, что смущает ОС, которая «просыпается, а голова в тумбочке». Я, действительно, обычно выключал монитор через секунду-две после усыпления компа, а s2disk работает быстро и, как правило, успевает завершиться за это время. (Да, я знаю, что нерационально отключать монитор кнопкой, ведь в спящем режиме он расходует доли ватта. Так, привычка.) Если бы я был внимательнее, возможно, получил бы более причудливую диагностику: «если комп весь день много трудился, так что к вечеру в нем накопилось много процессов, сожравших много памяти, то вероятность успешного пробуждения выше». Получилось бы не хуже, чем баянный автомобиль, который не любил ванильное мороженое.

Кстати, интересно было бы изучить вопрос, насколько сложно реализуется более умная гибернация (и s2disk, и s2ram), которая может пережить некоторые изменения аппаратной конфигурации. Нужно провести дополнительные манипуляции перед началом гибернации - запасти побольше вариантов будущей реальности, когда часть устройств будет отключена.

загадка, linux, hardware

Previous post Next post
Up