понедельник, 3 августа 2009 г.

ThinkPad x200s. Настройка laptop-mode

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

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

По умолчанию laptop-mode установлена в ubuntu, но так как было замечено, что на ThinkPad иногда приводила к зависанию компьютера, она выключена и большинство управляющих констант установлено в "false" или "0".

Но на моем x200s все работает без проблем (с некоторыми моими доработками).

Почти все управляющие и командные файлы laptop-mode являются текстовыми. В них дано подробное описание по каждой команде и константе.

Я просто укажу файл, константу и значение, которое я ей присвоил.

Те константы и файлы, которые остались без изменения, я опущу.

  1. Включить laptop-mode
    • /etc/default/acpi-support
      ENABLE_LAPTOP_MODE=true


  2. Настроить файлы конфигурации

    1. /etc/laptop-mode/conf.d/ac97-powersave.conf
      CONTROL_AC97_POWER=1

    2. /etc/laptop-mode/conf.d/configuration-file-control.conf
      CONTROL_CONFIG_FILES=1

      Включение этого параметра позволяет держать 3 конфигурационных файла syslog.conf, управляющих логами, для разных режимов.
      Я закоментировал весь логинг (/etc/syslog.conf-batt) для режима работы от батареи.

    3. /etc/laptop-mode/conf.d/cpufreq.conf
      CONTROL_CPU_FREQUENCY=1
      BATT_CPU_MAXFREQ=slowest
      BATT_CPU_MINFREQ=slowest
      BATT_CPU_GOVERNOR=powersave
      CONTROL_CPU_THROTTLING=1
      BATT_CPU_THROTTLING=medium
      LM_AC_CPU_THROTTLING=minimum

    4. /etc/laptop-mode/conf.d/ethernet.conf
      Этот модуль работал странно. При смене питания батарея/сеть не переключалась скорость интерфейса.
      Я его переписал и устранил эту ошибку.
      Заодно ввел 3 константы, определяющие скорость в разных режимах.
      CONTROL_ETHERNET=1
      DISABLE_WAKEUP_ON_LAN=1
      BATT_THROTTLE_ETHERNET=1
      LM_AC_THROTTLE_ETHERNET=1
      NOLM_AC_THROTTLE_ETHERNET=1
      BATT_SPEED_ETHERNET=100
      LM_AC_SPEED_ETHERNET=1000
      NOLM_AC_SPEED_ETHERNET=1000
      ETHERNET_DEVICES="eth0"

      Файл /usr/share/laptop-mode-tools/modules/ethernet изменить в соответствии с приведенным ниже (сделать copy/past).
      #! /bin/sh
      # 
      # Laptop mode tools module: Ethernet power saving tweaks.
      #
      
      if [ x$CONTROL_ETHERNET = x1 ] ; then
        for DEVICE in $ETHERNET_DEVICES ; do
      
          # Wakeup-on-LAN handling
          if [ x$DISABLE_WAKEUP_ON_LAN = x1 ] ; then
            if ethtool -s $DEVICE wol d >> $OUTPUT 2>&1 ; then
              $LM_VERBOSE && echo "Disabled wakeup-on-LAN for $DEVICE" >> $OUTPUT
            else
              $LM_VERBOSE && echo "Could not disable wakeup-on-LAN for $DEVICE" >> $OUTPUT
            fi
          fi
      
          if [ $ON_AC -eq 1 ]; then
          # working on AC
            if [ $LM_AC_THROTTLE_ETHERNET -eq 1 ] ; then
              if ethtool -s $DEVICE speed $LM_AC_SPEED_ETHERNET >> $OUTPUT 2>&1 ; then
                $LM_VERBOSE && echo "Setting LAN speed = $LM_AC_SPEED_ETHERNET for $DEVICE" >> $OUTPUT
              else
                $LM_VERBOSE && echo "Could not chanche speed"
              fi
            fi
            if [ $NOLM_AC_THROTTLE_ETHERNET -eq 1 ] ; then
              if ethtool -s $DEVICE speed $NOLM_AC_SPEED_ETHERNET >> $OUTPUT 2>&1 ; then
                $LM_VERBOSE && echo "Setting LAN speed = $NOLM_AC_SPEED_ETHERNET for $DEVICE" >> $OUTPUT
              else
                $LM_VERBOSE && echo "Could not chanche speed"
              fi 
            fi
          else
          # working on Battery
            if [ $BATT_THROTTLE_ETHERNET -eq 1 ] ; then
              if ethtool -s $DEVICE speed $BATT_SPEED_ETHERNET >> $OUTPUT 2>&1 ; then
                $LM_VERBOSE && echo "Setting LAN speed = $BATT_SPEED_ETHERNET for $DEVICE" >> $OUTPUT
              else
                $LM_VERBOSE && echo "Could not chanche speed"
              fi
            fi
          fi
        done
      else
        $LM_VERBOSE && echo "Ethernet module is disabled." >> $OUTPUT
      fi

    5. /etc/laptop-mode/conf.d/hal-polling.conf
      CONTROL_HAL_POLLING=1

    6. /etc/laptop-mode/conf.d/intel-hda-powersave.conf
      CONTROL_INTEL_HDA_POWER=1

      Значение, которое передается контроллеру Intel HDA указано в скрипте /usr/share/laptop-mode-tools/modules/intel-hda-powersave в строке:
      . . .
      echo 5 > /sys/module/snd_hda_intel/parameters/power_save
      . . .
      

      Я заменил значение 5 на 10.

    7. /etc/laptop-mode/conf.d/intel-sata-powermgmt
      CONTROL_INTEL_SATA_POWER=1

    8. /etc/laptop-mode/conf.d/lcd-brightness.conf
      CONTROL_BRIGHTNESS=1
      BATT_BRIGHTNESS_COMMAND="echo 30"
      LM_AC_BRIGHTNESS_COMMAND="echo 80"
      NOLM_AC_BRIGHTNESS_COMMAND="echo 80"
      BRIGHTNESS_OUTPUT="/proc/acpi/video/VID/LCD0/brightness"

    9. /etc/laptop-mode/conf.d/sched-mc-power-savings.conf
      CONTROL_SCHED_MC_POWER_SAVINGS=1

    10. /etc/laptop-mode/conf.d/start-stop-programs.conf
      CONTROL_START_STOP=1
      BATT_STOP="on-ac.sh"
      BATT_START="on-battery.sh"

      В этом конфигурационном файле указываются имена скриптов запускающихся при переходe в режим работы от батареи
      #!/bin/bash
      
      # ********************************************
      # * on-battery.sh
      # ********************************************
      
      echo "for check running on-battery.sh" >> /tmp/lt-m-check.out
      
      # ********  Tuning VM
      echo 0 > /proc/sys/vm/swappiness   #    Disable SWAP
      echo 30000 > /proc/sys/vm/dirty_writeback_centisecs
      echo 0 > /proc/sys/vm/dirty_expire_centisecs
      echo 1 > /proc/sys/vm/dirty_background_ratio
      echo 95 > /proc/sys/vm/dirty_ratio
      
      #   Agressive PCI
      echo powersave > /sys/module/pcie_aspm/parameters/policy
      
      #   Set timeout to idle 20 sec, 
      #     acoustic management HDD to more silent, less performance
      hdparm -q -S4 -M 128 /dev/sda
      
      # disable HDMI
      xrandr --output HDMI-1 --off
      xrandr --output HDMI-2 --off
      
      # Stop cron, anacron
      /etc/init.d/cron stop >> /dev/null
      /etc/init.d/anacron stop >> /dev/null
      

      и от сетевого источника питания источника питания.
      # ********************************************
      # * /etc/laptop-mode/batt-stop/on-ac.sh
      # ********************************************
      
      echo "for check running on-ac.sh" >> /tmp/lt-m-check.out
      
      #   Tuning VM. Вернуть значения по умолчанию
      echo 60 > /proc/sys/vm/swappiness
      echo 60000 > /proc/sys/vm/dirty_writeback_centisecs
      echo 60000 > /proc/sys/vm/dirty_expire_centisecs
      echo 1 > /proc/sys/vm/dirty_background_ratio
      echo 60 > /proc/sys/vm/dirty_ratio
      
      # set acoustic management HDD: more performance
      hdparm -q -M 254 /dev/sda
      
      # Start cron, anacron
      /etc/init.d/cron start >> /dev/null
      /etc/init.d/anacron start >> /dev/null

      Эти файлы нужно сохранить в каталогах
      /etc/laptop-mode/batt-start/
      и
      /etc/laptop-mode/batt-stop/
      соотвественно и сделать исполняемыми:
      $sudo chmod 755 /etc/laptop-mode/batt-start/on-battery.sh $sudo chmod 755 /etc/laptop-mode/batt-stop/on-ac.sh

    11. /etc/laptop-mode/conf.d/usb-autosuspend.conf
      CONTROL_USB_AUTOSUSPEND=1

    12. /etc/laptop-mode/conf.d/wireless-iwl-power.conf
      CONTROL_IWL_POWER=1
      IWL_AC_POWER=1
      IWL_BATT_POWER=5



