Я ищу механизм для динамического отключения ядер в Linux, чтобы минимизировать энергопотребление.
К сожалению, отключение ядер с помощью следующего простого подхода на самом деле увеличивает мощность, основываясь на показаниях ватт-ап?Pro измерения общей мощности системы:
echo 0 > /sys/devices/system/cpu/cpu7/online
Мой опыт, кажется, подтверждается другими (хотя эта ошибка была помечена как "ЗАКРЫТА PATCH_ALREADY_AVAILABLE"):https://bugzilla.kernel.org/show_bug.cgi?id=5471
Поскольку машина выгружена, я хочу, чтобы все, кроме одного, ядра (или, может быть, двух "ядер", поскольку ЦП является гиперпоточным) находились в максимально глубоком спящем состоянии. Похоже, что это не происходит само по себе, основываясь на выводе acpitool:
Processor ID : 7
Bus mastering control : no
Power management : yes
Throttling control : no
Limit interface : no
Active C-state : C0
C-states (incl. C0) : 3
Usage of state C1 : 899 (99.3 %)
Usage of state C2 : 6 (0.7 %)
Кстати, одна из путаниц для меня в том, что acpitool и /proc /acpi, похоже, не согласны с доступными C-состояниями, или, возможно, они используют разные схемы именования.
$ cat /proc/acpi/processor/CPU7/power
active state: C0
max_cstate: C8
maximum allowed latency: 2000000000 usec
states:
C1: type[C1] promotion[--] demotion[--] latency[001] usage[00000000] duration[00000000000000000000]
C2: type[C2] promotion[--] demotion[--] latency[017] usage[00001248] duration[00000000001877531423]
C3: type[C3] promotion[--] demotion[--] latency[017] usage[00000006] duration[00000000000012580727]
Кажется, это указывает на то, что существует 4 C-состояния (C0-C3), но acpitool сообщает только о 3 C-состояниях.
На самом деле это сводится к двум вопросам:
- Есть ли (безопасный) способ заставить отдельные ядра перейти в определенное состояние сна (C-состояние) и заставить их оставаться там до тех пор, пока я их явно не разбуду?
- В качестве альтернативы, как я могу улучшить способность ОС автоматически более последовательно переводить ядра в более глубокие спящие состояния?
Обратите внимание, что задержка пробуждения от более глубоких состояний сна не является проблемой. FWIW, я использую Ubuntu 10.04.3 (ядро 2.6.32-38) на Intel i7 920.