В моем основном ноутбуке различные проблемы с электропитанием возникают часто, что объяснимо работой в инсайдерских сборках. Однако и в стабильной версии 1803 я заметил, что моя система перестала уходить в сон. При этом монитор выключался через указанный промежуток времени, что намекало на правильное определение системой состояния бездействия.
Я выставил маленький период перехода в сон, 1-2 минуты и приступил к диагностике.
Проверка запросов к подсистеме питания от приложений и драйверов
Первым делом надо смотреть в powercfg, что удерживает ОС от перехода в сон. Процессы и драйверы, обращающиеся к подсистеме электропитания, можно увидеть в командной строке от имени администратора:
powercfg -requests
Сразу видно, что запрос к SYSTEM идет от DRIVER — в данном случае, Realtek использует аудиопоток.
В списке также может присутствовать WebRTC от Chrome, а сразу после перезапуска системы там можно увидеть запросы оптимизации загрузки, индекс поиска, но они быстро исчезают. Можно внести процесс или драйвер в список исключений, и он не будет препятствовать уходу в сон.
powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)" SYSTEM
Команда читается как «игнорировать запрос от DRIVER [полное имя драйвера] к SYSTEM».
Список исключений хранится в разделе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride
и выводится командой
powercfg -requestsoverride
Я перезагрузился для верности, но система отказывалась засыпать. Проверив исключения и список запросов, я обнаружил, что драйвер Realtek продолжал использовать аудиопоток, хотя был внесен в исключения.
Я поплясал немножко с бубном вокруг исключений, но успеха не добился. Быстрое гугление подтвердило, что в некоторых случаях они не срабатывают. Это типично для legacy запросов, но тут был другой случай, и я не первый, кто с этим столкнулся.
В итоге я удалил Realtek из списка. Можно удалять записи в редакторе реестра или консоли. Команда почти такая же, как при добавлении, просто не указывается куда идет запрос, т.е. в данном случае в конце команды нет SYSTEM:
powercfg -requestsoverride DRIVER "Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0269&SUBSYS_17AA2204&REV_1002\4&d00657&0&0001)"
Мы пойдем другим путем © Окончание истории в блоге.