Как отладить медленную гибернацию

Как отладить медленную гибернацию

У меня есть несколько ПК/ноутбуков, работающих под управлением последней версии 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

Мой совет:

  1. Решитьзадать вопрос @ askubuntu.comи отнеситесь к этому серьезно. ;)Собирайте данные, воспроизводите проблемы с минимальными настройками и будьте конкретны.

  2. Убедитесь, что имеется достаточно места для подкачки.Команда freeвыдает объем оперативной памяти («Mem») и подкачки. Общий объем подкачки должен быть больше общего объема оперативной памяти. Я понял, что в какой-то момент добавил оперативной памяти, но не увеличил размер раздела подкачки.Редактировать(2021-06-07):Разница в размере составила ~1 ГБ. После увеличения размера гибернация стала многократно быстрее, но я все еще думаю, что это был артефакт, вызванный изменением скорости записи SSD, содержащего раздел подкачки. (См. также следующий пункт.)

  3. Насколько быстрой должна быть гибернация?По сути, во время suspend-to-disk вся оперативная память записывается на диск. Объем оперативной памяти и скорость записи на диск определяют необходимое время. Я нашел раздел подкачки и проверил, сколько времени потребуется, чтобы обнулить его, используя dd if=/dev/zero. ddсообщил о скорости 108 МБ/с. Запись 7 ГБ заняла ~65 с. На моем ПК 8 ГБ. Поэтому я должен ожидать, что гибернация займет не менее минуты.

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

  5. Добавлятьinitcall_debug no_console_suspendв командную строку ядра, как описано в вопросе.

На данный момент я предполагаю, что причины медленной гибернации у меня следующие: я добавил ОЗУ (поэтому гибернация занимает больше времени), я забыл увеличить объем подкачки в соответствии с добавленной ОЗУ (у меня было 7 ГБ подкачки, но 8 ГБ ОЗУ), а скорость записи на SSD со временем снизилась (как минимум в 2 раза).

Дополнительная и рекомендуемая литература:

Связанный контент