После изменении параметров всех, или части параметров конфигурационных файлов необязательно перезагружать компьютер. Достаточно выполнить команду перезапуска службы laptop-mode
#service laptop-mode restart




Обсуждение лучше вести здесь:

8 комментариев:

  1. Весьма интересно :) Может быть не всем, но хотя бы частично воспользуюсь этим гайдом. Спасибо :)

    ОтветитьУдалить
  2. Не за что. Мне тоже было интересно, когда разбирался.

    ОтветитьУдалить
  3. Анонимный9 марта 2010 г., 4:32

    мышка теперь спит круглосуточно...

    ОтветитьУдалить
  4. Это значит, что мышь не работает? Странно. Хотя на моем x200s trackball, но он не спит.
    Что-то еще где-то задели...
    Выключите laptopmode (п.1) и напишите, что получилось.

    ОтветитьУдалить
  5. Спасибо. У себя настроил - все работает.

    ОтветитьУдалить
  6. Cпасибо за статью. вопрос по файлу cpufreq.conf .

    Should laptop mode tools control the CPU throttling? This is only useful
    "on processors that don't have frequency scaling.
    # (Only works when you have /proc/acpi/processor/CPU*/throttling.)"

    ща через проводник проверил и этой папки по адресу нет(

    или это скрытый файл?

    ОтветитьУдалить
  7. В новой спецификации информация из /proc переносится в /sys:
    http://acpi.sourceforge.net/documentation/processor.html

    Смотрите параметры в этой директории.
    /sys/devices/system/cpu

    Но по моему опыту использование trottling не дает никакого выигрыша в экономии потребления энергии.

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