Разница между C-состоянием и S-состоянием?

Вопрос или проблема

Я изучал файлы управления питанием в 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-состояний:

  1. Автоматическое управление: Переходы между C-состояниями происходят автоматически в зависимости от загруженности процессора. Если система не требует вычислительных ресурсов, процессор может перейти в более глубокие C-состояния, что снижает потребление энергии.

  2. Микропроцессорные состояния: C-состояния могут варьироваться от легкого сна (например, C0 — рабочий режим) до более глубоких состояний (C1, C2 и даже C10), где процессор использует меньше энергии, но требует больше времени для выхода из этих состояний.

  3. Изоляция от состояния системы: Изменения в C-состояниях не влияют на другие компоненты системы; они касаются только центрального процессора и, возможно, его ядер.

S-состояния

S-состояния, представленные в файле /sys/power/state, являются глобальными состояниями ACPI (Advanced Configuration and Power Interface). Основные аспекты S-состояний:

  1. Пользовательское управление: Переходы в S-состояния, такие как "hibernate" (гибернация) и "suspend" (состояние сна), чаще всего инициируются пользователями. Эти состояния управляют всей системой, а не только процессором.

  2. Глубокие состояния: S-состояния могут быть как легкими (S1, S2), так и глубокими (S3, S4). Например, в состоянии S3 (suspend-to-RAM) система отключает большинство компонентов, но поддерживает минимальное энергопотребление, чтобы быстро вернуться в рабочий режим.

  3. Кросс-компонентное управление: Изменение S-состояний затрагивает все подключенные компоненты системы, поэтому они могут быть использованы для реализации жестких, программируемых уровней энергопотребления.

Как предотвратить переход системы в состояние бездействия

Если ваша цель — предотвратить переход системы в режим бездействия, важно задействовать соответствующие параметры как для C-состояний, так и для S-состояний. Для C-состояний установив параметр disable, вы можете предотвратить автоматические переходы процессора в спящий режим. Однако если система всё ещё переходит в режим сна, причиной может быть настройки S-состояний.

Рекомендации по настройке

  1. Отключите S-состояния: Если хотите предотвратить переход системы в спящий режим, необходимо изменить соответствующие настройки в вашей операционной системе. Например, в системах на основе systemd, вы можете отключить автоматический переход в спящий режим через конфигурационные файлы.

  2. Мониторинг через systrace: Используйте инструменты мониторинга для анализа, какие процессы или параметры могут вызывать переход в режим сна. Это может быть полезно для выявления источников проблем.

  3. Настройки дистрибутива: Необходимо убедиться, что ваш дистрибутив Linux поддерживает управление энергопотреблением. Исследуйте свои настройки среды рабочего стола и технологию управления питанием, которая может конфликтовать с вашими предпочтениями.

Заключение

C-состояния и S-состояния представляют собой ключевые аспекты управления энергопотреблением в современных вычислительных системах. Понимание их различий, а также правильная настройка соответствующих параметров поможет вам добиться оптимальной работы системы и управления ее энергопотреблением.

Оцените материал
Добавить комментарий

Капча загружается...