Вопрос или проблема
Я изучал файлы управления питанием в Linux и запутался в состояниях C и S.
- Состояния C определены в
/sys/devices/system/cpux/cpuidle/
. Насколько я понимаю, они используются для перевода ЦП в разные спящие состояния в зависимости от уровня бездействия. - Интерфейс S-состояний находится в
/sys/power/state
, и я вижу разные спящие состояния, такие как freeze, standby, mem и т. д. Если я читаю их описание, они пытаются достичь того же, что и состояния C.
Это приводит меня к моему вопросу: в чем разница между ними? И если я хочу предотвратить переход своей системы в бездействие, какие параметры мне нужно установить? Я установил параметр отключения для состояния C в /sys/devices/system/cpux/cpuidle/
, но я все равно наблюдал, как мой телефон переходит в состояние бездействия (использовал systrace
для наблюдения).
S-состояния — это глобальные состояния ACPI: они описывают состояние питания всей системы. Изменения состояний этого типа, как правило, запрашиваются пользователем или, по крайней мере, могут быть настроены пользователем (например, таймауты, ожидание при низком заряде батареи и т. д.).
C-состояния — это состояния процессора: они описывают состояние питания отдельного пакета ЦП (или даже ядра). Изменения состояний этого типа, как правило, автоматические и не влияют на общее состояние системы: ЦП может уйти в спячку и проснуться, не задействуя остальную систему.
Я не уверен, что отключение переходов состояний C является полезным в большинстве случаев (особенно на телефоне); вероятно, вас интересует отключение переходов состояний S. Состояние “бездействия” реализовано программно и не является официальным состоянием ACPI, поэтому в этом случае вы не найдете аппаратного управления. Переходы состояний S управляются программно, поэтому, например, на системе с управлением systemd, вы отключите спящий режим там; я не знаю, как отключить спящие состояния на телефонах.
Если у вас есть freeze, standby и т. д., это почти ручные команды. Что касается ноутбуков (они могут) подключаться к закрытию крышки, что, в конечном итоге, также является добровольным действием.
echo mem > /sys/power/state
Вот как я перевожу свою систему (мини-ПК, без крышки) в состояние S3 мгновенно. Потребление энергии падает с 3,5 до 1,2 Вт. (в режиме выключения все еще 0,7 Вт) С настройками мягкого сна по умолчанию для xorg это 2,5 Вт. Это должно быть S1 или S2.
]# cat /sys/power/mem_sleep
s2idle [deep]
Это для управления тем, какой вид сна вы хотите.
Но дистрибутив/ядро должно поддерживать ваше оборудование, и это не так просто. Я скоро прекратил эксперименты, как только у меня появилась команда “echo mem” на моем дистрибутиве. (Я не знаю о телефонах). Я даже выбрал этот дистрибутив, потому что такие вещи работали так хорошо.
S-состояния, если поддерживаются, являются командами пользователя, а не просто вещами, которые происходят со временем или при низком уровне энергии.
C-состояния в основном являются внутренним делом ЦП для состояния G0 “Работающий”. Многоядерный ЦП осторожно переводит некоторые ядра в какое-то состояние C, чтобы их можно было быстро активировать. Определения по ссылке в Вики немного условны. Обратите внимание на подсказку “C10”, это не особенность Haswell. Таким образом, “современные” ЦП объединяют низкое энергопотребление и высокую производительность.
“suspend-to-ram” является хорошим примером: ЦП должен спать, очень глубоко, и система почти полностью отключена, за исключением специального минимального состояния поддержания ОЗУ. Если ЦП потребует доли секунды, чтобы вернуться, это не проблема.
Но если одно или несколько ядер переходят в какое-то спящее состояние автоматически из-за низкой нагрузки системы (в бездействии, но функционирующей системе), их нужно быстро активировать.
.
Ответ или решение
Различия между C-состояниями и S-состояниями в контексте управления питанием системы
Во время изучения файлов управления питанием в Linux, возникает путаница между C-состояниями (состояниями процессора) и S-состояниями (глобальными состояниями системы). Оба типа состояний предназначены для управления уровнем энергопотребления, но имеют разные цели и способы работы.
C-состояния
C-состояния (или состояния покоя процессора) определяются в директории /sys/devices/system/cpux/cpuidle/
. Эти состояния характеризуют уровень бездействия процессора и позволяют процессору переходить в различные режимы сна в зависимости от текущей нагрузки. Основные особенности C-состояний:
-
Автоматическое управление: Переходы между C-состояниями происходят автоматически в зависимости от загруженности процессора. Если система не требует вычислительных ресурсов, процессор может перейти в более глубокие C-состояния, что снижает потребление энергии.
-
Микропроцессорные состояния: C-состояния могут варьироваться от легкого сна (например, C0 — рабочий режим) до более глубоких состояний (C1, C2 и даже C10), где процессор использует меньше энергии, но требует больше времени для выхода из этих состояний.
-
Изоляция от состояния системы: Изменения в C-состояниях не влияют на другие компоненты системы; они касаются только центрального процессора и, возможно, его ядер.
S-состояния
S-состояния, представленные в файле /sys/power/state
, являются глобальными состояниями ACPI (Advanced Configuration and Power Interface). Основные аспекты S-состояний:
-
Пользовательское управление: Переходы в S-состояния, такие как "hibernate" (гибернация) и "suspend" (состояние сна), чаще всего инициируются пользователями. Эти состояния управляют всей системой, а не только процессором.
-
Глубокие состояния: S-состояния могут быть как легкими (S1, S2), так и глубокими (S3, S4). Например, в состоянии S3 (suspend-to-RAM) система отключает большинство компонентов, но поддерживает минимальное энергопотребление, чтобы быстро вернуться в рабочий режим.
-
Кросс-компонентное управление: Изменение S-состояний затрагивает все подключенные компоненты системы, поэтому они могут быть использованы для реализации жестких, программируемых уровней энергопотребления.
Как предотвратить переход системы в состояние бездействия
Если ваша цель — предотвратить переход системы в режим бездействия, важно задействовать соответствующие параметры как для C-состояний, так и для S-состояний. Для C-состояний установив параметр disable
, вы можете предотвратить автоматические переходы процессора в спящий режим. Однако если система всё ещё переходит в режим сна, причиной может быть настройки S-состояний.
Рекомендации по настройке
-
Отключите S-состояния: Если хотите предотвратить переход системы в спящий режим, необходимо изменить соответствующие настройки в вашей операционной системе. Например, в системах на основе
systemd
, вы можете отключить автоматический переход в спящий режим через конфигурационные файлы. -
Мониторинг через
systrace
: Используйте инструменты мониторинга для анализа, какие процессы или параметры могут вызывать переход в режим сна. Это может быть полезно для выявления источников проблем. -
Настройки дистрибутива: Необходимо убедиться, что ваш дистрибутив Linux поддерживает управление энергопотреблением. Исследуйте свои настройки среды рабочего стола и технологию управления питанием, которая может конфликтовать с вашими предпочтениями.
Заключение
C-состояния и S-состояния представляют собой ключевые аспекты управления энергопотреблением в современных вычислительных системах. Понимание их различий, а также правильная настройка соответствующих параметров поможет вам добиться оптимальной работы системы и управления ее энергопотреблением.