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

Настройка энергопотребления ThinkPad x220 в Ubuntu 12.04

Куратор темы на ixbt о ноутбуке ThinkPad x220 попросил написать меня статью об оптимизации потребления на ThinkPad x220, что я и сделал.
На мой взгляд статья получилась хорошей, но ixbt устроен так, что я не могу делать там обновления.
Поэтому я публикую ее в моем блоге. Здесь будут вноситься изменения, если таковые появятся.
А когда будет время поправлю структуру и ссылки в основной статье об экономии электричества в линуксе.

На все про все, если вы делаете это в первый раз, запаситесь примерно 2-мя часами.

Потребление замеряется в idle и с уровнем подсветки дисплея 20%. Когда систему "успокоилась" и переходные процессы завершены.

Каждый раздел оптимизации не зависит от другого и может быть применен отдельно.

  1. Установка и настройка pm-utils
    1. Установить необходимые программы: apmd, pm-utils и т.п. $ sudo apt-get install apmd pm-utils hdparm libnotify-bin
    2. Создадим скрип управления энергопотреблением: $ sudo gedit /usr/lib/pm-utils/power.d/99-savings.sh В появившемся окне редактора копипастим следующий текст
      ######################################################################################
      # A script to aggressively toggle power management between high 
      # performance and very low power consumption.
      # For more information on each of these options, see http://www.lesswatts.org
      # Last version script see http://axa-ru.blogspot.com/2012/01/thinkpad-x220-powersaving.html
      ################# Changes history ###################################################
      #VERSION=0.12   # 31.08.2010 Testing Ubuntu 10.04. Small changes for Wi-Fi control
      #VERSION=0.13   # 21.09.2010 Adding services control: 
                      #   evolution-alarm-notify, 
                      #   postfix, 
                      #   rsyslog
      #VERSION=0.2    # 23.07.2011 Modified for Ubintu 11.04 for Thinkpad x220 4290rw1
      #VERSION=0.23   # 27.07.2011 Added store value (Brightness, user, etc ) to /tmp/powersave.ini
                      #   Fix notify-send message
                      #   Added CPU core disabling. Disable cores not affected for power saving
      #VERSION=0.23.1 # 07.01.2012 Fix ethtool parameters in aLan procedure
                      #     
      #VERSION=0.23.2 # 07.01.2012 Fix aBrightness procedure
      VERSION=0.24    # 08.01.2012 Added start/stop conky monitor
      
      #
      # To install:
      #
      # sudo apt-get install apmd pm-utils expect hdparm libnotify-bin
      #
      # Save this file to /usr/lib/pm-utils/power.d/99-savings.sh
      # cd /usr/lib/pm-utils/power.d
      # sudo install 99-savings.sh /etc/pm/sleep.d
      # sudo install 99-savings.sh /etc/pm/power.d
      #
      
      INI_DIR=/tmp
      INI_FILE=powersave.ini
      INI=${INI_DIR}/${INI_FILE}
      
      aUsb()
      {
        #################################################
        ## USB Subsystem
        ##
        # 0.7-0.8 W
        case "$1" in
          false)  #ac_power
            for i in /sys/bus/usb/devices/*/power/control
            do
              echo "on" > $i
            done
            ;;
      
          true)  #batt_power
            for i in /sys/bus/usb/devices/*/power/control
            do
              echo "auto" > $i
            done
      
            for i in /sys/bus/usb/devices/*/power/autosuspend
            do
              echo 1 > $i
            done
      
            echo 1 > /sys/module/usbcore/parameters/autosuspend
            ;;
        esac
      }
      
      aSata()
      {
        case "$1" in
          false)  #ac_power
            # Set the SATA to max performance
            for i in /sys/class/scsi_host/host*/link_power_management_policy
            do
              echo max_performance > $i
            done
            ;;
      
          true)  #batt_power
            # Set SATA to minimum power
            # 0.7 W
            for i in /sys/class/scsi_host/host*/link_power_management_policy
            do
              echo min_power > $i
            done
            ;;
        esac
      }
      
      aPci()
      {
        case "$1" in
          false)  #ac_power
            for i in /sys/bus/pci/devices/*/power/control
            do
              echo on > $i
            done
            ;;
      
          true)  #batt_power
            for i in /sys/bus/pci/devices/*/power/control
            do
              echo auto > $i
            done
            ;;
        esac
      }
      
      aI2c()
      {
        case "$1" in
          false)  #ac_power
            for i in /sys/bus/i2c/devices/i2c-*/power/control
            do
              echo on > $i
            done
            ;;
      
          true)  #batt_power
            for i in /sys/bus/i2c/devices/i2c-*/power/control
            do
              echo auto > $i
            done
            ;;
        esac
      }
      
      aHdd()
      {
        case "$1" in
          false)  #ac_power
            # Set the drive to mostly stay awake.  Some may want to change -B 200
            # to -B 255 to avoid accumulating Load_Cycle_Counts
            # -S 240 => put in standby after 20 minutes idle
            # -B 200 => do not permit spindown
            # -M => not supported by my drive
            hdparm -B 200 -S 240 -M 254 /dev/sda
      
            # Remount ext3/4 filesystems so the journal commit only happens every 60
            # seconds.  By default this is 5 but, I prefer to reduce the disk
            # activity a bit.
            mount -o remount,commit=60,atime /
            ;;
      
          true)  #batt_power
            hdparm -B 1 -S 4 -M 128 /dev/sda
            mount -o remount,noatime,commit=600 /
      
            ;;
        esac
      }
      
      aSsd()
      {
      
      # add these commands in the /etc/rc.local
      #  echo deadline > /sys/block/sda/queue/scheduler
      #  echo 1 > /sys/block/sda/queue/iosched/fifo_batch
      #  sysctl -w vm.swappiness=1            # Strongly discourage swapping
      #  sysctl -w vm.vfs_cache_pressure=50   # Don't shrink the inode cache aggressively
        case "$1" in
          false)  #ac_power
            ;;
      
          true)  #batt_power
            ;;
        esac
      }
      
      aI915()
      {
        case "$1" in
          false)  #ac_power
            echo 0 > /sys/module/i915/parameters/powersave
            ;;
      
          true)  #batt_power
            echo 1 > /sys/module/i915/parameters/powersave
            ;;
        esac
      }
      
      aWlan()
      {
            # WiFi power savings.
        case "$1" in
          false)  #ac_power
            /sbin/iwconfig wlan0 power off txpower 14
            ;;
      
          true)  #batt_power
            /sbin/iwconfig wlan0 power on txpower 4
            ;;
        esac
      }
      
      aLan()
      {
        case "$1" in
          false)  #ac_power
            # set the ethernet max speed.
            ethtool -s eth0 speed 1000 duplex full autoneg on wol d
            ;;
          true)  #batt_power
            # set the ethernet power savings.
            # ~ 0.4 W
            ethtool -s eth0 speed 10 duplex half autoneg off wol d
            ;;
        esac
      }
      
      aCpu()
      {
        #################################################
        ## CPU
        ##
      
        case "$1" in
          false)  #ac_power
            for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
            do
              echo performance > $i
            done
      
            # Enable All Core CPU
            for i in /sys/devices/system/cpu/cpu*/online
            do
              echo 1 > $i
            done
      
            # Set max freq 2.7 GHz
      #      for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
      #      do
      #        echo 2701000 > $i
      #      done
      
            # Shedule Multitreading
            echo 0 > /sys/devices/system/cpu/sched_mc_power_savings
            ;;
      
          true)  #batt_power
            for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
            do
              echo powersave > $i
            done
      
            # Set max freq 1 GHz
      #      for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
      #      do
      #        echo 1000000 > $i
      #      done
      
      #      Disable cores not affected for power saving
      #      for i in /sys/devices/system/cpu/cpu*/online
      #      do
      #        echo 0 > $i
      #      done
      
            echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
            ;;
        esac
      }
      
      aSnd()
      {
        case "$1" in
          false)  #ac_power
            echo 0 > /sys/module/snd_hda_intel/parameters/power_save
            ;;
      
          true)  #batt_power
            # Turn off sound card power savings
            # < 0.1 W
            echo 10 > /sys/module/snd_hda_intel/parameters/power_save
            ;;
        esac
      }
      
      aBt()
      {
        case "$1" in
          false)  #ac_power
            # Enable the bluetooth driver
            rfkill unblock bluetooth
            ;;
      
          true)  #batt_power
            # Remove the bluetooth driver
            # 0.3-0.4 W
            rfkill block bluetooth
            ;;
        esac
      }
      
      aDaemons()
      {
        #################################################
        ## demons, services
        ##
      
        case "$1" in
          false)  #ac_power
            # 1. Evolution alarm and integrations
            /usr/lib/evolution/2.32/evolution-alarm-notify &
            #/usr/lib/evolution/e-calendar-factory &
            #/usr/lib/evolution/e-addressbook-factory &
      
            # 2. Starting Sendmail server 
            #postfix start 
      
            # 3. Starting CouchDB & desktopcouch
            dbus-send --session --dest=org.desktopcouch.CouchDB --print-reply --type=method_call / org.desktopcouch.CouchDB.getPort
      
            # 4. Starting conky
            if [ ${CONKY_RUN} -eq 1 ]; then
              su $vUSER -c "/usr/bin/conky --display=:0 &"
            fi
            ;;
      
          true)  #batt_power
            # 1. Evolution alarm
            killall evolution-alarm-notify
            #killall e-calendar-factory
            #killall e-addressbook-factory
      
            # 2. Stopping Sendmail server 
            #postfix stop
      
            # 3. Stoping CouchDB & desktopcouch
            killall beam.smp
            killall desktopcouch-service
      
            # Stoping conky ~1W
            killall conky
            ;;
        esac
      }
      
      # < 0.1 W
      aWebcam()
      {
        case "$1" in
          false)  #ac_power
            # Enable the webcam driver
            modprobe uvcvideo
            ;;
      
          true)  #batt_power
            # Remove the webcam driver
            modprobe -r uvcvideo
            ;;
        esac
      }
      
      aMemory()
      {
        case "$1" in
          false)  #ac_power
            # Set kernel dirty page value back to default
            echo 10 > /proc/sys/vm/dirty_ratio
            echo 5 > /proc/sys/vm/dirty_background_ratio
      
            # Only wakeup every 60 seconds to see if we need to write dirty pages
            # By default this is every 5 seconds but, I prefer 60 to reduce disk
            # activity.
            echo 6000 > /proc/sys/vm/dirty_writeback_centisecs
            ;;
      
          true)  #batt_power
            # Reduce disk activity by waiting up to 10 minutes before doing writes
            echo 90 > /proc/sys/vm/dirty_ratio
            echo 1 > /proc/sys/vm/dirty_background_ratio
            echo 60000 > /proc/sys/vm/dirty_writeback_centisecs
            ;;
        esac
      }
      
      aBrightness()
      {
        case "$1" in
          false)  #ac_power
            # Setup maximum brigthness
            # Thinkpad x220, Ubuntu 11.04
            vBAT_BRI=$(cat /sys/class/backlight/acpi_video0/brightness)
            echo $vAC_BRI > /sys/class/backlight/acpi_video0/brightness
            ;;
      
          true)  #batt_power
            # Setup brigthness 30%
            vAC_BRI=$(cat /sys/class/backlight/acpi_video0/brightness)
            echo $vBAT_BRI > /sys/class/backlight/acpi_video0/brightness
            ;;
        esac
      }
      
      aMisk()
      {
        case "$1" in
          false)  #ac_power
            # Turn off the laptop mode disk optimization
            echo 0 > /proc/sys/vm/laptop_mode
            echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource
      
            # enable logging
            service rsyslog start
      
            # ZiXEL nbg460n. Set maximum wifi speed
            if [ -f /etc/pm/802.11.bgn ]; then /etc/pm/802.11.bgn 1; fi
      
            # enable winbind
            if [ -f /etc/init.d/winbind ]; then  /etc/init.d/winbind start; fi
      
            # Powersave pci express
            echo performance > /sys/module/pcie_aspm/parameters/policy
            ;;
      
          true)  #batt_power
            # Set laptop disk write mode
            echo 5 > /proc/sys/vm/laptop_mode
            echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
            # disable logging
            service rsyslog stop
      
            # ZiXEL nbg460n. Set standard wifi speed
            if [ -f /etc/pm/802.11.bgn ]; then /etc/pm/802.11.bgn 0; fi
      
            # disable winbind
            if [ -f /etc/init.d/winbind ]; then  /etc/init.d/winbind stop ; fi
      
            echo powersave > /sys/module/pcie_aspm/parameters/policy
            ;;
        esac
      }
      
      aNotify()
      {
        case "$1" in
          false) #ac_power
            MSGH="AC" 
            MSGT="Maximum Performance Mode"
            MSGI="ac-adapter"
            ;;
          true)  #battery_power 
            MSGH="BATT" 
            MSGT="Battery Power Saving"
            MSGI="battery"
          ;;
        esac
      
        vUSER=`ps -C gnome-session -o user=` #find UID user who start gnome-session
        vPIDS=`pgrep -u $vUSER gnome-session` #find PID
        for PID in $vPIDS; do
          vDBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ \
          | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//')
          DBUS_SESSION_BUS_ADDRESS=$vDBUS_SESSION_BUS_ADDRESS DISPLAY=:0.0 sudo -u $vUSER notify-send "$MSGH" "$MSGT" -i "$MSGI"
        done
      }
      
      aLoadini()
      {
        if [ -e $INI ]; 
          then 
            echo "Restore Value"
            while read LINE
            do
              PARM=$(echo "$LINE" | awk '{print $1}')
              KEY=$(echo "$LINE" | awk '{print $2}')
              case $PARM in
                "AC_BRI")
                  vAC_BRI=$KEY
                  ;;
                "BAT_BRI")
                  vBAT_BRI=$KEY
                  ;;
                "USER")
                  vUSER=$KEY
                  ;;
                "PIDS")
                  vPIDS=$KEY
                  ;;
                "CONKY")
                  CONKY_RUN=$KEY
                  ;;
                "DBUS_SESSION_BUS_ADDRESS")
                  vDBUS_SESSION_BUS_ADDRESS=$KEY
                  ;;
              esac
              echo "$PARM $KEY"
            done < $INI
          else
            echo "Reset Value"
            # Conky is Running Check
            CONKY_RUN=$(ps -ef | grep -c /usr/bin/conky)
            ((CONKY_RUN-=1))
      
            vAC_BRI=15
            vBAT_BRI=8
            vUSER=""
            vPIDS=""
            vDBUS_SESSION_BUS_ADDRESS=""
        fi
      }
      
      aSaveini()
      {
        echo "AC_BRI $vAC_BRI" > $INI
        echo "BAT_BRI $vBAT_BRI" >> $INI
        echo "USER $vUSER" >> $INI
        echo "PIDS $vPIDS" >> $INI
        echo "CONKY $CONKY_RUN" >> $INI
        echo "DBUS_SESSION_BUS_ADDRESS $vDBUS_SESSION_BUS_ADDRESS" >> $INI
      }
      
      
      ##########################################################
      ## Apply settings
      ##
      aLoadini
      
      aCpu $1
      aUsb $1
      aI2c $1
      aSata $1
      aPci $1
      if [ $(hdparm -i /dev/sda | grep Model | awk '{print substr($2,1,3)}') = "SSD" ]; 
        then 
          aSsd $1
        else
          aHdd $1
      fi
      aI915 $1
      aWlan $1
      aLan $1
      aSnd $1
      aBt $1
      aWebcam $1
      aMemory $1
      aDaemons $1
      aBrightness $1
      aMisk $1
      aNotify $1
      
      aSaveini
      

      Сохраняем скрипт и закрываем редактор
    3. Подключаем скрипт к событиям power и sleep $ cd /usr/lib/pm-utils/power.d $ sudo chmod 755 99-savings.sh $ sudo install 99-savings.sh /etc/pm/sleep.d $ sudo install 99-savings.sh /etc/pm/power.d
    4. Проверяем
      Вытаскиваем провод источника питания и наблюдаем pop up сообщение, что компьютер перешел в режим сохранения энергии Вставяем провод источника питания и наблюдаем pop up сообщение, что компьютер перешел в режим максимального быстродействия

  2. Устанавливаем ядро 3.63.3.7
  3. У меня иногда с ядром 3.6 процессор переходит в Turbo mode и начинает сильно нагреваться. Powertop показывает частоту 3 GHz. htop не показывает никакого криминала. А процессоры находятся в состоянии powersave. Разбираюсь. Возможно это баг.
    Если у вас будет то же самое отпишите, плз.

    Можно не мудрствуя лукаво поставить из http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.7-precise/ if [ ! -d "$HOME/kernel" ]; then mkdir $HOME/kernel; fi cd "$HOME/kernel" rm *.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.7-precise/linux-headers-3.3.7-030307-generic_3.3.7-030307.201205211535_amd64.deb \ http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.7-precise/linux-headers-3.3.7-030307_3.3.7-030307.201205211535_all.deb \ http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.7-precise/linux-image-3.3.7-030307-generic_3.3.7-030307.201205211535_amd64.deb sudo dpkg -i *.deb

  4. Устанавливаем параметры загрузки Ubuntu в Grub
  5. В терминале с помощью редактора gedit $ sudo gedit /etc/default/grub Заменяем строку
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    
    на
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.i915_enable_rc6=1 i915.lvds_downclock=1 i915_enable_fbc=1 drm.vblankoffdelay=1 pcie_aspm=force reboot=pci"
    
    Обновляем grub $ sudo update-grub Перезагружаемся и проверяем энергопотребление.

  6. Success Story

  7. Евгений Попов прислал скриншот, на котором видно, что он смог снизить минимальное потребление до 4,77 Вт (Lenovo ThinkPad x220 4290RW1, Ubuntu 11.10).

    Участник с ником unr форума Ubuntu получил потребление около 5,5 Вт на ядре 3.2.5 (Lenovo ThinkPad x220 4290RW1, Ubuntu 11.10).


  8. Indicator

  9. Я самоуверенно дал программе название, которое уже присвоено другой утилите. К выходным переобзову и сделаю новый deb пакет.

    Не прошло и года, как я сделал простой индикатор, позволяющий выбирать (пока) один из двух режимов PowerSaving.

    Остальные пункты меню представляют собой заглушки. Надеюсь скоро их активизирую.
    Скачать индикатор можно по ссылке: powerman_0.1_amd64.deb
    Устанавливается, как обычный deb пакет. sudo dpkg --install powerman_0.1_amd64.deb После чего можно добавить запуск индикатора в Startup Applications:
    /usr/bin/powerman -t 10
    
    где -t 10 задает время задержки старта.

    И последним штрихом добавляем в sudoers команды, разрешающие запуск скрипта управления питанием без ввода пароля. sudo visudo
    # User alias specification
    # Change %axa to your Users Grup. Замените %axa на название группы, куда входит пользователь
    User_Alias USERS = %axa
    
    # Cmnd alias specification
    Cmnd_Alias PWR_SAVE =  /etc/pm/power.d/99-savings.sh
    
    # All User can run Power Saving script
    USERS ALL=NOPASSWD: PWR_SAVE
    

  10. Планы на развитие
  11. В планах убрать установку всех скриптов и модификацию управляющих файлов внутрь deb пакета.

