Показаны сообщения с ярлыком powersaving. Показать все сообщения
Показаны сообщения с ярлыком powersaving. Показать все сообщения

понедельник, 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

суббота, 23 июля 2011 г.

x200s/x220. SSD tuning.

(Продолжение. Начало статьи)

Если в компьютере установлен SSD накопитель, то:
  1. Добавить в /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
    hdparm -W1 /dev/sda
    
  2. Отключить журналирование. Для этого определить UUD раздела на котором установлена Ububtu: $ sudo blkid /dev/sda1: LABEL="SYSTEM_DRV" UUID="E624915324912797" TYPE="ntfs" /dev/sda2: LABEL="Windows7_OS" UUID="EAAE9549AE950F67" TYPE="ntfs" /dev/sda3: LABEL="Lenovo_Recovery" UUID="E26C97CB6C97993D" TYPE="ntfs" /dev/sda5: UUID="0C58-1DC4" TYPE="vfat" /dev/sda6: UUID="24a89b42-96a6-415f-a23f-e13bdf770c45" TYPE="ext4" /dev/sda7: UUID="925c3ca9-c234-4ad7-814d-2c2522542e48" TYPE="swap" В моем случае Ubuntu установлена на /dev/sda6. Затем загузиться с другого раздела или инсталляционного диска. Запустить терминал и дать команду tune2fs -O ^has_journal UUID="24a89b42-96a6-415f-a23f-e13bdf770c45"

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

четверг, 21 июля 2011 г.

x200s/ x220. Powersave. Отключить некритичные сервисы

Продолжение. Начало статьи)

Startup aplications

  • update-notifier.
    Во время работы от батарей нет нужды в проверке обновлений. Поэтому выгружаем демон в управляющем скрипте командой killall update-notifier А при подключении блока питания соответственно загружаем этот демон.

  • zeitgeist-datahub.
    Шпион, мониторящий действия пользователя. Мне не нужен. Снимаю галку со startup
Avahi.
Для ноутбука зачастую нет необходимости в использовании zeroConf. Поэтому сносим Avahi:
sudo apt-get remove avahi-daemon
Unity-3d. Ubuntu 11.04
Этот интефейс очень часто обращается к видеокарте и вызывает ее прерывания с частотой около 40 Гц.
Uniti-2d для ноутбука более предпочтительна. sudo apt-get install unity-2d


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

вторник, 14 декабря 2010 г.

ZyXEL NBG460N EE, ThinkPad x200s & powersaving

Предистория.

В моей домашней сети долгое время трудился роутер Asus wl500gp.
Но пришло время и он сгорел.

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

Настройка ZyXEL для Корбины

На замену я купил роутер ZyXEL NBG460N EE.
Прошивка V3.60(BFL.0) | 03/11/2010. Менять не стал.

Характеристики устройства великолепны, а начальная настройка устройства предельно проста и показана скриншоте.



Я взял этот роутер, руководствуясь следующим соображениями:

Оценка скорости LAN/WLAN

Ниже приведены измерения скоростных характеристик примере копирования файла 7,5 GB с ReadyNas Duo на ноутбук ThinkPad x200s по протоколу nfs.
LAN 1000 Mb/s
WLAN 300 Mb/s
WLAN 54 Mb/s

x200s powersaving и 802.11n

В процессе настройки я выявил интересную особенность: соединение по wifi переставало работать в случае, когда на ZyXEL был установлен протокол 802.11n, а на wifi карточке ноутбука режим энергосбережения.
Выражалось это в безумных временах задержки достигающих на ping 6 секунд.
По результатам я исправил скрипт включения режима энергосбережения pm-utils и написал скрипт изменения режима работы wifi модуля ZyXEL NBG460N EE.

Настраиваем переброску портов для transmission и emule 1 2

