Почему неоднократно возникают вопросы, почему под Убунтой мой процессор работает на пониженных частотах, или наоборот перегревается.
Постараюсь дать матчасть. Кому не надо - не оставляйте комментарии, просто закройте окно браузера.
Самый простой способ выставление режимов и частоты - апплет «Монитор изменения частоты процессора» (управляет демоном cpufreq).
Существует 5 режимов (политик) работы процессора: ondemand, performance, powersave, conservative, userspace.
При загрузке модуль ядра определяет доступные частоты процессора. Модули см. ниже.
По умолчанию при загрузке системы грузиться режим ondemand, задается при компиляции ядра.
ondemand (для десктопов) - пошаговое повышение работы частоты cpu, в зависимости от нагрузки (а заодно и напряжения на cpu и еще чего-то, чего-то влияет на производительность видяхи на ноутбуках, не нашел вменяемой инфы)).
Общий смысл принципа работы - каждые 20-200 мс замеряется нагрузка на cpu, общая или пользователем, и если нагрузка на текущей частоте более 95% - частота повышается, если менее 20% - частота понижается на 1 шаг. Например, если доступные частоты: 500-1000-2000 MHz то, при загрузке cpu на 95% на 1000 Mhz, частота переходит на 2000.
Частоту замера, % загрузки перехода и остальное для всех режимов выставляется при компиляции ядра.
http://www.mjmwired.net/kernel/Documentation/cpu-freq/governors.txtconservative - тоже, что ondemand, но нагрузка для переходя частоты процессора в большую или меньшую сторону меньше - обычно 20%. Например: доступно 500-1000-2000 MHz, работаем на 500 MHz, нагрузка возросла на 30%, переходим на 1000.
performance - макс доступная частота, макс производительность.
powersave - понятно, минимум производительности, максимум батареи или упс.
userspace - что задал, на такой частоте и работаем.
Выставить governor можно руками через командную строку или апплет «Монитор изменения частоты процессора».
sudo -c "echo
ondemand > /sys/devices/system/cpu/
cpu0/cpufreq/scaling_governor"
Вместо ondemand, можно взять любой. cpu0 - для первого ядра, тоже проделать для всех ядер, заменим 0 на номер ядра cpu (cpu0, cpu1, cpu2 ....).
Количество ядер смотрим: ls /sys/devices/system/cpu/
Апплетов надо добавлять на панель по количеству ядер!! Иначе, будет самое производительное значение для всех.
Если в ядре включен Hyper-threading (
http://ru.wikipedia.org/wiki/Hyper-Threading), то на каждое физическое ядро приходиться 2 виртуальных. Например, у ваc проц двухядерный, то виртуальных ядер - 4, если процессор поддерживает Hyper-threading и эта опция включена в биос.
Кроме того, для governor'ов с изменяющейся частотой, есть понятие max_freq и min_freq, т.е. можно выставить ondemand, только запретить ему подниматься выше или опускаться ниже определенной частоты из поддерживаемых процессором.
Файлы:
/sys/devices/system/cpu/
cpu0/cpufreq/scaling_min_freq
/sys/devices/system/cpu/
cpu0/cpufreq/scaling_max_freq
Например, если проц поддерживает 500, 1000 и 2000 MHz, то сказать, чтобы не опускался ниже 1000 можно:
sudo -c "echo 1000 > /sys/devices/system/cpu/
cpu0/cpufreq/scaling_min_freq"
Или не поднимался выше 1000 MHz:
sudo -c "echo 1000 > /sys/devices/system/cpu/
cpu0/cpufreq/scaling_max_freq"
Естественно, проделываем вышеуказанное для всех ядер cpu. Специально
cpu0 выделил.
Чтоб руками не вбивать для всех ядер, заранее готовим скрипт с нужной строкой, только повторяем ее столько раз, сколько ядер в системе.
Запуск скрипта: sh /где-там-лежит-скрипт/название-скрипта.sh
Права на выполнение, при таком запуске, можно не выставлять.
Доступные частоты: sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
Доступные режимы, если загружен соответствующий модуль ядра:
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Модули ядра отвечающие за режимы: cpufreq_powersave, cpufreq_userspace, cpufreq_conservative, cpufreq_ondemand, cpufreq_performance.
Узнать загружены ли модули: sudo modprobe -l |grep cpufreq
Загружаются: sudo modprobe имя_модуля.
В зависимости от производителя и марки процессора - есть соответствующие модули ядра (подключаемые или зашитые в ядро), которые дают возможность управлять режимом работы cpu.
Это:
acpi-cpufreq – средства ACPI (P-States Driver)
p4-clockmod – Pentium 4
speedstep-centrino – Pentium M
speedstep-ich – Pentium III-M, P4-M, ICH2/ICH3/ICH4
speedstep-smi – Pentium III-M, 440 BX/ZX/MX
powernow-k6 – AMD K6
powernow-k7 – AMD Athlon, Duron, Geode
powernow-k8 – AMD Athlon, Athlon 64, Athlon64X2, Turion 64, Opteron, Sempron.
cpufreq-nforce2 – изменение частоты средствами чипсета nVidia nForce2 (изменение FSB независимо от частоты PCI/AGP)
http://www.mjmwired.net/kernel/Documentation/cpu-freq/amd-powernow.txtУзнать загружен ли модуль: sudo modprobe -l |grep имя_модуля
Загружается соответствующий модуль: sudo modprobe имя_модуля
Зачем столько букаф?
Чтоб не было тем, типа, ААА Ubuntu сжигает мой процессор и можно было послать в ... матчасть.
Руками выставлять режим работы полезно, если:
1. Грузимся в режиме восстановления или singl mode, что-то поправить, а процессор перегревается, и ноутбук выключается от перегрева.
2. Для увеличения отзывчивости операционки на нагрузки, например при просмотре флеша.
3. На вкус и цвет фломастеры разные...
Выводы:
1. Для декстопа. Если хотим большей отзывчивости на нагрузку (изредка смотрим флеш, более быстрый запуск тяжелых прог) - выставляем governor - conservative, можем ограничить нижнюю частоту, выставив значение scaling_min_freq на второе после минимально поддерживаемого вашим процессором. Не забываем выставлять для всех ядер.
2. Для ноутбука от батареи. Тормозит hdmi или флеш, но хочется поберечь батарею - ограничиваем максимальную частоту scaling_max_freq так, чтоб не тормозило.
Например, при доступных частотах - 500-1000-2000 MHz, я ставлю scaling_max_freq на 1000 и governor - ondemand. Тогда гуляю по инету на 500 MHz, но если попадается 720p флеш - частота поднимается на 1000.
3. Мне нечего делать.
Дополнение: Директория /proc генерируется заново при каждой перезагрузке, так, чтоб при каждом запуске выставлялись соответствующие значения – нужно прописать соответствующие строки в автозагрузку, например в /etc/rc.local или руками выполнять скрипт, если вы его написали.
PS Материал моего написания, некоторое - имхо. Критика и ошибки принимаются.