понедельник, 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. мышка теперь спит круглосуточно...

    ОтветитьУдалить
  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 не дает никакого выигрыша в экономии потребления энергии.

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