У меня работает transmission на 192.168.1.65 (ReadyNas Duo) и emule на 192.168.1.63 x200s:$ telnet 192.168.1.1 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'. Password: **************** Copyright (c) 1994 - 2010 ZyXEL Communications Corp. NBG460NEE> ip nat server load 1 NBG460NEE> ip nat server edit 5 rulename transmission.65 NBG460NEE> ip nat server edit 5 svrport 51413 51413 NBG460NEE> ip nat server edit 5 intport 51413 51413 NBG460NEE> ip nat server edit 5 forwardip 192.168.1.65 NBG460NEE> ip nat server edit 5 active on NBG460NEE> ip nat server edit 10 rulename emule.63-1 NBG460NEE> ip nat server edit 10 svrport 4662 4662 NBG460NEE> ip nat server edit 10 intport 4662 4662 NBG460NEE> ip nat server edit 10 forwardip 192.168.1.63 NBG460NEE> ip nat server edit 10 active on NBG460NEE> ip nat server edit 10 rulename emule.63-2 NBG460NEE> ip nat server edit 10 svrport 4665 4665 NBG460NEE> ip nat server edit 10 intport 4665 4665 NBG460NEE> ip nat server edit 10 forwardip 192.168.1.63 NBG460NEE> ip nat server edit 10 active on NBG460NEE> ip nat server edit 10 rulename emule.63-3 NBG460NEE> ip nat server edit 10 svrport 4672 4672 NBG460NEE> ip nat server edit 10 intport 4672 4672 NBG460NEE> ip nat server edit 10 forwardip 192.168.1.63 NBG460NEE> ip nat server edit 10 active on NBG460NEE> ip nat server save
Чтобы проверить правильно-ли открыты порты, можно войти по телнету в машину для которой мы откывали порт и выполнить команду netstat -nap | grep <#-ip-port>*
Для transmission команда будет выглядеть примерно так: # netstat -nap | grep 51413 tcp 0 0 0.0.0.0:51413 0.0.0.0:* LISTEN 13089/transmission- tcp 0 0 192.168.1.65:51413 178.178.10.37:60951 ESTABLISHED 13089/transmission- tcp 0 9325 192.168.1.65:51413 178.123.120.46:50682 ESTABLISHED 13089/transmission- tcp 0 1 192.168.1.65:4866 89.178.15.115:51413 SYN_SENT 13089/transmission- tcp 0 15184 192.168.1.65:51413 178.94.89.19:3300 ESTABLISHED 13089/transmission- tcp 0 13768 192.168.1.65:51413 125.239.194.95:60904 ESTABLISHED 13089/transmission- tcp 0 0 192.168.1.65:51413 178.123.59.229:52897 ESTABLISHED 13089/transmission- tcp 0 0 192.168.1.65:51413 85.173.204.23:12700 ESTABLISHED 13089/transmission- tcp 0 9848 192.168.1.65:51413 84.129.146.69:3099 ESTABLISHED 13089/transmission- tcp 0 15848 192.168.1.65:51413 83.149.3.170:52936 ESTABLISHED 13089/transmission- tcp 17 632 192.168.1.65:51413 178.94.108.95:3460 ESTABLISHED 13089/transmission- tcp 0 0 192.168.1.65:51413 77.41.78.212:42246 TIME_WAIT - tcp 0 19232 192.168.1.65:51413 83.149.3.214:19442 ESTABLISHED 13089/transmission- tcp 0 12616 192.168.1.65:51413 83.237.250.28:53980 ESTABLISHED 13089/transmission- tcp 0 0 192.168.1.65:51413 86.110.163.18:50840 ESTABLISHED 13089/transmission- tcp 0 0 192.168.1.65:51413 217.118.81.17:41234 ESTABLISHED 13089/transmission- udp 1756 0 0.0.0.0:51413 0.0.0.0:* 13089/transmission- Видно, что уже установлено 14 соединений 192.168.1.65:51413 с внешними клиентами.

Проверка firewall

После установки router автоматически поднимает firewall и никаких специяльных действий проводить не нужно.
Для проверки можно воспользоваться одним из online сервисов. Например https://www.securitymetrics.com/portscan.adp
На указанный мной почтовый адрес пришло письмо с результатами проверки.


Here are your Port Scan test results from SecurityMetrics.

SecurityMetrics offers a range of affordably priced security products and services.
Summary
Ports Scanned: 22 ports out of 65,535 ports
External IP: xxx.xxx.xxx.xxx
Internal IP: unknown
Connection Type: Router, Firewall, or Proxy
Port Scan Duration: 7 seconds
Date/Time: 2011-01-27 21:18:33 MST


Use These Security Recommendations For Your Configuration


Good Job! All the ports we scanned on your router, firewall, or proxy are secure.

This Port Scan only checked 22 ports to see whether they were open, closed, or stealth. For a more comprehensive security analysis, run a Desktop Check to analyze your router, firewall, or proxy for over 600 security weaknesses.

If you are using an ISP or Corporate router/firewall/proxy, you should tell your System Administrator if any weaknesses are found.


Disable Ports/Programs


Every program on your computer that accesses the Internet uses a port. Most of these programs have known security weaknesses. If possible disable any unnecessary programs or ports listed below to improve your computer security.

Fix Open Ports
Program Port How To Disable Description
No open ports were found.


I look forward to helping you in the future. The best way to secure your computer and safeguard your confidential data is to run a Desktop Check weekly.

User manual

ZyXEL NBG460N EE авляется мощным и многофункциональным устройством и для тонкой настройки лучше руководствоваться User Manual


Upd 21/12/2010

суббота, 5 декабря 2009 г.

Ubuntu 9.10 и выше. ThinkPad x200s/x220. Power Saving.

(Продолжение. Начало статьи)