Полезные ссылки:



03.10.2012 - добавил раздел установки индикатора
06.10.2012 - временно убрал раздел компиляции ядра и добавил раздел установки ядра 3.6 из ubuntu.kernel

74 комментария:

  1. Проедлал это на нетбуке eee pc 1000HG, но прироста так и не заметил :(. Не выводит сообщение после установки первых скриптов (при вкл и выкл зарядном устройстве). Если не сложно, помогите мне побороть высокое энергопотребление убунту 11.10. Жрёт примерно 11-12W.

    ОтветитьУдалить
  2. По какой то причине у вас не работает скрипт.
    Покажите
    ls /etc/pm/power.d

    ОтветитьУдалить
  3. 99-savings.sh scsi_host-link_power_management usb-autosuspend~
    cpu-governor scsi_host-link_power_management~
    pci-power-control usb-autosuspend
    Вот собственно содержимое.

    ОтветитьУдалить
  4. -rwxr-xr-x 1 root root 17913 2012-01-17 20:17 /etc/pm/power.d/99-savings.sh

    ОтветитьУдалить
  5. cat: /tmp/powersave.ini: No such file or directory

    ОтветитьУдалить
  6. Команды
    sudo /etc/pm/power.d/99-savings.sh false
    и
    sudo /etc/pm/power.d/99-savings.sh true
    какой нибудь эффект дают?

    ОтветитьУдалить
  7. Выполнял эти команды, но в обоих случаях потребляет 11-12 W.

    ОтветитьУдалить
  8. Какой выхлоп после первой, например

    ОтветитьУдалить
  9. Ничего не просиходит. Просто принимает команду и ничего не выводит.

    ОтветитьУдалить
  10. Ok.
    У вас размер файла 99-savings.sh 17913. У меня - 12587
    Делаем так:
    gedit /etc/pm/power.d/99-savings.sh
    Копируем все в буффер (Ctrl-A, Ctrl-Insert)
    Открываем сайт http://pastebin.ru
    Публикуете там содержимое буффера ( на самом деле это содержимое 99-savings.sh)
    Ссылку сюда.

    ОтветитьУдалить
  11. В моем файле много лишнего... Исправил.Сейчас отпишусь как себя ведет теперь нетбук

    ОтветитьУдалить
  12. чтобы поправить то нужно дать команду
    sudo gedit /etc/pm/power.d/99-savings.sh
    Иначе вы не сможете его сохранить

    ОтветитьУдалить
  13. sudo /etc/pm/power.d/99-savings.sh true дало 9.3 W. Но в ХР мастдае всеравно нетбук больше живет...Есть еще советі?

    ОтветитьУдалить
  14. Фигня. Должно быть на eeePC 4-5 W
    Запускаете powertop и смотрите, что там потребляет.

    Вот мой пример (на потребление не смотрите. это от сети)
    PowerTOP 1.97 Overview Idle stats Frequency stats Device stats Tunables

    Summary: 471.4 wakeups/second, 0.0 GPU ops/second and 0.0 VFS ops/sec

    Power est. Usage Events/s Category Description
    8.91 W 3461 rpm Device Laptop fan
    1.98 W 100.0% Device Radio device: thinkpad_acpi
    1.35 W 100.0% Device USB device: Biometric Coprocessor (UPEK)
    1.29 W 100.0% Device Radio device: iwlagn
    143 mW 13.2 ms/s 85.8 Process /usr/lib/nspluginwrapper/i386/linux/npviewer.bin --plugin /usr/
    87.8 mW 8.2 ms/s 47.5 Process /usr/lib/firefox-9.0.1/firefox
    84.7 mW 15.8 pkts/s Device Network interface: wlan0 (iwlagn)
    70.3 mW 6.3 ms/s 57.4 Process /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7
    60.4 mW 5.7 ms/s 28.9 Process compiz
    54.8 mW 5.4 ms/s 0.0 Interrupt [42] xhci_hcd
    43.2 mW 3.4 ms/s 80.6 Process /usr/lib/firefox-9.0.1/plugin-container /var/lib/flashplugin-in
    27.4 mW 2.2 ms/s 48.9 Timer hrtimer_wakeup
    16.6 mW 1.6 ms/s 7.2 Process nautilus -n
    16.6 mW 1.4 ms/s 18.1 Interrupt [50] i915
    12.1 mW 1.0 ms/s 18.3 Interrupt [6] tasklet(softirq)
    9.90 mW 0.8 ms/s 15.9 Timer tick_sched_timer
    9.26 mW 0.9 ms/s 0.0 Interrupt [49] iwlagn
    7.05 mW 563.0 µs/s 12.6 Process /usr/bin/conky --display=:0
    6.50 mW 617.4 µs/s 2.3 Process gnome-terminal
    6.50 mW 636.0 µs/s 0.6 Process sh
    5.19 mW 507.5 µs/s 0.5 Process powertop
    4.78 mW 444.2 µs/s 2.6 Process /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon
    3.95 mW 198.7 µs/s 18.0 kWork console_callback
    2.61 mW 232.1 µs/s 2.4 Process /usr/bin/unity-window-decorator

    ОтветитьУдалить
  15. Можно с вами пообщаться по джаберу? 1 раз устанавливаю убунту на портативное устройство...

    ОтветитьУдалить
  16. Будете смеяться, но я не умею. Расскажите как.

    ОтветитьУдалить
  17. Если у вас есть аккаунт в Google, Livejournal, yandex то считайте, что у Вас уже есть джабер аккаунт. Далее берете любой IM клиент с поддержкой протокола джаббер, и подключаетесь с помощью вашего аккаунта. Кидаете мне адрес свой (или я Вам), и мы обмениваемся мгновенными сообщениями :).

    ОтветитьУдалить
  18. Какой джаббер клиент лучше использовать?

    ОтветитьУдалить
  19. Лично я использую empathy или pidgin (в unity, xfce), либо kopette (когда в KDE работаю).

    ОтветитьУдалить
  20. Ок. Давайте так. Я сегодня поставлю, а завтра пообщаемся.

    ОтветитьУдалить
  21. ARTDooM, сегодня не успел, давай завтра попробуем.

    ОтветитьУдалить
  22. Дома на выходных не был :( Вот только сегодня появился дома :(

    ОтветитьУдалить
  23. Что-то не могу Вас онлайн выловить :(

    ОтветитьУдалить
  24. Ага, увидел ваше сообщение.
    "успешно Вас добавил"

    Все. Клиента оставлю висящим.

    ОтветитьУдалить
  25. ARTDooM
    После правки строки параметров загрузки обновить grub.
    Сделайте
    $ sudo update-grub

    В статье поправил.

    ОтветитьУдалить
  26. Просьба не пинать, все сделал по мануалу. Работает, но все с точностью до наоборот, при питании от сети потребление 5вт, от батареи 13вт, если верить стандартной статистике. Где мог напортачить?

    ОтветитьУдалить
  27. Ось ubuntu 11.10, компьютер thinkpad t420i. Есть подозрение что врала статистика, хотя при заряде батареи энергопотребление возрастало до 25-30Вт и падало по мере зарядки до 5Вт. В дальнейшем выявилась еще одна проблема, при выключении через aspi и питании от батареи компьютер самостоятельно включался, а при питании от сети выключение проходило нормально.
    Проблемы решены сносом скрипта и переходом на ядро 3.2.7, сейчас энергопотребление порядка 11Вт, без скрипта с 2я включенными WiFi картами, внутренней и usb, подключенной мышкой и внешним винтом. Многовато конечно, будем бороться за экономию дальше=)

    ОтветитьУдалить
  28. После обновления биоса скрипт заработал нормально, компьютер не включается самостоятельно, спасибо за качественный мануал. Энергопотребление удалось снизить до 7вт.

    ОтветитьУдалить
    Ответы
    1. Спасибо, что отписались. Возможно Ваш опыт кому то поможет.
      Удачи.

      Удалить
  29. Здравствуйте.
    Пока еще не использовал ваш скрипт, но почему у меня в powertop (1.97, 1.98) нет колонки Power est.? Гуглить пробовал, вообще ничего на эту тему.

    ОтветитьУдалить
    Ответы
    1. Я досконально почему это происходит не исследовал.
      По моему нужно добавить в grub параметры загрузки из П.3

      Я сейчас проверить не могу.
      Отпишитесь, если будет оказия.

      Удалить
    2. Я добавил параметры в grub, но изменений нет. Причем нет ни в одной системе (xubuntu 11.10, xubuntu 12.04 beta 1, arch linux). Может от характеристик ноутбука зависит? Еще есть идея, что в ядре что-то, но я скомпилить ядро не могу, так как проц в процессе перегревается и ноут выключается.

      Удалить
  30. что-то не работает у меня...скрипт вроде пашет, уведомления выводятся...сделал все пункты по инструкции. Как было 15.5W так и осталось, ноутбук Lenovo G550. На борту стоит ubuntu 12.04

    ОтветитьУдалить
    Ответы
    1. Я с 12.04 еще не пробовал.
      Какое ядро установили?
      uname -a

      Удалить
    2. Linux homealone-Lenovo-G550 3.2.7-pf #1 SMP Fri Apr 6 17:33:14 FET 2012 x86_64 x86_64 x86_64 GNU/Linux

      Удалить
    3. Понятно. Я это ядро еще не смотрел.
      В последнее время новые ядра усиленно пилятся и, возможно в нем поменялись интерфейсы взаимодействия с оборудованием.
      Я планирую переход на 12.04 после ее выхода и тогда буду делать изменения, если потребуется.

      Если вы имеете желание сами поразбираться, то советую сделать следующее
      - зайти в консоль от root.
      - для вызова скрипта в режиме "от батареи" выполнить следующую команду
      /usr/lib/pm-utils/power.d/99-savings.sh true

      Если есть ошибки, то они будут показаны в консоли.

      - аналогично,
      /usr/lib/pm-utils/power.d/99-savings.sh false

      переводит в режим максимальной производительности.

      Удалить
    4. есть ошибки(

      Restore Value
      AC_BRI
      BAT_BRI
      USER homealone
      PIDS 1732
      DBUS_SESSION_BUS_ADDRESS unix:abstract=/tmp/dbus-Cn99iZFSqF,guid=b4f2b97fd0bdd1ff0261194400000027

      /dev/sda:
      setting Advanced Power Management level to 0x01 (1)
      setting acoustic management to 128
      HDIO_DRIVE_CMD:ACOUSTIC failed: Input/output error
      setting standby to 4 (20 seconds)
      APM_level = 1
      acoustic = not supported
      evolution-alarm-notify: процесс не найден
      beam.smp: процесс не найден
      desktopcouch-service: процесс не найден
      cat: /sys/devices/virtual/backlight/acpi_video0/brightness: Нет такого файла или каталога
      /usr/lib/pm-utils/power.d/99-savings.sh: 365: /usr/lib/pm-utils/power.d/99-savings.sh: cannot create /sys/devices/virtual/backlight/acpi_video0/brightness: Directory nonexistent
      rsyslog stop/waiting

      Удалить
    5. очень странно, что на ноутбуке HP с той же ubuntu 12.04 работает замечательно...вот теперь я вообще не понимаю почему не работает на моём lenovo

      Удалить
    6. Видимо для Lenovo изменились алгоритмя работы с оборудованием, а для HP нет.

      Удалить
    7. Тогда вопросик, что можно почитать, чтобы самому разобраться и изменить скрипт?)

      Удалить
    8. Сорри, был очень занят и не мог ответить
      Вот тут а разбирал по подсистемам, как что влияет на потребление
      http://axa-ru.blogspot.com/2009/07/thinpad-x200s.html

      В конце есть ссылки, которыми я пользовался.

      Удалить
    9. спасибо большое)

      Удалить
  31. Этот комментарий был удален автором.

    ОтветитьУдалить
  32. мужик! да ты крут! без всякого сарказма.
    а что за ядро такое пропатченое? не хотелось бы фиг знает чего ставить в работающую систему.

    ОтветитьУдалить
    Ответы
    1. Спасибо, дружище 8).
      Пропатченное ядро это набор патчей, который собирает вместе некий товарищ Наталенко.
      Сейчас туда включены патчи:

      [m] mainline update;
      [m] -ck patchset (latest BFS included);
      [m] BFQ;
      [m] TuxOnIce;
      [m] LinuxIMQ;
      [m] l7-filter.

      http://pf.natalenko.name/

      Выше, чем 3.1.6 я ядра не собирал.
      Буду пробовать после апгрейда на 12.04

      Удалить
  33. Что там с убунту 12.04?
    На ядре 2.3 с патчем нет изменений в энергопортеблении. 13 вт как показывает, так и показывает.
    Вот только интернет отваливается при при работе от батареи.

    Машинка - Asus n82, вторая видюха отключена, работает на встроенной.

    ОтветитьУдалить
    Ответы
    1. Дмитрий, чесслово сейчас не могу много времени посвящать линуксу.
      Сейчас на 3 года завис в большом проекте.
      Хотел сегодня посмотреть что да как, но нет.
      Никак не могу.

      Может, если будет завтра время, я сделаю скрипт, который будет проверять правильность применения параметров регулирования производительности.

      Удалить
  34. А этот скрипт подойдет для Lenovo G570?

    ОтветитьУдалить
  35. Извините.Ноутбук Lenovo B570....ошибся.на борту процессор Intel celeron и видео NV G410M

    ОтветитьУдалить
    Ответы
    1. Думаю должен.
      Нужно будет с видяхой посмотреть что и как.
      Вы хоть немного в bash разбираетесь?

      Удалить
  36. Извините,я отсутствовал.Я знаю только что он (bash) должен присутствовать в начале скрипта и кажется позволяет запускаться скрипту как программе....если не ошибаюсь....я еще новичок в линуксе.пару дней только вот

    ОтветитьУдалить
  37. тупость сказал.Извиняюсь....кажется...разбираюсь я или нет уже стало очевидно :-D

    ОтветитьУдалить
    Ответы
    1. Все нормально.
      Не боги горшки обжигают.

      Вопрос: почему вы решили, что вам нужно что то делать с энергопотреблением?

      Удалить
  38. Просто читал,что в линуксе с этим туго....а постоянно работать от сети я не собирался....аот и....решил..береженого бог бережет

    ОтветитьУдалить
  39. после установки скрипта показывает 19 ватт

    ОтветитьУдалить
    Ответы
    1. Друзья, у меня сейчас очень мало времени.
      Я обещал сделать из скрипта диагностическую утилиту, которая покажет на ошибки.

      Пока не знаю когда сделаю. Вечером валюсь с ног.
      Постараюсь в течение будущей недели найти пару часов и сделать обещанное.

      Удалить
  40. добавьте, как возможный вариант сборки ядра, make localmodconfig - это удобнее для энд-юзера с одним ноутом. ;-)

    собрал по инструкции ядро 3.5 на 12.04, тестю.

    ОтветитьУдалить
    Ответы
    1. Ок. Как будет время добавлю.
      Просьба, отпишите, плиз, результаты теста ядра 3.5. Крайне любопытно.
      Я ставил из репозитория убунты. На моем x220 очень нестабильны.

      Удалить
    2. у меня eeePC 1000H, 3.5.1-pf c моими сокращениями всего ненужного железа и под TLP с дефолтным ondemand'ом на обоих питаниях ведёт себя заметно шустрее-отзывчивее дефолтного кёрнела 3.4.rc6 - результат заметен на глаз, потребление при отключённых вайфае и блютуфе - 5.8w.

      не поможете ли с нерешаемыми проблемами:
      1) хочу полностью останавливать вентилятор в батарейном ( а лучше - в обоих) режиме питания, когда нагрузка минимальна (лишь листаются закешированные страницы в читалке) - ХР это умела;
      2) не удаётся запустить TuxOnIce - в лог пишется, что своп виден/доступен, но невозможно ничего туда записать;
      3) непонятно, как прикрутить хоть какую-то из гуёвых переключалок режимов eeepc, все несовместимы с версией ядра;
      4) непонятно почему слетело автомонтирование юэсби (но в lspci любой диск при этом идеально определяется);
      5) непонятки, как налету менять ondemand на performance (при компиляции ядра это сокращает процесс до часа с копеечками, но в обычной/регулярной жизни ни на фиг не нужно).

      ядро брал и компилил по инструкции pf'а, из kernel-ppa, вроде бы, если важно - могу порыться в хистори файерфокса.

      > На моем x220 очень нестабильны.
      а первый запуск кёрнела с дополнительным ключиком profile был сделан?

      если возможно, м.б. продолжим в аське (207013, инвизибл)?

      Удалить
    3. сорри, забыл написать:
      при обоих питаниях при включённом вайфае настроенный на ondemand TLP даёт (копирую из Powetop'а 2.1):
      System baseline power is estimated at 2.14 W

      у меня дохлая батарея, поэтому discharge rate - 10.2 W (калибровка и расход батареи зависят от её возраста/убитости и температуры).
      реально полного заряда сейчас хватает на 42-43 минуты при включённом вайфае (под ХР месяц назад было тоже чуть больше 40 мин).

      Удалить
    4. Дык этта... Батарея сдохнет скоро совсем. Может сначала ее заменить?
      По вопросам пока не готов ответить что то полезное.
      По п.5 посмотрите, возможно вот это поможет: http://axa-ru.blogspot.com/2009/08/tuning-linux-for-powersave.html

      Удалить
    5. добавьте ещё в начало мануала запись строки vm.swappiness=10 в sysctl.conf - эффект поразительный :-) с преамбулой, естественно, что своп должен быть в 2 раза больше оперативки.

      ну и сам мануал пора адаптировать под свежевышедший pf-3.5.2 - смена 2х версий за один месяц неспроста... ;-)

      Удалить
    6. Я попробовал ядро 3.4 и 3.5 из репо убунты. На моей lenovo x220 имел пару зависаний.
      3.5.2 еще не пробовал.
      Спасибо за наводку. Как только будет время зразу проверю и поправлю мануал.

      Удалить
  41. зависания - под дженерик кёрнелом, или под заточенным на конкретное железо?

    3.5.2 уже морально устарело - update-manager -d, потом взял на кёрнел.орг вчерашний 3.6rc3, накатил полуниверсальный пэтч от ck, который релизит pf :-), и пэтч uksm, срезал всё левое железо и глюкавый туксонайс, оптимизировал под не новый ноут и получил выигрыш и по тестам, и по долгожительству дохлого акка (почти 12 мин).

    на всякий случай: дженерик-дебы на кёрнел-пипиэй 3.6.* уже 2хчастные и под 35Мб, под ними отчётливые тормоза видны глазом даже в иксэфсии4 и эликсдии...

    ОтветитьУдалить
  42. отрезаю/прикручиваю до сих пор вебкамеру (там какие-то необоримые хитрости), а первый наскок был сделан часа за 2... разница в размере vmlinuz с дженериком - 1.2Мб, и она радует.

    ОтветитьУдалить
  43. Use:
    sed -nr 's/.*DBUS_SESSION_BUS_ADDRESS=(.*)\0/\1/p'

    Instead of:
    grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ \
    | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'

    Cheers :)

    ОтветитьУдалить
  44. Use:
    sed -nr 's/.*BUS_ADDRESS=(.*)\0/\1/p' /proc/$PID/environ

    Instead of:
    grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ \
    | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'

    Cheers :)

    ОтветитьУдалить
  45. Simplified the code block in aNotify():

    sUSER=`ps -C $mysession -o user=`
    sENV=/proc/`ps -C $mysession -o pid= | sed 's/ //g'`/environ
    DBUS_SESSION_BUS_ADDRESS=$(sed -nr 's/.*BUS_ADDRESS=(.*)\0/\1/p' $sENV) \
    DISPLAY=:0.0 sudo -u $sUSER notify-send "$MSGH" "$MSGT" -i "$MSGI"

    And don't forget to set mysession=gnome-session or mate-session or whatever :)

    Cheers

    ОтветитьУдалить