Я являюсь рядовым линукс-пользователем и поэтому не стоит от этой статьи ожидать очень умных ходов или нестандартных программистских решений. Все по мануалам. Но раз результат достигнут, значит кому-то кроме меня это может оказаться полезным.
О том, как заставит ноутбук работать под линуксами как можно дольше, написано немало, в том числе и на хабре. В какой-то степени я еще раз соберу все советы воедино, от очевидных до обскурных, заодно опишу несколько проблем и решений, которые у меня оказались достаточно «индивидуальными».
Устанавливал я Ubuntu 10.10 на ноутбук Acer Aspire Timeline 5810TG. Эта машина обладает экраном в почти 16 дюймов и относительно производительным железом, зато батарея достаточно емкая, чтобы ставить с ней личные рекорды.
Содержание поста
- Отключаем дискретную видеокарту
- Полезные команды для энергосбережения
- Проблемы ноутбука (связанные с энергосбережением) и их решения
- Автоматизация
- Дополнительные советы
Отключаем дискретную видеокарту
В моем ноутбуке имеется возможность переключаться между встроенным графическим чипом от Intel, маломощным и малотребовательным к электроэнергии, и сравнительно сильной и энергоемкой карте ATI Radeon HD4330. Многие обладатели ноутбуков с переключаемой графикой испытывают проблемы в работе с Linux-системами. Поиск по «ubuntu switchable graphics» на убунтуформус выдает больше 50 страниц тем.
Мне производительная графическая карта нужна редко, поэтому я задался целью отключить ее по умолчанию с возможностью быстрого и безболезненного включения.
Очень много читал те самые 50 страниц форумных тем. А надо было всего лишь заглянуть в убунту-вики или даже попробовать воспользоваться хабрапоиском.
В версиях ядра, начиная с 2.6.34, присутствует механизм vga_switcheroo, позволяющий переключаться между видеокартами. То есть в Ubuntu 10.10 он есть по умолчанию. О том, как им пользоваться, хорошо было написано здесь (см. второй способ) почти год назад, я по-быстрому напомню, что к чему.
Вначале выполним:
1
2
3
|
lspci
|
grep
VGA
00
:
02.0
VGA
compatible
controller
:
Intel
Corporation
Mobile
4
Series
Chipset
Integrated
Graphics
Controller
(
rev
07
)
01
:
00.0
VGA
compatible
controller
:
ATI
Technologies
Inc
M92
LP
[
Mobility
Radeon
HD
4300
Series
]
(
rev
ff
)
|
Зная, какой GPU как обозначается, посмотрим, какой из них в каком состоянии:
1
2
3
|
cat
/
sys
/
kernel
/
debug
/
vgaswitcheroo
/
switch
0
:
:
Pwr
:
0000
:
01
:
00.0
1
:
+
:
Pwr
:
0000
:
00
:
02.0
|
Плюсик стоит на против видеочипа, который используется в данный момент, Pwr означает, что видеокарта включена и потребляет энергию.
Важно: у всех моих немногих знакомых, обладающих ноутбуками с двумя видеокартами, картина одинаковая: что бы вы не делали, при загрузке системы обе карты работают, при этом для вывода используется встроенная «слабая» графика. Это нам на руку, ибо обесточивание неактивной видеокарт происходит бескровно.
Команда
1
|
echo
OFF
&
gt
;
/
sys
/
kernel
/
debug
/
vgaswitcheroo
/
switch
|
отключает неиспользуемую GPU сразу же. Поэтому мы обратимся к файлу /etc/rc.local, добавив в него вышеуказанную команду (перед строчкой exit 0). Так, при загрузке систему дискретная видеокарта уже будет отключена и мне не нужно будет беспокоиться ни о чем.
1
2
|
0
:
:
Off
:
0000
:
01
:
00.0
1
:
+
:
Pwr
:
0000
:
00
:
02.0
|
Важно: насколько я могу судить, vga_switcheroo не работает, если установлены проприетарные драйверы на дискретную видеокарту.
Кстати, если вы хотите переключаться между видеокартами через графический интерфейс, установите Ubuntu Control Center. Программа представляет собой панель управления параметрами Ubuntu, но нас она интересует исключительно из-за опции переключения между GPU (естественно, здесь это тоже происходит средствами vga_switcheroo).
Будьте аккуратны с UCC: во-первых, работает кривовато, например, мне необходимо было вначале переключиться на дискретную видеокарту, а лишь затем на встроенную, чтобы обесточить дискретную (либо вначале выполнить echo OFF > /sys/kernel/debug/vgaswitcheroo/switch, а затем переключаться на встроенную GPU). Но работает. Во-вторых, переключение происходит сразу, то есть без спросу выполняется завершение сеанса и приходится вновь залогиниваться.
Полезные советы по энергосбережению
Собирались эти советы с lesswatts, ubuntuforums, учитывались хинты от powertop, кое-что было найдено случайно.
1) Если у вас стоит убунту на ноутбуке, стопроцентно у вас установлен пакет laptop_mode, оптимизирующий работу компьютера в зависимости от источника питания. Значение 0, посылаемое в /proc/sys/vm/laptop_mode, отключает режим энергосбережения, 5 устанавливает самый агрессивный. Подробнее о том, как именно laptop_mode сберегает энергию, можно прочесть где угодно.
1
2
|
echo
0
&
gt
;
/
proc
/
sys
/
vm
/
laptop_mode
#выключает laptop_mode
echo
5
&
gt
;
/
proc
/
sys
/
vm
/
laptop_mode
#активирует laptop_mode
|
2) Режим энергосбережение для SATA-устройств.
1
2
3
4
5
6
|
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host0
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host1
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host2
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host3
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host4
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host5
/
link_power_management_policy
|
Не знаю, почему у меня в /sys/class/scsi_host/ целых шесть устройств. 🙂 Для включения максимального быстродействия выполнить команды с max_performance вместо min_power.
3) По умолчанию в Ubuntu есть четыре профиля работы процессора:
1
2
|
cat
/
sys
/
devices
/
system
/
cpu
/
cpu0
/
cpufreq
/
scaling_available_governors
conservative
ondemand
userspace
powersave
performance
|
conservative: медленно повышает частоту процессора в зависимости от нагрузки на систему и резко сбрасывает частоту к минимальной при простое.
ondemand: быстро повышает частоту процессора при возрастании нагрузки и медленно сбрасывает частоту к минимуму при простое.
powersave и performance, очевидно, соответствуют минимальной и максимальной частотам CPU.
1
2
3
|
#для производительности; выполнять сие для каждого ядра (у меня их два)
echo
ondemand
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu0
/
cpufreq
/
scaling_governor
echo
ondemand
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu1
/
cpufreq
/
scaling_governor
|
1
2
3
|
#для энергосбережения
echo
powersave
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu0
/
cpufreq
/
scaling_governor
echo
powersave
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu1
/
cpufreq
/
scaling_governor
|
Многие независимые пользователи крайне не советуют использовать режим performance, поэтому даже для работы от сети, когда экономить на ваттах нет смысла, я использую режим ondemand.
4) Параметр sched_mc_power_savings
из /sys/devices/system/cpu/ позволяет использовать энергосберегающий режим работы процессора в случае, если у того более одного ядра, благодаря особому распределению нагрузки между ядрами.
1
2
|
echo
1
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
sched_mc_power_savings
#включаем энергосбережение
echo
0
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
sched_mc_power_savings
#выкл
|
5) Встроенные аудио-чипы от Intel (которые принадлежат к т. н. High Definition Audio — HDA) также имеют возможность экономии ватт, если звуковой чип не используется
1
2
|
echo
0
&
gt
;
/
sys
/
module
/
snd_hda_intel
/
parameters
/
power_save
#выключаем энергосбережение
echo
10
&
gt
;
/
sys
/
module
/
snd_hda_intel
/
parameters
/
power_save
#вкл
|
6) Для того, что выиграть еще чуть-чуть времени работы батареи, можно запретить системе время от времени «опрашивать» cd/dvd-привод на предмет наличия там диска.
1
2
|
hal
-
disable
-
polling
--
device
/
dev
/
cdrom
#запрещаем
hal
-
disable
-
polling
--
enable
-
polling
--
device
/
dev
/
cdrom
#делаем как было
|
7) Можно выключить к черту веб-камеру вместе с драйвером. Не проверял отдельно, но сообщают, что дело очень хорошее при работе от батареи.
1
2
|
modprobe
-
r
uvcvideo
#выключаю
modprobe
uvcvideo
#включаю обратно
|
Естественно, пропустите этот шаг, если вам придется использовать скайп или еще для чего-то понадобится камера.
8 ) Dirty ratio — максимальный размер памяти (в процентах), для хранения грязных данных прежде чем процесс, их сгенерировавший, будет принужден записать их. Чем выше значение, очевидно, тем реже производится запись и тем меньше активность жесткого диска и системы.
1
2
|
echo
10
&
gt
;
/
proc
/
sys
/
vm
/
dirty_ratio
echo
90
&
gt
;
/
proc
/
sys
/
vm
/
dirty_ratioe
#при работе от батареи
|
9) Dirty background ratio — минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход.
1
2
|
echo
5
&
gt
;
/
proc
/
sys
/
vm
/
dirty_background_ratio
#в нормальном режиме
echo
1
&
gt
;
/
proc
/
sys
/
vm
/
dirty_background_ratio
#в режиме энергосбережения
|
10) Dirty Writeback sentisecs — как часто ядро должно проверять есть ли «грязные» (измененные) данные для записи на диск (в сантисекундах). Чем выше значение, очевидно, тем реже используется диск для записи грязных данных.
1
2
|
echo
6000
&
gt
;
/
proc
/
sys
/
vm
/
dirty_writeback_centisecs
echo
60000
&
gt
;
/
proc
/
sys
/
vm
/
dirty_writeback_centisecs
#для энергосбережения
|
11) Включение режима энергосбережения PCI Express, как говорят люди, позволяет экономить достаточно много энергии батареи.
1
2
|
echo
default
&
gt
;
/
sys
/
module
/
pcie_aspm
/
parameters
/
policy
echo
powersave
&
gt
;
/
sys
/
module
/
pcie_aspm
/
parameters
/
policy
|
Некоторые проблемы ноутбука (связанные с энергосбережением) и их решения
Проблема 1. Не работает изменение яркости экрана. Яркость всегда стоит на максимуме. Это критичный момент для энергосбережения, так как яркая подсветка дисплея съедает уйму электроэнергии. Эта проблема наблюдается на многих ноутбуках, на Acer`ах особенно часто.
Симптом: изменение яркости с помощью gnome-апплета не дает эффекта, сколько ползунок не таскай, переключение клавишами FN+Right, FN+Left, или аналогичными Fn-комбинациями вешает систему, помогает лишь хард-ресет.
Решение оказалось не самым практичным, но достаточно простым:
1
|
sudo
setpci
-
s
00
:
02.0
F4
.B
=
XX
|
Здесь ХХ принимает значения от 00 до FF в шестнадцатеричной системе. Для работы от батареи я выбрал значение 40, для работы от сети — FF.
Проблема 2. Bluetooth-радио включалось каждый раз при загрузки системы, несмотря на то, что bluetooth-модуль был выключен вручную и убран из автозагрузки. Еще одно решение, которое кому-то покажется очень некрасивым: добавить в /etc/rc.local следующую строку:
1
|
rfkill
block
bluetooth
|
Автоматизация
Конечно, каждый раз вбивать команды в терминал — дело унылое. Даже каждый раз запускать вручную bash-скрипт тоже быстро надоест. Однако переход в режим энергосбережения в рамках описанных методов можно автоматизировать очень легко: всего лишь добавляем код ниже в /etc/acpi/power.sh:
1
|
sudo
gedit
/
etc
/
acpi
/
power
.sh
|
Код будет иметь следующий вид:
1
2
3
4
5
|
if
on_ac_power
;
then
&
lt
;список команд&
gt
;
else
&
lt
;список команд&
gt
;
fi
|
Добавлять его можно прямо после строки #!/bin/sh.
Путем экспериментов я, в восторге, выяснил, что этот скрипт запускается каждый раз при старте системы. Кроме того, посмотрев содержимое файлов ac и battery в /etc/acpi/events/, я увидел, что скрипт по идее должен вызываться при подключении ноутбука к электросети и отключении от оной. Это логично, но почему-то не работало. Решение пришло быстро, надо было лишь дать необходимые права скрипту power.sh:
1
|
sudo
chmod
+
x
/
etc
/
acpi
/
power
.sh
|
Теперь все стало автоматизировано настолько, насколько это возможно.
Вот как выглядит мой скрипт для энергосбережения:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
if
on_ac_power
;
then
echo
0
&
gt
;
/
proc
/
sys
/
vm
/
laptop_mode
echo
10
&
gt
;
/
proc
/
sys
/
vm
/
dirty_ratio
echo
5
&
gt
;
/
proc
/
sys
/
vm
/
dirty_background_ratio
echo
6000
&
gt
;
/
proc
/
sys
/
vm
/
dirty_writeback_centisecs
echo
0
&
gt
;
/
sys
/
module
/
snd_hda_intel
/
parameters
/
power_save
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host0
/
link_power_management_policy
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host1
/
link_power_management_policy
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host2
/
link_power_management_policy
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host3
/
link_power_management_policy
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host4
/
link_power_management_policy
echo
max_performance
&
gt
;
/
sys
/
class
/
scsi_host
/
host5
/
link_power_management_policy
echo
ondemand
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu0
/
cpufreq
/
scaling_governor
modprobe
uvcvideo
echo
default
&
gt
;
/
sys
/
module
/
pcie_aspm
/
parameters
/
policy
setpci
-
s
00
:
02.0
F4
.B
=
FF
hal
-
disable
-
polling
--
enable
-
polling
--
device
/
dev
/
cdrom
echo
0
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
sched_mc_power_savings
else
echo
5
&
gt
;
/
proc
/
sys
/
vm
/
laptop_mode
echo
90
&
gt
;
/
proc
/
sys
/
vm
/
dirty_ratio
echo
1
&
gt
;
/
proc
/
sys
/
vm
/
dirty_background_ratio
echo
60000
&
gt
;
/
proc
/
sys
/
vm
/
dirty_writeback_centisecs
echo
10
&
gt
;
/
sys
/
module
/
snd_hda_intel
/
parameters
/
power_save
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host0
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host1
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host2
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host3
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host4
/
link_power_management_policy
echo
min_power
&
gt
;
/
sys
/
class
/
scsi_host
/
host5
/
link_power_management_policy
echo
ondemand
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu0
/
cpufreq
/
scaling_governor
echo
ondemand
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
cpu1
/
cpufreq
/
scaling_governor
modprobe
-
r
uvcvideo
echo
powersave
&
gt
;
/
sys
/
module
/
pcie_aspm
/
parameters
/
policy
setpci
-
s
00
:
02.0
F4
.B
=
40
hal
-
disable
-
polling
--
device
/
dev
/
cdrom
echo
1
&
gt
;
/
sys
/
devices
/
system
/
cpu
/
sched_mc_power_savings
fi
|
Итак, чего удалось достичь? Ниже несколько скриншотов.
Видео в полноэкранном режиме по неизвестной причине ест очень мало ресурсов. Оставив работать лишь qutIM (и Wi-Fi соединение, конечно), смотреть кино (обычный SD, Xvid) можно чуть ли не девять часов!
Результаты не подтасованые и не сиюминутные. Все взаправду. Перед снятием скриншотов я работал с ноутбуком в своем обычном режиме около 10 минут. Если оставить заряженный полностью ноут и ничего с ним не делать в течение пары минут, то можно увидеть цифры типа 13 часов. Но нам интересен лишь результат в повседневных условиях, не так ли?
Дополнительные советы
Как еще можно улучшить ситуацию? Да много как, наверное. Из того, что я знаю, но не применял:
1) Многие на форумах советуют команду
1
|
hdparm
-
B
1
-
S
12
/
dev
/
sda
|
Единичка здесь означает самый «агрессивный» режим сбережения энергии жесткого диска. Лично я не смог вытерпеть, что диск замедляется уже через пару секунд после ничего-не-деланья, а разогнаться вновь ему приходится потратить мгновение, что создает эффект лага. Часто паркуется головка хдд. Не очень приятно, к тому же смею предположить, что это еще и изнашивает винт быстрее обычного. 255 вместо 1 отключает энергосбережение жесткого диска вообще. Можете поэкспериментировать с этим у себя, я не против. 🙂 Кстати, ковыряние /lib/hdparm/hdparm-functions позволяет найти вот такой кусок кода:
1
2
3
4
5
|
if
hdparm_is_on_battery
;
then
hdparm_set_option
-
B128
else
hdparm_set_option
-
B254
fi
|
Он как бы намекает, что при переключении питания на батарею параметр выставляется 128. Я оставил так, как есть, но данные параметры можно безболезненно редактировать. Думаю, установкой единицы мог бы выиграть еще несколько десятков минут работы. Но комфорт работы важнее. Да, кстати, тут между прочим хочу заметить, что описанные до этого вещи никакого хоть слегка ощутимого дискомфорта в работу с ноутбуком не вносят.
2) Powertop, за неимением других подсказок, все время предлагает для уменьшения энергопотребления отключить USB-порты для устройств, не являющихся носителями информации. Можете использовать это для еще большей экономии энергии, но лично я без юсб-мыши пользоваться ноутбуком ну вообще не могу. Терпеть не могу тачпады.
3) Можно применить опцию noatime к файловой системе. Означает, что не будет вестись лог последнего времени доступа к файлу. Это уменьшит активность системы и жесткого диска. По умолчанию в Ubuntu 10.10, насколько я понял из мануалов, стоит режим relatime, который, если не ошибаюсь, обновляет время доступа лишь в случае внесения изменений в файл. Подробнее об этом, например, тут.
Заключение
Можно ли достичь того же потрясающего времени работы в Windows? Можно, если и не такого же, то близкого. В Win7 это делается установкой двух пакетов драйверов и двух-трех программ (которые даже без GUI, просто работают в фоне) от Acer, естественно, аналогов для линукса нет.
Так что в этом вопросе можно дополнительно порадоваться за убунту: все делается средствами системы (ядра), и при наличии, например, этого поста, все оуществляется за пару минут и пяток копипаст.
P.S. Прошу прощение за дилетантство, если таковое замечено. Мы совсем недавно встречаемся с Ubuntu.
Источник: habrahabr.ru.