От laptop-mode, который я использовал для 9.04 я отказался, поскольку муторно и непрозрачно. Проще для осмысления pm-utils.

  1. Устраним баг, не дающий включить режим сохранения энергии для Wi-Fi
  2. Установим apmd, pm-utils и expect $ sudo apt-get install apmd pm-utils expect hdparm libnotify-bin Мне expect нужен для управления роутером NBG460N EE из командной строки.

  3. Cоздадим скрипт /usr/lib/pm-utils/power.d/99-savings.sh
    $ sudo gedit /usr/lib/pm-utils/power.d/99-savings.sh
    Копируем листинг к окно редактора и сохраняем.
    ######################################################################################
    # A script to agressively toggle power management between high 
    # performance and very low power usage.
    # For more information on each of these options, see http://www.lesswatts.org
    ################# Ghanges 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 (Brithness, user, etc ) to /tmp/powersave.ini
                    #   Fix notify-send message
                    #   Added CPU core disabling. Disable cores not affected for power saving
                    #     
    
    #
    # 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=/tmp/powersave.ini
    
    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 wol d
          ethtool -s eth0 autoneg off speed 1000
          ;;
    
        true)  #batt_power
          # set the ethernet power savings.
          # ~ 0.4 W
          ethtool -s eth0 wol d
          ethtool -s eth0 autoneg off speed 100
          ;;
      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
    
          # 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
    
    #      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
          ;;
    
        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
          ;;
      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/devices/virtual/backlight/acpi_video0/brightness)
          echo $vAC_BRI > /sys/devices/virtual/backlight/acpi_video0/brightness
          ;;
    
        true)  #batt_power
          # Setup brigthness 30%
          vAC_BRI=$(cat /sys/devices/virtual/backlight/acpi_video0/brightness)
          echo $vBAT_BRI > /sys/devices/virtual/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 winbindd
          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
                ;;
              "DBUS_SESSION_BUS_ADDRESS")
                vDBUS_SESSION_BUS_ADDRESS=$KEY
                ;;
            esac
            echo "$PARM $KEY"
          done < $INI
        else
          echo "Reset Value"
          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 "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
    

  4. Для управления роутером NBG460N EE из командной строки создадим скрипт: sudo gedit /etc/pm/802.11.bgn Копируем листинг к окно редактора и сохраняем.
    #!/usr/bin/expect
    
    ############################################
    # Set 802.11 /b/g mode for ZiXEL nbg460n ee
    # Need to install expect
    
    spawn "telnet" "192.168.1.1"
    
    expect "Password:"
    send "myPassword\r"
    expect "NBG460NEE>"
    send "wlan radio [lindex $argv 0]\r"
    expect "NBG460NEE>"
    send "exit\r"
    interact
    
    Справедливости ради скажу, что этот скрипт не является надежным.
    Если возникают проблемы с соединением при переходе в режим сохранения энергии лучше от него отказаться и не включать режим 802.11n.

  5. Установка:
    $ 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
  6. Проверка:
    Запускаем powertop
    $ sudo powertop
    и проверяем, что при питании от батареи он не дает никаких рекомендаций.


Полезные ссылки:
Update:
31/08/2010. Проверил работу на версии 10.04. Поправил команды управления Wi-Fi адаптером.
12/12/2010. С роутером ZiXEL NBG460N EE в режиме, когда на роутере включен протокол 802.11 n/b/g и сохранение энергии на карточке ноута, происходило нарушение работы выражающееся в задержках ping до 6 секунд.
Для восстановления работоспособности роутер переводится в режим 802.11 n/b скриптом 802.11.bgn (требуется expect).
23/07/2011. Переработал структуру скрипта. Обеспечил работу для Ubuntu 11.04 на Thinkpad x220 4290RW1.
10/12/2011. Протестировал на Ubuntu 11.10.

вторник, 1 декабря 2009 г.

Ubuntu Karmic. Устранение бага wifi power management.

Статья не актуальна. В ядре 2.6.32.7 (2.6.32-02063207-generic) устранено много багов. В том числе включена поддержка powersave для iwlagn (intel 5100). После установки нового ядра нужно проверить фунционпльность, как указано в конце статьи.

Ждал я пока исправят wifi драйвер в Ubuntu 9.10, ждал, но так и не дождался.

Не знаю как для других карт, но для intel Link 5100 на ядре 2.6.31-15-generic power management отключен. Это связано с нестабилностью реализации.

К слову, включение power management для wifi позволяет сэкономить до 4 Вт, что актуально для ноутбуков.

Я попробовал последнюю версию драйверов отсюда: http://linuxwireless.org/en/users/Download/stable/#Stable_compat-wireless_releases. Пока нареканий нет.


  • Версия драйверов должна соответствовать версии ядра.
  • Инструкция дана для ядра 2.6.32.2
