Устраняем проблемы электропитания, или не спешите сдавать железку по гарантии
Что может быть не так с настройками питания компонентов компьютера?
Давайте сначала взглянем вот на эту диаграмму:
реклама
Очевидно, что ноутбуков продается гораздо больше, чем собирается настольных компьютеров и производители компонентов и софта во многом ориентируются на ноутбучный сегмент.
В ноутбуках одна из ключевых характеристик - время автономной работы от батареи. Чтобы его продлить производители стараются максимально оптимизировать потребление энергии, снижая его всегда, когда это возможно. В качестве побочного эффекта мы получаем, что энергосбережение пытается взять власть и в моменты, когда ноутбук подключен в сеть и даже на настольном компьютере. Как только система чувствует, что нагрузка снижена или она бездействует, начинают активироваться режимы пониженного энергопотребления. И вот эти режимы могут на настольном компьютере неожиданно приводить к полному зависанию, отключению отдельного устройства или системы в целом.
За последние 8 лет я сталкивался с таким несколько раз на настольных компьютерах. Обнаруженные проблемы можно разложить по следующим категориям:
- Внезапное отключение системы из-за высокого уровня c-states процессора
- Подвисания системы из-за высокого уровня с-states
- Внезапный отвал NVMe диска из-за режима энергопотребления по умолчанию, даже если диск был под нагрузкой
- Кратковременное снижение производительности NVMe дисков из-за режима энергопотребления по умолчанию, даже если диск был под нагрузкой.
Проблемы у меня были с разными компонентами разных поколений и производителей: Intel i7-4770k, Ryzen-3900x, NVMe Kingston A2000. Судя по информации от других пользователей, проблемы бывают и со многими другими устройствами.
реклама
Первый раз я столкнулся с этим, когда 7 лет назад новенький компьютер с 4770k на борту начал подтормаживать без какой-либо серьезной нагрузки. Когда внезапно компьютер вырубился, я перебрал и перепроверил все компоненты: от блока питания до материнки. Путем исключения выяснил, что проблема с процессором, и, сначала уже хотел сдавать его по гарантии, но потом выяснил, что он исправен. Под Windows было крайне сложно понять что же происходит. Помог запуск под Linux и изучение его журнала, который оказался очень подробным. Система не вырубалась, но в списке ошибок было что почитать. Гуглю эти ошибки - и я узнаю, что ещё много людей мучаются с такой проблемой. Так я узнал про c-states и, что неким образом при его высоких значениях система сначала пытается снизить энергопотребление, а этого не хватает мощному десктопному процессору даже для простоя. Аналогичная ситуация происходила с Ryzen 3900х. Тоже хотел сдавать по гарантии, думал что два раза в одну воронку снаряд не попадает. Да и за 6 лет индустрия должна была (нет) уже с этим разобраться. Усложнялось все ещё тем, что если в случае с 4770k падения и подвисания происходили достаточно часто - раз в несколько дней и можно было отследить, то 3900х падал раз в месяц, да еще и был в офисе. Но, попробовав изменить c-states, все решилось и работает уже полтора года как часы.
Похожая ситуация была с ssd дисками - их режимы ожидания что под Windows что под Linux похоже целиком пришли из ноутбучного мира, что не совсем дружит с десктопом.
Что такое с-states, какие могут быть проблемы?
реклама
С-states - это режимы энергосбережения процессора. Впервые их ввели еще на 486м Intel'е.
В большинстве систем есть 7 уровней C-states (плюс еще некоторые подуровни для определенных процессоров). В некоторых системах есть и 10 уровней. В других есть пропущенные уровни. Если активирован уровень C0, то все компоненты процессора потребляют энергию. Процессор в полностью рабочем состоянии и никаких проблем не возникает. Уровни C1-C2 соответствуют все еще включенному процессору с рабочим кэшом, но с остановкой либо замедлением одного или нескольких внутренних тактовых генераторов. Начиная с уровня C3 начинается спящий режим, кэш L1 инструкций пустой. Уровни С4-С6 определяют глубину этого спящего режима. Система, отслеживая свою активность, вычисляет на какой уровень c-state надо перейти в данный момент. Если активность снижается, система повышает уровень, снижая энергопотребление.
У операционной системы есть глобальный параметр max_c-state, определяющий максимальное значение c-state в которое может уходить система. По умолчанию он как раз, наследуя ноутбучные правила, близок или равняется C6.
Проблемы могут возникнуть с повышением уровня C-states. Выходя с C0 на С1/C2 может произойти отключение или подвисания там, где этого не ждешь. Объясняется это тем, что современные алгоритмы управления C-states писались практически одинаковыми как для ноутбуков так и для мощных десктопных процессоров. Казалось бы, если установлен максимальный уровень на C3 или больше - то уже без разницы, какой будет конкретно уровень - ведь проблемы начинаются, когда система еще не в спящем режиме, а раньше. Но это не всегда так, у Windows 7 были проблемы как раз когда с C3 повышали максимальный допустимый уровень до C6. Видимо в системе были разные алгоритмы работы с энергопотреблением для разных максимальных уровней энергопотребления, а не только для текущего уровня.
Устраняем проблемы c С-states на Windows
Чтобы устранить проблему с c-states надо понизить его максимальный допустимый уровень до такого, когда система начнет работать стабильно. Если вы (как я) не выключаете компьютер месяцами, то можете сразу выставить C0.
Для этого надо под администратором воспользоваться утилитой командной строки POWERCFG :
- Узнаем доступные схемы питания c помощью powercfg /list:
- Выбираем схему Высокая производительность и копируем ее идентификатор. В моем случае идентификатор: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
- Выполняем команду powercfg /SETACVALUEINDEX 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c SUB_PROCESSOR IDLESTATEMAX 0:Где последняя цифра - максимальный допустимый уровень с-states, который вы хотите задать. В моем случае это 0. Эта команда меняет схему питания "Высокая производительность", задавая новый максимальный уровень для неё.
- Активируем схему питания: powercfg /SETACTIVE 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
Устраняем проблемы с C-states на Linux:
- открываем под sudo файл /etc/default/grub
- ищем секцию GRUB_CMDLINE_LINUX_DEFAULT
- прописываем intel_idle.max_cstate=0, где цифра - максимальный допустимый уровень c-state
- не смущаемся, что параметр называется intel_idle, для AMD он тоже работает
реклама
Примечание: некоторые BIOS позволяют установить max c-state в своем меню, но не факт, что система не переопределит это значение.
Проблемы с энергосбережением nvme дисков
По аналогии с процессорами NVMe диски имеют несколько уровней энергосбережения.
Данная технология называется Autonomous Power State Transition (APST) и призвана в первую очередь увеличить время работы батареи ноутбука.
Контроллер собирает информацию об активности системы и частоте запросов к диску и выставляет оптимальный с его точки зрения режим энергопотребления. Работа этого алгоритма регулируется выбранной схемой энергопотребления, которая в первую очередь характеризуется величиной таймаута. Если за время более чем таймаут, указанный в схеме к накопителю не было ни одного запроса, то драйвер повышает глубину уровня ожидания NVMe, выходя из уровня S0. На более глубоких уровнях увеличивается максимальное время отклика диска. В настройках этой схемы, в целом беспроблемно работающей на ноутбуках может быть заложено состояние, зайдя в которое десктопная система вызовет сбой и диск отмонтируется из файловой системы. Более того, если ОС загружена с этого диска, то с большой вероятностью она умрёт, а испуганный пользователь захочет сдать диск или все остальные девайсы по гарантии. У меня отвал диска с системой был только под Линуксом, но сам этот диск отваливался и из под Windows (Windows была на SATA). Основная проблема была конечно не отвал, а подвисания.
Ниже приведены стандартные настройки таймаутов NVMe для разных схем питания под Windows:
Я не нашел, что такие схемы различаются для десктопов и ноутбуков. Но, к счастью, пользователь может управлять этой схемой. Если мы повысим таймаут, то диск просто никогда не успеет уйти на более глубокий уровень ожидания и будет всегда активен.
Меняем схему энергосбережения NVMe под Windows 10
Есть два способа исправить проблему с схемой энергосбережения NVMe - через команду powercfg или через реестр + настройки питания. Мы рассмотрим второй способ, так как он более нагляден
Через реестр:
- Открываем реестр
- Проходим в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\d639518a-e56d-4345-8af2-b9f32fb26109:
- Меняем значение в поле Attributes c 1 на 0:
- Теперь у нас доступна опция регулировки таймаута в настройках электропитания
- Win+X -> Управление электропитанием -> Дополнительные параметры питания -> Настройка схемы электропитания (для вашей текущей схемы) -> Изменить дополнительные параметры питания
- В открывшемся окне меняем таймаут на больший, если мы хотим, чтобы накопитель был активен почти всегда, и его не вырубало (я поставил 1000 когда были проблемы и они исчезли):
Меняем схему энергосбережения на Linux:
- Открываем /etc/default/grub под sudo
- под секцией GRUB_CMDLINE_LINUX_DEFAULT прописываем nvme_core.default_ps_max_latency_us=0
Как альтернатива - можно полностью отключить APST, но мне не удалось найти параметр.
Заключение:
Судя по тому, что я несколько раз сталкивался с этой проблемой и находил довольно многих пользователей с такими же неполадками, есть значительная часть десктопных компонентов отнесенная в сервис или сданная назад, будучи вполне рабочими, но не вполне совместимыми. Все это софтовые проблемы из-за ноутбучного влияния в коде ОС. Для рядового пользователя они совсем не приятные, и я надеюсь, что данный материал поможет кому-то из читателей.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила