2016-09-19 18 views
0

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

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

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

ответ

1

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

cat /proc/interrupts 

взгляд на ваш номер IRQ. позволяет говорить о том, что номер ИПР 99, поэтому для того, чтобы установить ядро ​​# 2, чтобы справиться с этим IRQ, сделайте следующее:

echo 2 > /proc/irq/99/smp_affinity 

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

+0

thx, но это не то, что я ищу. Я ищу решение для масштабирования зарезервированного процессора без его приостановки. – ttm02

3

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

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

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

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

+0

thx, мне просто интересно, почему я не могу сказать ОС «Эй, мне не нужна полная мощность, если вы хотите уменьшить масштаб: вперед!» – ttm02

+0

@ ttm02 ну, вы можете изменить приоритет планирования программы, который в сложной системе может привести к меньшему времени процессора для указанной программы. https://linux.die.net/man/2/setpriority – yeyo

+0

@lundin Механизмы, которые вы говорите, которые редко встречаются в вашем последнем абзаце, называются «Intel SpeedStep» и «AMD Power now» и встроены в практически любые современные x86 основанный на процессорах. Что вы говорите о настольных системах, не обязательно верно для ноутбуков, и даже энергопотребляющие настольные системы выигрывают от возможности понизить (и увеличить) частоту процессора – tofro

0

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

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

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

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

+0

Какой процессор, который запускает Linux, будет делать это? вы имеете в виду этот материал: https://en.wikipedia.org/wiki/Dynamic_frequency_scaling – Lundin

+0

@ Lundin Я скорее упомянул об этом и подобных трюках в Centrino: https://en.wikipedia.org/wiki/Intel_Turbo_Boost или AMD PowerNow! И Intel * SpeedStep * – tofro

+0

Чтобы ответить на ваш вопрос подробно: все современные процессоры Intel за Centrino поддерживают какой-то EIST и, таким образом, могут «понижать» частоту процессора «на лету», а поддержка EIST встроена в Linux ker от 2.6 – tofro