Итак:

  1. Создадим каталог для выполнения операций
    $ mkdir ~/staff $ cd ~/staff
  2. Сначала, если необходимо, устанавливаем новое ядро.
    $ wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.32.2/linux-headers-2.6.32-02063202-generic_2.6.32-02063202_i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.32.2/linux-headers-2.6.32-02063202_2.6.32-02063202_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.32.2/linux-image-2.6.32-02063202-generic_2.6.32-02063202_i386.deb $ sudo dpkg -i linux-headers-2.6.32-02063202_2.6.32-02063202_all.deb linux-headers-2.6.32-02063202-generic_2.6.32-02063202_i386.deb linux-image-2.6.32-02063202-generic_2.6.32-02063202_i386.deb
  3. Перегружаемся в то ядро, в которое будем ставить драйвер.
  4. Скачиваем драйвер
    $ cd ~/staff $ wget http://www.orbit-lab.org/kernel/compat-wireless-2.6-stable/v2.6.32/compat-wireless-2.6.32-rc7.tar.bz2 $ tar xjf compat-wireless-2.6.32.2.tar.bz2 $ cd compat-wireless-2.6.32.2
  5. Выбираем тип wifi карты
    Пакет, который мы скачали содержит около десятка драйверов. Нам столько не нужно.
    Для моего x200s - используется iwlwifi.
    $ ./scripts/driver-select iwlwifi
  6. Компилируем и устанавливаем драйвер:
    $ make $ sudo make install $ sudo shutdown -r now

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

$ sudo iwconfig wlan0 power on

Посмотреть текущие установки можно с помощью следующей команды:

$ iwconfig wlan0 wlan0 IEEE 802.11abgn ESSID:"AXA_home" Mode:Managed Frequency:2.422 GHz Access Point: 00:1E:8C:6C:91:99 Bit Rate=54 Mb/s Tx-Power=15 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on Link Quality=57/70 Signal level=-53 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Если текст, выделенный жирным присутствует, то цель достигнута. Если нет - где то была допущена ошибка.
Все. Остальные баги Кармической Коалы меня не так сильно трогают.

Если нет подходящей темы, открывайте новую.

вторник, 22 сентября 2009 г.

x200s. Powersave. Настройка точки доступа WiFi

(Продолжение. Начало статьи)

Если есть возможность изменить настройки точки доступа, то можно и здесь попытаться сэкономить немного электроэнергии увеличив Beacon Interval.

В Asus wl500gP это делается на вкладке Wireless -> Advanced


Для D-Link DSM-G600:



Это позволяет реже будить Wi-Fi карту ноутбука и уменьшить общее количество Wakeups

Если нет подходящей темы, открывайте новую.

понедельник, 21 сентября 2009 г.

x200s. Powersave. DeBug Gnome.

(Продолжение. Начало статьи)

Статья в процессе...

В Gnome присутствует программистская ошибка, связанная с неверным размещением временных данных. Разработчики почему то хранят их на жестком диске в домашнем каталоге пользователя, хотя естественней их хранить в /tmp.

Некоторые пользователи пытались обратить внимание разработчиков Gnome на эти проблемы, но не были услышаны:

Решить эту проблему можно переместив в /tmp эти файлы и сделав на них ссылку

$ ln -fs /tmp/profile-42T4647-56160-___75-discharging.csv /home/akhromov/.gnome2/gnome-power-manager/profile-42T4647-56160-___75-discharging.csv $ ln -fs /tmp/profile-42T4647-56160-___75-charging.csv /home/akhromov/.gnome2/gnome-power-manager/profile-42T4647-56160-___75-charging.csv $ ln -fs /tmp/saved_state /home/akhromov/.gconfd/saved_state

Или, переместить в /tmp полностью их родительские каталоги.

Если нет подходящей темы, открывайте новую.

четверг, 17 сентября 2009 г.

x200s. Powersave. Файловая система.

(Продолжение. Начало статьи)

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

Я поначалу устанавливал при инталляции Ubuntu на ext3. Но обсуждение на forum.ubuntu.ru заставило меня задуматься о целесообразности установки ext3.

Как работает ext3?
  1. Пользователь дает команду записи данных на диск
  2. Метаданные записываются в журнал и помечаются флагом "не завершено"
  3. Данные пользователя записываются на диск
  4. Метаданным выставляется флаг "выполнено"
Как неприятное следствие - вместо одного обращения к диску - целых три.

Какая область применения журналируемых файловых систем?
По моему мнению область применения журналируемых файловых систем при обработке критически важных данных. Это серверы баз данных, сетевые и коммункационные системы и т.п.

Но стоит ли гнаться за этими новшевствами?
За ext3:
    Якобы, более надежная, чем ext2
Против ext3:
  • Я использую ноутбук для web серфинга, ведения проектов, почтовой переписки и как хобби. Я не обрабатываю на нем данные стоимостью в миллионы долларов. Зачастую, мне важнее продолжительность работы, чем беспрецендентная надежность.
  • Обеспечивая более долгое время работы от батареи, мы всячески откладываем запись на диск, собирая в буфере памяти наши данные. В данном случае использование ext3 (и далее) представляется нелогичным.
  • В три раза увеличивая количество обращений к диску, ext3 увеличивает его время нахождения диска в состоянии active. Повышается потребляемая мощность.
