У меня есть несколько ПК/ноутбуков, работающих под управлением последней версии Ubuntu 20.04 с текущим 64-битным ядром 5.4.0-74-generic, как предусмотрено в репозиториях Ubuntu по умолчанию. Один из них, довольно обычный ПК с процессором Intel i3, уходит в спящий режим чуть больше 2 минут после того, как я обновился с 18.04 до 20.04.
Различные ресурсы, которые я нашел об отладке спящего режима, в основном охватывают пробуждение или полный отказ от спящего режима, но не suspend-to-disk, который занимает очень много времени. Пробуждение работает нормально и занимает всего несколько секунд. Как узнать, почему спящий режим занимает так много времени? Есть ли что-то подобное systemd-analyze blame
для спящего режима?
Пока что я добавил initcall_debug no_console_suspend
в и он показывает консоль, однако, ничего не показывает, что объясняет долгое время. Он показывает "Обнаружено зависание аппаратного блока" для сетевого интерфейса. Но это появляется прямо в начале гибернации, и я думаю, что это ожидаемое поведение GRUB_CMDLINE_LINUX_DEFAULT
./etc/default/grub
Я использую systemctl hibernate
для его инициирования. Проходит 2 минуты до выключения питания, даже если запущен как root на консоли без других вошедших в систему пользователей или пользовательских процессов.
решение1
Мой совет:
Решитьзадать вопрос @ askubuntu.comи отнеситесь к этому серьезно.
;)
Собирайте данные, воспроизводите проблемы с минимальными настройками и будьте конкретны.Убедитесь, что имеется достаточно места для подкачки.Команда
free
выдает объем оперативной памяти («Mem») и подкачки. Общий объем подкачки должен быть больше общего объема оперативной памяти. Я понял, что в какой-то момент добавил оперативной памяти, но не увеличил размер раздела подкачки.Редактировать(2021-06-07):Разница в размере составила ~1 ГБ. После увеличения размера гибернация стала многократно быстрее, но я все еще думаю, что это был артефакт, вызванный изменением скорости записи SSD, содержащего раздел подкачки. (См. также следующий пункт.)Насколько быстрой должна быть гибернация?По сути, во время suspend-to-disk вся оперативная память записывается на диск. Объем оперативной памяти и скорость записи на диск определяют необходимое время. Я нашел раздел подкачки и проверил, сколько времени потребуется, чтобы обнулить его, используя
dd if=/dev/zero
.dd
сообщил о скорости 108 МБ/с. Запись 7 ГБ заняла ~65 с. На моем ПК 8 ГБ. Поэтому я должен ожидать, что гибернация займет не менее минуты.Попробуйотладка путем удаления деталейсистемы: Отключите ненужное оборудование. Гибернация сразу после новой загрузки, с предварительным входом в систему или без него.
Добавлять
initcall_debug no_console_suspend
в командную строку ядра, как описано в вопросе.
На данный момент я предполагаю, что причины медленной гибернации у меня следующие: я добавил ОЗУ (поэтому гибернация занимает больше времени), я забыл увеличить объем подкачки в соответствии с добавленной ОЗУ (у меня было 7 ГБ подкачки, но 8 ГБ ОЗУ), а скорость записи на SSD со временем снизилась (как минимум в 2 раза).
Дополнительная и рекомендуемая литература:
- Лучшая практика отладки проблем с приостановкой/гибернацией в Linux* | 01.orgопубликовано в 2015 г.