Наверное, я уже всех затрахал своим
ноутом, но отсутствие свободного времени не даёт возможности решить сразу все проблемы с ноутом. На этой неделе я практически победил аккумулятор, я смог достичь 5 часов автономной работы.
Победа эта далась нелегко. Для начала я решил полазить по интернету в поисках всяких советов по оптимизации энергопотребления ноутбука. Нашёл довольно много всего, но воспользовался вот какими советами.
Первое, это энергосбережение жёсткого диска. Для этого настраиваем hdparm через hdparm.conf:
command_line {
hdparm -B 1 -S 12 /dev/sda
}
Дальше я вычитал, что можно уменьшить количество обращений к винчестеру если сказать ядру реже сбрасывать какие-то буферы, для этого мы прописали параметр в sysctl.conf:
vm.dirty_writeback_centisecs = 1500
vm.laptop_mode = 5
Первый параметр это как раз относится к винчестеру, второй же включает так называемый laptop mode. Что на самом деле делает ядро в этом режиме я не знаю, но на всякий случай включил :)
Дальше пошло веселее, я включил режим энергосбережения у USB портов и звуковой карты - смотрим /etc/modprobe.d/powersave.conf:
options usbcore autosuspend=1
options snd-hda-intel power_save=1
Попутно включил мигание светодиода WiFi при сетевой активности - /etc/modprobe.d/ath9k.conf:
options ath9k blink=1
Ещё где-то вычитал, что надо включить какой-то hpet, для этого ядру надо при загрузке прописать соответствующий ключик - в файле /etc/default/grub подправляем переменную GRUB_CMDLINE_LINUX_DEFAULT добавляя hpet=force. После чего надо дать команду update-grub.
Ещё нашёл как перевести SATA интерфейс в режим пониженного потребления, уж не знаю что он там делает и как, но хуже не будет - /etc/rc.local:
ethtool -s eth0 wol d
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy
echo min_power > /sys/class/scsi_host/host2/link_power_management_policy
echo min_power > /sys/class/scsi_host/host3/link_power_management_policy
echo min_power > /sys/class/scsi_host/host4/link_power_management_policy
echo min_power > /sys/class/scsi_host/host5/link_power_management_policy
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
Тут первая строка выключает Wake-On-Lan режим у сетевой карты, а последняя как-то переключает процессор, чтобы меньше жрал, остальное, это переключение всех SCSI интерфейсов, видимо среди них есть и SATA и USB и ещё Бог знает что. :)
В принципе, вот всё что написано выше дало мне лишних минут сорок жизни на батарейках, т.е. с этими параметрами ноут жил порядка трёх часов. Я этому немного огорчился, начал думать дальше. Меня беспокоило, что ноут довольно тёплый, понятное дело, что если ноут греется, то батареек на долго хватить не может. И случайно нашёл, дав команду lspci увидел, что несмотря на то, что переключатель на панели отвечающий за переключение режима ноута (производительность или энергосбережение) стоит в режиме экономии батареи, я всё равно вижу две видеокарточки. Это меня натолкнуло на мысль, что, скорее всего, вторая видюха и портит мне всю малину. Вот тут то и начались приключения. Для начала я решил всё-таки разобрать ноут и посмотреть, вдруг повезёт и плата на разъёме, тогда я её выну и мне будет счастье. Но когда я открыл ноут, то понял, что хрен два я выну эту видюху, там на разъёме сидел только модель WiFi всё остальное запаяно прямо в плату, даже 4 гигабайта памяти и те запаяны. А сама материнка на столько маленькая, что я даже удивился, она по площади занимает четверть ноута, т.е. материнка например в нетбуке ASUS Eee PC 701 раза в полтора-два больше чем в этом чуде. Делать нечего, собрал ноут. Начал смотреть как народ борется с переключением видеокарт в ноутах, благо сейчас таких ноутов довольно много. Нашёл, что начиная с какой-то там версии ядра, в ядре появилась функция vgaswitcheroo. Я давай пересобирать своё ядро, нашёл где эта штука включается, пересобрал ядро, загрузил. А там, когда эта функция работает, должен появиться каталог /sys/kernel/debug/vgaswitcheroo. Я смотрю, у меня такого нет, совсем немного погуглив, узнал, что надо примонтировать debugfs для этого я добавил в /etc/fstab строку:
none /sys/kernel/debug debugfs defaults 0 0
В каталоге /sys/kernel/debug что-то появилось, но каталога vgaswitcheroo не было, с этим я долго ковырялся, пересобирал раз десять ядро с разными парметрами, пока наконец не понял, что тупо не загружается firmware дискретной видеокарты. Уже не помню как это выглядело в логах, но суть в том, что нужно было установить пакет firmware-linux-nonfree, причём устанавливать его надо было не из стабильного репозитория, а из (блин, как же он там называется), ну в общем из того, где ещё не совсем отлаженные версии лежат, я установил версию пакета 0.35~bpo60+1. После чего у меня начала загружаться firmware и активировалась так нужная мне функция :)
Дальше, т.к. мне дискретная видюха не нужна, то в rc.local добавляем строки:
echo IGD > /sys/kernel/debug/vgaswitcheroo/switch
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Первая строка не особо нужна, я её добавил для надёжности, она заставляет компьютер немедленно переключиться на встроенную видеокарту, вторая же команда отключает неактивную видюху. Первая строка не особо нужна, т.к. сколько раз я загружался, у меня всегда активной была именно видео от Intel.
Чтобы эти вещи работали, народ пишет, что нужно добавить параметр modeset=1 для обоих видюх. Попутно я вычитал, что можно снизить энергопотребление моей встроенной видюхи ещё кое-какими параметрами - /etc/modprobe.d/video.conf:
options i915 modeset=1 reset=0 i915_enable_rc6=1 i915_enable_fbc=1 lvds_downclock=1
options radeon modeset=1
После всех этих изменений мой ноут стал жить 5 часов на батарейке, что меня в целом уже устраивает. Вчера я поменял себе винчестер на SSD накопитель. Когда я вынул винт и увидел, что он жрёт 1 Ампер, меня это немного удивило, т.к. у меня есть переносной винчестер WD, тоже на 500ГБ, так он потребляет всего 550мА. Как-то странно, что Sony поставила такой неэнергоэфективный жёсткий диск, может быть, конечно, он супер производительный, но SSD работает значительно быстрее :) У меня ноут теперь загружается секунд за 10, причём дольше всего у него грузится udev. Сегодня посмотрю на сколько дольше он стал жить на батарейках, ведь SSD значительно меньше потребляет и ноутом можно теперь хоть гвозди забивать, главное, чтобы экран не кокнулся :)
Ах да, чуть не забыл, т.к. памяти у меня дохрена и я ни разу не видел, чтобы мне понадобился своп, то своп я отключил, также я смонтировал каталог /tmp в память с помощью tmpfs, добавив в /etc/fstab строки:
none /dev/shm tmpfs defaults 0 0
tmpfs /tmp tmpfs size=64M,mode=0777 0 0
Ну и добавил ко всем реальным файловым системам опцию монтирования relatime, это всё снизит количество обращений к диску и количество записей, чтобы SSD жил подольше.