Я считаю, что ext2 в настоящее время - лучший выбор для ноутбука.

Что делать?

Умный был Чернышевский. Правильные вопросы задавал.
  • При установке OS на ноутбук выбирать ext2
  • Если система уже установлена - конвертировать в ext2
    Для этого:
    1. Отредактировать fstab, заменив тип раздела, где установлена система и который будем конвертировать с ext3 на ext2
    2. загружаемся с LiveCD или с системы установленной на другой раздел и вводим следующие команды
      $ sudo tune2fs -O ^has_journal /dev/sdaX $ sudo fsck.ext2 -f /dev/sdaX
      , где Х - номер раздела, который будем конвертировать
    3. Перезагружаемся


Если нет подходящей темы, открывайте новую.

среда, 16 сентября 2009 г.

x200s. 2 бага после установки ядра 2.6.30

После установки нового ядра возникло 2 бага
  1. Яркость дисплея регулируется с очень мелким шагом
    Вроде как, причина здесь в установке параметров xrand BACKLIGHT_CONTROL.
    После загрузки он принимает значение combination

    Чтобы исправить это, нужно выполнить следующую команду:
    $ xrandr --output LVDS --set BACKLIGHT_CONTROL legacy
  2. При работе от батареи яркость дисплея уменьшается через 30 секунд
    Здесь причина - gnome-screensaver
    HOWTO: Replace gnome-screensaver with xscreensaver

воскресенье, 13 сентября 2009 г.

x200s. Powersave. Обновился BIOS.

(Продолжение. Начало статьи)

7 сентября обновился BIOS для x200 и x200s.

Я не следил за исменениями в BIOS, поэтому не знаю на каком этапе китайцы что поправили.

После установки нового BIOS произошли исправлена ошибка из-за которой SCSI1 не переводился в режим powersave.

Режим работы вентилятора опять с какими-то глюками. При включении он вроде как не крутится. При достижении процессором 45 градусов - заводится и больше не останавливается. Поэтому от tpfun отказываться рано.

Вентилятор включается при 45 градусах, останавливается при достижении порога выключения (температуру отключения я не зафиксировал).

На странице загрузки доступны версии для установки из Windows и с загрузочного диска.

Там же есть новая микропрограмма для жесткого диска. Что она исправляет - не ясно.

x200s. Powersave. Настроить режимы видеокарты.

(Продолжение. Начало статьи)

  • Установить частоту обновления экрана 50 Гц
    System -> Preference -> Display



  • Отключить Visual Effects
    System -> Preference -> Appearance -> Visual Effects



четверг, 10 сентября 2009 г.

x200s. Power Saving. Kernel 2.6.30.5

Указанное ядро в отношении сохранения энергии работает куда лучше предыдущих, опробованных мной. Налицо явный прогресс. Если раньше флуктуации возле нижней границы потребляемой мощности были значительны, то в этом ядре, после соответствующей настройки стабильно стоит 6,7 Вт в режиме idle (Wi-Fi, Brightness = 30%).
Вообще, заметно, что ментейнеры Canonical озадачились проблемой сохранения энергии.
По этому показателю Ubuntu начинает обгонять Windows.

вторник, 25 августа 2009 г.

Powersaving. WattOS

Обнаружил проект, основанный на дистрибутиве Ubuntu: wattOS Light-Fast-Now. По моему шняга какая то. Люди взяли обычный ubuntu, с generic ядром, добавили в него свою программку и назвали новым проектом. Хотя может я ошибаюсь. Если кто пробовал - какие мнения? Стоит ли использовать?

суббота, 22 августа 2009 г.

x200s. Powersave. Final thoughts.

(Продолжение. Начало статьи)

В завершение всего этого безобразия - скрипт для показа в реальном времени основных системных параметров, влияющих на потребление энергии.

Он показывает практически все параметры, которые управляются с помощью сервиса laptop-mode и удобен для его настройки.




Не без недочетов, но функцию свою выполняет.

Запускается от root.
Исходник здесь


пятница, 21 августа 2009 г.

x200s. Powersave. xorg.conf

(Продолжение. Начало статьи)

Наилучшие результаты у меня получились про акселерации "по умолчанию".
Section "Monitor"
Identifier    "Configured Monitor"
Option        "DPMS"
EndSection

Section "Monitor"
Identifier    "HDMI-1"
Option        "Ignore" "True"
EndSection

Section "Monitor"
Identifier    "HDMI-2"
Option        "Ignore" "True"
EndSection

