понедельник, 3 января 2011 г.

Энергосбережение в линуксе [1 часть]

Купил новый ноутбук, lenovo thinkpad edge 15, если кому интересно. Линукс туда сел практически идеально, даже не пришлось использовать какие-либо проприетарные дрова. Но сразу же возникла проблема с управлением электро-питания. Ноут работал максимум час, при этом жутко грелся (в убунте, правда, все было почти в порядке, но я все равно решил остаться на арче). Поэтому пришлось изучать механизмы энергосбережения в линуксе. В итоге ноут теперь работает от батареи 2-2,5 часа, а иногда и целых три часа (с закрытый крышкой моника и включенным кисметом))).

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

Есть замечательная утилита - powertop, которая покажет вам всю необходимую информацию о потреблении энергии. И так, больше всего энергии потребляет видеокарта и проц.
Видюха в моем ноуте - ati radeon hd 4500. Она поддерживает разные режимы энергопотребления. Поставить ее в режим экономии можно так:

echo profile > /sys/class/drm/card0/device/power_method #это чтобы использовать профили

echo "low" > /sys/class/drm/card0/device/power_profile #сам профиль "low"

Именно после этих команд, потребление энергии сокращается довольно ощутимо. Ноут даже перестает греться. Но остается еще процессор, который в моем ноуте core i5 M430:

for i in /sys/devices/system/cpu/*/cpufreq/scaling_governor; do echo "powersave" > $i; done #это для того, чтобы принудить каждое ядро использовать powersafe

Естественно, все эти операции надо проводить с правами рута. Эти же команды работают и на большинстве остальных видюх и процах.

Остальное уже мало влияет на потребление энергии, но все-таки на всякий случай приведу команды:

for i in /sys/class/scsi_host/host*/link_power_management_policy; do echo "min_power" > $i; done #включает режим минимального потребления питания для SATA

echo Y > /sys/module/snd_hda_intel/parameters/power_save_controller
echo 1 > /sys/module/snd_hda_intel/parameters/power_save #включает режим минимального энергопотребления для звучки