Висит у меня статейка открытая, надо ее утилизировать, однако.
Скопитырено
отседова Начиная с семейства Sandy Bridge в процессорах Intel присутствует новая система управления производительностью P-State, которая создавалась для повышения энергоэффективности процессоров, без заметного ухудшения производительности. Поддержка P-State присутствует в Linux начиная с версии 3.9. Далее будет показано как перейти на использование P-State вместо обычного управления частотой процессора через ACPI в Ubuntu 14.04 LTS.
Всё описанное ниже автор этих строк настраивал на ноутбуке Dell Insprion 3542 с процессором Pentium 3558U, работающем под управлением Ubuntu 14.04 i386. Однако большая часть рекомендаций с минимальными изменениями (или вообще без таковых) справедлива и для других систем с процессорами Sandy Bridge и новее и ядром Linux 3.9 и новее.
В Ubuntu ядро Linux собрано с поддержкой P-State, но её надо активировать передачей ядру при загрузке параметра "intel_pstate=enable". Это можно сделать модифицировав переменную "GRUB_CMDLINE_LINUX" в файле /etc/default/grub:
GRUB_CMDLINE_LINUX="intel_pstate=enable"
После этого необходимо обновить конфигурацию загрузчика командой:
update-grub
Далее остаётся перезагрузить машину и продолжить ей пользоваться, однако для большей эффективности имеет смысл произвести более тонкую настройку. В первую очередь полезно указать что нам нужно больше: "powersave" или "performance" (по умолчанию "performance"). Сделать это удобнее всего используя пакет "cpufrequtils". Установим его:
apt-get install cpufrequtils
Далее в файле /etc/default/cpufrequtils укажем требуемую дисциплину:
GOVERNOR="powersave"
Чтобы без перезагрузки применить новую дисциплину достаточно выполнить команду:
invoke-rc.d cpufrequtils restart
Для ещё более тонкой настройки можно использовать файлы в виртуальной директории /sys/devices/system/cpu/intel_pstate:
- max_perf_pct: максимальная производительность в процентах от максимальной частоты (без учёта режима turbo). Значения больше 100 интерпретируются как 100.
- min_perf_pct: минимальная производительность в процентах от максимальной частоты (без учёта режима turbo). Значение меньше чем $min_freq*100/$max_freq интерпретируются как $min_freq*100/$max_freq. Для процессора 3558U с диапазоном частот от 800MHz до 1700MHz минимальное значение составляет 800*100/1700 = 47.
- no_turbo: если в этот файл записать единицу то будет отключен режим turbo, ноль соответственно включает. Для процессоров без режима turbo этот параметр просто игнорируется.
Разумно менять эти настройки с помощью laptop-mode-tools в зависимости от режима работы (от сети/от батареи). В laptop-mode-tools версии 1.65 и выше уже есть поддержка Intel P-State, однако в Ubuntu 14.04 пакет laptop-mode-tools имеет версию 1.64. Но это не является большим препятствием, так как необходимый модуль можно написать самостоятельно. Для этого создадим файл /etc/laptop-mode/modules/intel_pstate:
#! /bin/sh
#
# Модуль для управления Intel P-State из laptop-mode-tools 1.65, адаптированный для 1.64
# Директория внутри sysfs, используемая для настройки
INTEL_PSTATE_SYSFS=/sys/devices/system/cpu/intel_pstate
# Установка параметров sysfs
# Первый параметр: имя параметра
# Второй параметр: значение параметра
set_intel_pstate_param () {
if [ -f "$INTEL_PSTATE_SYSFS/$1" ]; then
log "VERBOSE" "Executing: echo $2 > $INTEL_PSTATE_SYSFS/$1"
if ! echo "$2" > "$INTEL_PSTATE_SYSFS/$1" ; then
echo "SETTING OF KERNEL PARAMETER FAILED: echo $2 \> $INTEL_PSTATE_SYSFS/$1"
fi
fi
}
# Если модуль включен
if [ x$CONTROL_INTEL_PSTATE = x1 ] || [ x$ENABLE_AUTO_MODULES = x1 -a x$CONTROL_INTEL_PSTATE = xauto ]; then
# Если работаем от сети
if [ $ON_AC -eq 1 ] ; then
# Если laptop mode активен
if [ "$ACTIVATE" -eq 1 ] ; then
INTEL_PSTATE_PERF_MIN_PCT="$LM_AC_INTEL_PSTATE_PERF_MIN_PCT"
INTEL_PSTATE_PERF_MAX_PCT="$LM_AC_INTEL_PSTATE_PERF_MAX_PCT"
INTEL_PSTATE_NO_TURBO="$LM_AC_INTEL_PSTATE_NO_TURBO"
# Если laptop mode не активен
else
INTEL_PSTATE_PERF_MIN_PCT="$NOLM_AC_INTEL_PSTATE_PERF_MIN_PCT"
INTEL_PSTATE_PERF_MAX_PCT="$NOLM_AC_INTEL_PSTATE_PERF_MAX_PCT"
INTEL_PSTATE_NO_TURBO="$NOLM_AC_INTEL_PSTATE_NO_TURBO"
fi
# Если работаем от батареи
else
INTEL_PSTATE_PERF_MIN_PCT="$BATT_INTEL_PSTATE_PERF_MIN_PCT"
INTEL_PSTATE_PERF_MAX_PCT="$BATT_INTEL_PSTATE_PERF_MAX_PCT"
INTEL_PSTATE_NO_TURBO="$BATT_INTEL_PSTATE_NO_TURBO"
fi
# Устанавливаем параметр
set_intel_pstate_param max_perf_pct "$INTEL_PSTATE_PERF_MAX_PCT"
set_intel_pstate_param min_perf_pct "$INTEL_PSTATE_PERF_MIN_PCT"
set_intel_pstate_param no_turbo "$INTEL_PSTATE_NO_TURBO"
fi
Делаем модуль исполняемым:
chmod +x /etc/laptop-mode/modules/intel_pstate
Опишем конфигурацию нашего нового модуля в файле /etc/laptop-mode/conf.d/intel_pstate.conf:
# Отладку отключаем
DEBUG=0
# Включаем модуль
CONTROL_INTEL_PSTATE="auto"
# При работы от сети и без laptop mode
NOLM_AC_INTEL_PSTATE_PERF_MIN_PCT=47
NOLM_AC_INTEL_PSTATE_PERF_MAX_PCT=100
NOLM_AC_INTEL_PSTATE_NO_TURBO=0
# При работы от сети и с laptop mode
LM_AC_INTEL_PSTATE_PERF_MIN_PCT=47
LM_AC_INTEL_PSTATE_PERF_MAX_PCT=100
LM_AC_INTEL_PSTATE_NO_TURBO=0
# При работе от батареи
BATT_INTEL_PSTATE_PERF_MIN_PCT=47
BATT_INTEL_PSTATE_PERF_MAX_PCT=55
BATT_INTEL_PSTATE_NO_TURBO=1
Отключаем модуль cpufreq, для этого в файле /etc/laptop-mode/conf.d/cpufreq.conf нужно поправить переменную "CONTROL_CPU_FREQUENCY":
CONTROL_CPU_FREQUENCY=0
На этом настройка Intel P-State закончена. У автора этих строк замена acpi-cpufreq на intel_pstate позволила продлить время автономной работы примерно на полчаса: с 4.5-5 часов до 5-5.5 часов.
На этом всё. Приятной работы!
Интересно, правда? Ну что ж, попробуем взвести это на gentoo.
Облом намбер раз.
hpbook mike # eix cpufrequtil
* sys-power/cpufrequtils
Available versions: [M]008-r1 [M]008-r4 {debug nls}
Homepage:
http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html Description: Userspace utilities for the Linux kernel cpufreq subsystem
Чё за ботва?
hpbook mike # grep -B3 sys-power/cpufrequtils /usr/portage/profiles/package.mask
# Pacho Ramos (01 Dec 2014)
# Upstream dead for a long time, use sys-power/cpupower
# instead. Removal in a month.
sys-power/cpufrequtils
Да и фиг с ним - ставим cpupower, как и предлагается:
hpbook mike # emerge -av sys-power/cpupower
вместо sys-power/cpufrequtils.
Поставили. Таперича надо воткнуть laptop-mode-tools
hpbook mike # eix laptop-mode-tools
* app-laptop/laptop-mode-tools
Available versions: 1.64 ~1.65 ~1.65-r1 ~1.66 {+acpi apm bluetooth scsi}
Homepage:
http://www.samwel.tk/laptop_mode/ Description: Linux kernel laptop_mode user-space utilities
Быдлокодить?! Да ну нафиг!
hpbook mike # echo "=app-laptop/laptop-mode-tools-1.66" >> /etc/portage/package.keywords/package.sys
hpbook mike # emerge -av app-laptop/laptop-mode-tools
Нафига вот только эти тулзы притащили iptables - тайна есть бысть. Ну да фиг с ним. Ладно, вот скажите, а нафига я все это делаю:
mshurutov@hpbook ~ $ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Model name: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Stepping: 5
CPU MHz: 2667.000
CPU max MHz: 2667,0000
CPU min MHz: 1199,0000
BogoMIPS: 5320.89
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
mshurutov@hpbook ~ $
?!?!
У меня ведь ни разу не сэнди бридж... Ладно, пусть будет. Когда этот бридж в руки попадет буду допиливать. А пока - ребут после очередного обновления мира.