Section "Screen"
Identifier    "Default Screen"
Monitor       "Configured Monitor"
Device        "Configured Video Device"
DefaultDepth  24
SubSection    "Display"
Modes        "1280x800" "1024x768"
EndSubSection
EndSection

Section "Device"
Identifier    "Configured Video Device"
Driver        "intel"
#     Option        "AccelMethod" "uxa"   # При включении этой опции потреблени е возрастает на 1 Вт
Option        "monitor-HDMI-1" "HDMI-1"
Option        "monitor-HDMI-2" "HDMI-2"
EndSection

Section "ServerFlags"
Option        "DontZap" "no" # Включение x-server restart by Ctrl-Alt-Bs
EndSection


Включение опции "NoDRI" приводило к проблемам регулировки яркости.


среда, 12 августа 2009 г.

x200s. HDD Spin down.

(Продолжение. Начало статьи)


Вреден ли для HDD режим spin down?

В ThinkPad x200s используется HDD Hitachi Travelstar 5K320 HTS543225L9SA00.

Этот диск обеспечивает не менее 600 000 нормальных циклов load/unloads.

В среднем ноутбук работает от батареи до 6 часов в сутки. Если считать, что диск останавливается/раскручивается 1 раз в минуту, значит его ресурса хватит не менее, чем на
600 000/(1*60*6*365) = 4,57 года.

Нечего париться по поводу ограниченного ресурса HDD. Ведь никто же не возмущается, что ресурс батареи всего 250 циклов заряд/разряд. А это вообще меньше года.


Нужно ли останавливать диск?

Вопрос запутан. Разработчики и сопровожденцы Gnome Power Manager утверждают, что не нужно. Якобы современные диски имеют такой хороший режим powersave, что и останавливать их смысла нет.

Вот данные взятые из той же спецификации на Hitachi Travelstar 5K320.

Watts (RMS Typical)
Performance Idle average1,7
Active Idle average0,8
Low Power Idle average0,55
Read average1,8
Write average1,8
Seek average2,2
Standby0,2
Sleep0,1
Startup (maximum peak)5,0
Average from power on toready3,8


На основании приведенных данных видно, что разница между Low Power Idle average и Standby составляет 0,35 Вт.

Простой расчет показывает, что перевод диска в режим Standby начинает давать экономию энергии на 12-й секунде, что наглядно показано на графике:


Кто раскручивает диск?

Чтобы проверить какие программы обращаются к диску легче всего запустить программу iotop,
которая в реальном времени это покажет. Или собрать статистику в файл и проанализировать, кто чаще образался к диску:
$ iotop -bod 30 > /tmp/iodisk.log
В таблицу сведены основные источники, вызывающие регулярные раскрутки HDD, и методы борьбы борьбы с ними.
Запись в logПо умолчанию система постоянно пишет в log файлы, которые находятся в каталоге /var/log.

Ubuntu 9.04: Я перенёс каталоги /tmp и /var/tmp в RAM и отключил логгирование в режиме работы от батареи с помощью настройки laptop-mode

Ubuntu 10.04 и выше: Для логирования в этой версии применена программа rsyslog. При работе от батарей я просто отключаю (в скрипте pm-utils) все логирование командой $ service rsyslog stop

wpa_supplicantUbuntu 9.04: wpa_supplicant раз в минуту записывает диагностику в /var/log/wpa_supplicant.log

Этот драйвер пока не настраивается через /etc/syslog.conf. Как перенаправить вывод описано здесь.


Ubuntu 10.04: В этой версии Ubuntu ничего с wpa_supplicant делать не нужно.


firefoxС точки зрения powersaving одна из самых злобных программ.

Наиболее эффективный метод - перенос User Profile в оперативную память.

gnome-power-managerНе знаю что уж, что там она менеджирует. По моему она просто показывает сколько осталось батарейки и выводит график заряда/разряда. (Шютка) За это она раз в минуту обращается к диску.

Что с ней делать пока не придумал. Может кто подскажет?

Vetal1950 предложил элегантное решение. Добавить в /etc/fstab команду монтирования:
tmpfs /var/lib/upower tmpfs defaults,noatime,nodiratime 0 0


После применения указанных мер, диск в моем ноутбуке, когда он находится в состоянии idle, просыпается примерно 1 раз за 3 минуты.



x200s/x220. Powersave. Firefox.

(Продолжение. Начало статьи)

Update:
  • После перехода на Ubuntu 9.04 и firefox 3.5 Shiretoko внесены исправления в скрипт: изменено имя программы с firefox на firefox-3.5.
  • Проверено на Ubuntu 10.04
Если в компьютере установлен SSD накопитель, то ничего этого делать не нужно

Firefox 3.x использует базу данных sqlite, которая генерирует очень много событий записи на диск.

