2013년 11월 18일 월요일

ThinkPad L410에서 tp_smapi : 배터리 관리

ThinkPad 랩탑에 추가된 하드웨어 (accelometer와 독자적인 EC회로)가 있어서, 이를 통해 배터리 전원관리, 하드 디스크 충격 보호, 팬조절 등을 할 수 있습니다.
이러한 추가된 하드웨어나 기능을 위해 독자적인 규격인  SMAPI (System Management Application Program Interface)가 있습니다.

리눅스에서는 커널모듈 thinkpad_acpi, thinkpad_ec, tp_smapi, hdaps로 이러한 하드웨어에 접근할 수 있습니다.
ThinkPad에 리눅스를 설치하면, 일반적인 컴퓨터의 ACPI같이 thinkpad_acpi는 제대로 올려집니다.
hdaps와 tp_smapi는 사용자가 직접 설정을 해야하는 경우가 있습니다.
Debian 리눅스에서 tp_smapi 모듈이 올려질 때 thinkpad_ec가 같이 올려집니다
ThinkPad L410 모델을 사용하면서 배터리 전원관리는 완벽하지는 않지만 잘 되나,
하드 디스크 충격 보호는 에러로 사용하지 못하고, 팬 조절은 내장된 EC회로에서 하는 것이 좋아보여 그대로 사용중입니다.

새로운 ThinkPad 랩탑이 나올 때 SMAPI도 조금 바뀌거나 개선되므로 모델마다 차이가 있으며, 바이오스가 새로 개정될 때에도 변화가 있습니다. ThinkPad L410도 바이오스를 업데이트를 한 후에 설정이 원할하였습니다.

# dmidecode -t 11
SMBIOS 정보와 Embedded Controller가 있는지 알 수 있습니다.

HDAPS (Hard Drive Active Protection System)
랩탑에 내장된 가속센서(accelerometer)가 충격이 감지하여, 하드디스크의 헤드를 파킹하여 보호하게 됩니다.
Solid State Disk (SSD)는 물리적인 헤드가 없으므로 해당되지 않습니다.
리눅스 커널에 hdaps가 있으나, tp-smapi-dkms를 설치하면 커널보다 향상된 hdaps가 설치됩니다.
내장된 가속센서(accelerometer) -> hdaps -> sysfs interface -> hdapsd 과정을 거쳐서, hdapsd가 하드 디스크 헤드 파킹을 하게 됩니다.

그러나 L410에서 하드디스크 충격보호기능은 사용하지 못하였습니다.
부팅시에 아래의 에러가 보이며, 모듈 thinkpad_ec tp_smapi 조차도 올려지지 않았습니다.
thinkpad_ec: thinkpad_ec_read_row: failed requesting row: (0x11:0x00)->0xfffffff0
hdaps init failed at: hdaps_get_ec_mode failed
직접 임의로 /etc/modprobe.d/hdaps.conf를 만들어 install hdaps /bin/false으로 기록하여 hdaps를 사용하지 않게 한 후, 리부팅해도 같은 에러가 보이며 모듈 thinkpad_ec tp_smapi도 올려지지 않았습니다.
결국에는 하드웨어 리셋(배터리 및 전원 빼고, 전원버튼 30초 이상 눌러 노트북안에 남은 전기를 모두 방전하게 함) 한 후에,
/etc/modprobe.d/hdaps.conf가 있는 상태에서 새로 부팅해야  thinkpad_ec tp_smapi이나마 정상적으로 올려집니다.

참고로 HDAPS는 랩탑에 내장된 가속센서 뿐 아니라, 이에 맞게 하드 디스크 자체에도 알맞게 헤드를 파킹하는 기능이 있어야 합니다. 일반적인 헤드 파킹이 아닌 하드 디스크의 firmware에서 HDAPS에 맞게 지원이 필요하다고 합니다.

tp_smapi
커널 모듈인 tp_smapi를 설치하면 랩탑의 배터리를 관리할 수 있습니다.
일반적으로 리듐이온 배터리는 저온 상태에서 사용해야 수명이 오래가고, 완전 충전이나 완전 방전시에 배터리 수명이 짧아진다고 합니다.
온도는 어쩔 수 없더라도, 배터리 용량의 40%에서 80%에서 충전과 방전을 하는 것이 배터리 수명을 늘린다고 합니다.

tp_smapi는 ThinkPad 랩탑에 내장된 하드웨어에서 얻은 정보를 /sys/devices/platform/smapi/에 보여주며,
반대로 /sys/devices/platform/smapi/에 사용자가 변경한 정보를 하드웨어에 전달합니다.
  • 설치.
    # aptitude install tp-smapi-dkms
    # echo tp_smapi >> /etc/modules

    이제 부팅시 tp_smapi 모듈이 올려지며, 의존 모듈인 thinkpad_ec도 같이 올려집니다.

    # echo "install hdaps /bin/false" > /etc/modprobe.d/hdaps.conf
    위의 HDAPS 문제로 사용하지 않게 하였습니다.

    # echo "35" > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    이렇게 하면 배터리가 35%이상인 상태에서는 충전이 되지 않고, 배터리 전원이 아닌 AC 전원을 사용하게 됩니다.
    확인은  /sys/devices/platform/smapi/BAT0/state를 보면 idle이 AC 전원을 사용중인 상태입니다.
    이렇게 정한 값은 다시 부팅을 하여도 유지가 되나, 배터리를 뺐다 끼우거나 교체하면 새로 설정해주어야 합니다.
    자주 교체하는 경우에는 script를 만들어 update-rc.d하거나 sysfsutils을 설치하여 /etc/sysfs.conf에 설정하여 부팅시마다 설정이 되도록 하는 것이 필요할 수 있습니다.
ThinkPad L410에서 start_charge_thresh와 stop_charge_thresh가 따로 따로 설정이 안되는 문제가 있습니다.
start_charge_thresh를 설정하면 stop_charge_thresh 값이  바뀌고,
반대로 stop_charge_thresh를 설정하면 start_charge_thresh가 바뀝니다.
배터리 충전 횟수를 줄이기 위해 start_charge_thresh만 사용중입니다.

thinkfan
추가로 fan control을 직접 조절할 수 있는데, EC회로에서 자동으로 하는 것과 특별한 차이가 없어서 설정을 안하고 사용중입니다.
/sys/module/thinkpad_acpi/parameters/fan_control 값이 N 으로 EC회로에서 자동으로 조절하여 사용중입니다.
fancontrol 하려면 아래와 같이 설치한 후,
# apt-get install thinkfan
/etc/default/thinkfan.conf 에서  START=yes
/etc/modprobe.d/thinkfan_acpi.conf 에서 options thinkpad_acpi fan_control=1
CPU와 하드디스크 온도에 따라 팬 조절을 추가로 설정하면 됩니다.

댓글 없음: