Уменьшите частоту процессора

Есть ли способ сообщить ядру, что мне не нужна полная мощность процессора?

По сути, я хочу сделать некоторые вычисления, ожидая другого процесса. Но мне для этого не нужна полная мощность процессора. Поскольку загрузка ЦП во время вычислений по-прежнему составляет 100%, частота высока. Я хочу сказать ядру, что меня устраивает более низкая частота процессора в целях экономии энергии.

Вместо расчета с использованием полной частоты, а затем приостановки ожидания другого процесса, я хочу попробовать вычислить с более низкой частотой, чтобы ЦП не находился в более низком состоянии C, когда другой процесс завершился, и частота может снова уменьшиться.


person ttm02    schedule 19.09.2016    source источник


Ответы (4)


Это не имеет никакого смысла в многопроцессорной системе, особенно в Linux. Частота ЦП — очень простой параметр, который влияет на все, что работает на компьютере, включая другие процессы и саму ОС.

Если бы ваша программа возилась с частотой процессора, она бы диктовала не только себе приоритет, но и приоритет всего в компьютере, включая ОС. Это невозможно сделать в настольной системе просто потому, что нет никакого смысла в том, чтобы один процесс приложения диктовал вещи, в которые даже ОС не осмеливается вмешиваться.

Если экономия энергии является приоритетом, вам, вероятно, следует искать совершенно другие альтернативы, чем какое-либо настольное решение Linux. Компьютеры ПК заботятся только о 1) скорости, 2) скорости, а также 3) скорости.

То, о чем вы просите, распространено во встроенных системах реального времени, где процессоры имеют «спящий режим», из которого они могут проснуться, чтобы выполнить что-то, а затем вернуться в спящий режим. Обычно такие системы также могут возиться с внутренней PLL, чтобы настроить свою собственную частоту, но такие решения встречаются редко. Стандартный отраслевой способ работы — выполнять все вычисления на максимальной скорости, а затем возвращаться в энергосберегающий спящий режим.

person Lundin    schedule 19.09.2016
comment
спасибо, мне просто интересно, почему я не могу сказать ОС Эй, мне не нужна полная мощность, если вы хотите уменьшить масштаб: вперед! - person ttm02; 19.09.2016
comment
@ ttm02 хорошо, вы можете изменить приоритет планирования программы, что в требовательной системе может привести к меньшему количеству процессорного времени для указанной программы. linux.die.net/man/2/setpriority - person yeyo; 19.09.2016
comment
@lundin Редкие механизмы, о которых вы говорите в последнем абзаце, теперь называются Intel SpeedStep и AMD Power и встроены практически в любой современный процессор на базе x86. То, что вы говорите о настольных системах, не обязательно верно для ноутбуков, и даже энергоемкие настольные системы выигрывают от возможности понижать (и повышать) частоту процессора. - person tofro; 19.09.2016

В случае нескольких ядер - есть способ указать определенное ядро ​​​​процессора для прерывания. Таким образом, вы можете сохранить определенный ЦП для определенного процесса: чтобы найти номер прерывания задачи, используйте:

cat /proc/interrupts

ищите свой номер irq. скажем, номер irp равен 99, поэтому, чтобы настроить ядро ​​№ 2 для обработки этого irq, выполните:

echo 2 > /proc/irq/99/smp_affinity

таким образом вы можете сохранить определенное ядро ​​для обработки вашего специального процесса.

person stzahi    schedule 19.09.2016
comment
Спасибо, но это не то, что я ищу. Я ищу решение для уменьшения зарезервированного ЦП без его приостановки. - person ttm02; 19.09.2016

На самом деле вы можете использовать nice(), чтобы сообщить ядру, что ваш процесс может жить с более низким, чем обычно, приоритетом планирования. Это эффективно уменьшает количество отрезков времени, которые ваш процесс получает для использования ЦП (обычно в пользу других процессов, работающих в то же время).

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

Примечание. В зависимости от системы у вас могут возникнуть проблемы с восстановлением исходного значения nice (т. е. с повторным увеличением приоритета) без запуска с соответствующими разрешениями.

В случае, если ваше приложение привязано к вводу-выводу и не делает глупостей, тратя впустую циклы ЦП, например, занятое ожидание, нет необходимости возвращаться к уменьшению значения nice — современные ЦП и операционные системы должны уметь обнаруживать себя, когда система в основном простаивает и отключается автономно.

person tofro    schedule 19.09.2016
comment
Какой процессор, работающий под управлением Linux, будет это делать? Предполагая, что вы имеете в виду следующее: en.wikipedia.org/wiki/Dynamic_frequency_scaling - person Lundin; 19.09.2016
comment
@Lundin Я скорее имел в виду этот и подобные приемы в Centrino: en.wikipedia.org/wiki/Intel_Turbo_Boost или AMD PowerNow! и Intel SpeedStep - person tofro; 19.09.2016
comment
Чтобы подробно ответить на ваш вопрос: все современные процессоры Intel после Centrino поддерживают какой-то EIST и, таким образом, могут снижать частоту процессора на лету, а поддержка EIST встроена в ядра Linux с версии 2.6. - person tofro; 19.09.2016

соответствующим образом изменить scalling_goverance. Функция «scaling_Governor» позволяет установить статическую частоту ЦП.

Значение частоты должно быть между scaling_min_freq и scaling_max_freq.

Когда регулятор частоты ЦП установлен в режим энергосбережения, ЦП устанавливается на самую низкую статическую частоту (в пределах границ scaling_min_freq и scaling_max_freq).

Проверьте указанный ниже путь в целевом каталоге /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_Governors и выберите необходимое управление масштабированием, написав в echo "powersaving"/sys/devices/system/cpu/cpu*/cpufreq/scaling_Governor.

person charan    schedule 13.12.2019