Чтобы уменьшить обращения к диску, необходимо сделать следующее:

  1. Разместить firefox cache в оперативной памяти

    Для этого:
    1. Перенести в RAM директорию /tmp

    2. Перенести cache firefox в /tmp/firefox.
      В строке адреса пишем about:config
      Далее нажимем правуб кнопку мыши и добавляем строковую переменную:
      browser.cache.disk.parent_directory
      и присвоить ей значение:
      /tmp/firefox

  2. Размещаем весь профиль пользователя в RAM.

    Этот способ более радикальный, нежели предыдцщий, но и, соответственно, более сложный. Поэтому распечатайте эту инструкцию или скопируйте ее на диск и откройте в OO Writer.
    1. Перенести в RAM директорию /tmp

    2. Создать каталог для профиля пользователя в firefox
      $mkdir /tmp/firefox
    3. Создать новый профиль. Я назвал его RAM и разместил в каталоге /tmp/firefox
      $/usr/lib/firefox/firefox -ProfileManager

    4. Закрываем firefox.
    5. Скопировать текущий профиль в каталог /tmp/firefox
      $shopt -s dotglob $cp -a ~/.mozilla/firefox/40ev7h33.default/* /tmp/firefox
      Расположение текущего профиля указано в ~/.mozilla/firefox/profiles.ini
    6. Создаем скрипт /etc/init.d/ff-profile.sh:
      #! /bin/sh
      # This script copies the firefox user profile
      #  from the directory $DSK_PROFILE
      #  to the directory $RAM_PROFILE
      #  after the computer power up
      #  and back before power down
      # 
      #  v0.12 - minor changes for firefox control firefox cache
      #  v0.11 - minor changes for firefox 3.5 and Ubuntu 9.04
      #  v0.1 - initial in Ubuntu 8.04
      
      # define firefox name
      #FF=firefox-3.5
      FF=firefox
      
      # define how old cache in days
      OLDCACHE=2
      
      # where firefox profile
      RAM_PROFILE=/tmp/firefox
      DSK_PROFILE=/root/.mozilla/$FF/ram.profile
      
      FLG_DEBUG=1
      OUT_DEBUG=/var/log/ff-profile.tst
      
      shopt -s dotglob
      
      case "$1" in
        start)
          if [ $FLG_DEBUG -eq 1 ]
            then echo "$1: ff-profile.sh started" >> $OUT_DEBUG
          fi
          if ! [ -d $RAM_PROFILE ] 
            then 
              mkdir -p $RAM_PROFILE
              chmod 777 $RAM_PROFILE
                if [ $FLG_DEBUG -eq 1 ]
                  then echo "$1: creating  $RAM_PROFILE" >> $OUT_DEBUG
                fi
          fi
          if [ $FLG_DEBUG -eq 1 ]
            then echo "$1: copy $DSK_PROFILE/* $RAM_PROFILE " >> $OUT_DEBUG
          fi
          # remove old cache
          find $DSK_PROFILE/Cache* -mtime +$OLDCACHE -exec rm {} \;
      
          cp -a $DSK_PROFILE/* $RAM_PROFILE >> $OUT_DEBUG
          ;;
        stop)
          if [ $FLG_DEBUG -eq 1 ]
            then echo "$1: ff-profile.sh stoped" >> $OUT_DEBUG
          fi
          if ! [ -d $DSK_PROFILE ] 
            then 
              mkdir -p $DSK_PROFILE
              chown 777 $DSK_PROFILE
              if [ $FLG_DEBUG -eq 1 ]
                then echo "$1: creating  $DSK_PROFILE" >> $OUT_DEBUG
              fi
          fi
          if [ $FLG_DEBUG -eq 1 ]
            then echo "$1: copy $RAM_PROFILE/* $DSK_PROFILE " >> $OUT_DEBUG
          fi
          cp -a $RAM_PROFILE/* $DSK_PROFILE
          ;;
      esac
      
      shopt -u dotglob
      
      exit 0
    7. Назначаем ему права, пользователя, и делаем на него ссылку автозапуска и остановки
      cd /etc/init.d $sudo chmod 755 ff-profile.sh $sudo chown root:root ff-profile.sh $sudo update-rc.d ff-profile.sh defaults
    8. Открываем редактор меню (System->Preferences->Main Menu).
      Заменяем команду запуска firefox (Application->Internet->Firefox Web Browser->Properties) на /usr/lib/firefox/firefox -P RAM

      Перезагружаем компьютер. Проверяем работу.

  3. В Firefox в меню Правка -> Настройки -> Защита снять галку с пункта "Блокировать сайты, подозреваемые в имитации других сайтов"

  4. Динамические сайты с flash анимацией и java-script вносят большую долю в увеличение потребления энергии.

    Для блокировки на страницах java - установить в firefox adblock plus и заблокировать в нем показ соответствующих элементов http страниц.

    Для блокировки flash - установить Flashblock

    Это позволяет сэкономить до 1,5 Вт.

вторник, 11 августа 2009 г.

x200s. Управление вентилятором.

(Продолжение. Начало статьи)

Если установлена последняя версия BIOS 3.08 от 2009.09.07, то устанавливать tpfun нет необходимости.

Хотя я и писал, что не стоит трогать вентилятор, поскольку это жизненно важный элемент ноутбука, руки все равно чешутся.

Я установил ThinkPad Fan Control в соответствии с инструкцией указанной на домашней странице программы.

Создал файл конфигурации lenovo_74663tg:
# Fan profile for tpfand
# For Lenovo 7466-3TG
# created on  2009-08-10 21:28:17.152556
# by an http://axa-ru.blogspot.com
#
0. CPU = 0:0 47:2 63:3 71:5 75:255 
1. MiniPCI = 0:0 47:2 59:3 65:5 68:255
2. Sensor 2 = 0:0
3. GPU = 0:0 53:2 65:3 71:5 74:255
4. Bat0 = 0:0 43:2 52:3 57:5 60:255
5. Sensor 5 = 0:0 
6. Bat0 = 0:0 43:2 52:3 57:5 60:255
7. Sensor 7 = 0:0
8. Northbridge = 0:0 52:2 62:3 67:5 70:255
9. RAM? = 0:0 52:2 62:3 67:5 70:255

hysteresis = 2
interval_speed = 2
interval_duration = 500.000000
interval_delay = 5000.000000

и разместил его в каталоге /usr/share/tpfand/models/by-id.



Файл конфигурации зависит от модели ноута. У меня 7466-3TG
С большой вероятностью он подойдет для следующих моделей (собранных на той же системной плате):

7466- 3Tx, 3Ux
7469- 5Fx, 7Lx, 7Mx, 7Nx, 7Px, 7Rx, 7Sx, 7Tx, 7Ux, 7Vx, 7Xx
7470- 6Jx, 6Kx

Вот собственно и все. Экономия энергии от этого небольшая. По моим оценкам менее 0,1 Вт.

Для справки температурные режимы процессора:
Обычная температура в режиме Idle30-50°C
Рабочая, при полной утилизации процессора60-70°C
Максимальная температура100°C
Критическая температура 125°C



PS. TpFan собран для Ubuntu 9.04 и в Ubuntu 11.10 пакеты не устанавливаются.
Для экспериментаторов я переупаковал пакеты:

tpfan-admin_0.96-ubuntu1_all_patched.deb
tpfand_0.95-ubuntu1_all_patched.deb
tpfand-profiles_20090309-ubuntu1_all.deb

Если у кого появится желание попробовать, отпишитесь по результатам.

Updated 24/12/2011

четверг, 6 августа 2009 г.

x200s/x220. Увеличение времени работы от батарей.

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

Что у нас есть?
  • Lenovo ThinkPad x200s 74663TG. Проверено на Ubuntu 9.04, 9.10, 10.04, 10.10
  • Lenovo ThinkPad x220 4290RW1. Проверено на Ubuntu 11.04, 11.10

Видно, что разработчиками ядра была проведена работа по уменьшению потребления энергии. Мне удалось настроить систему так, что на Lenovo Thinkpad x200s с ядром 2.6.35-31-generic-pae при включенном wi-fi и запущеном firefox в idle минимальное потребление составляло 4.1 Вт. Типичное - около 5 Вт.


Для Lenovo Thinkpad x220 4290RW1 под Ubuntu 11.04 с ядром 2.6.38 показатели чуть скромнее: около 8,3 Вт. Типичный уровень потребления 9 Вт. Это лучше чем в Windows 7, где потребление составляет 10-11 Вт.
На скриншоте ниже показан powertop и snapshot Power Manager, сделанный из под Windows7.


Для той же Lenovo Thinkpad x220 4290RW1 под Ubuntu 11.10 с ядром 3.0.0.13: около 7 Вт. Типичный уровень потребления 9 Вт.



Для той же Lenovo Thinkpad x220 4290RW1 под Ubuntu 11.10 с кастомным ядром 3.1.5-pf.: около 6 Вт. Типичный уровень потребления 8 Вт.


Игра Emilia Pinball дает потребляемую мощность около 21 Вт. Я думаю, столько же даст Quake.

Теория и исследования


Что делать?

  1. Обновить BIOS
  2. Отключить в BIOS неиспользуемые устройства

  3. Установить новое ядро
  4. Настроить x server (xorg.conf)
  5. Настроить режимы видеокарты
  6. Перенести временные файлы в RAM
  7. Отключить запись логов
  8. Для SSD минимизировать запись на диск.
  9. Настроить laptop_mode (Ubuntu 9.04) или pm-utils (≥ 9.10).
  10. Включить управление скоростью вентилятора.
  11. Настроить работу программ
  12. Отключить некритичные сервисы.
  13. Если возможно, настроить точку доступа.



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


Upd 04/11/2011