ssig33.com

VAIO Pro を Linux で使う + バッテリー延命

VAIO Pro 11 を買いました。大変に軽量でよいコンピューターだと思います。鞄に入れていても「あれ PC 持ってくるの忘れたっけ」とかなること結構あります。タッチパネル着けてないので重量は 770g でさすがに軽量です。

これまでこういうふうに持ち歩くにあたって一切負担の無い重量のコンピューターは多々あったとは思うのですが、ミドルレンジ以上の性能を持っていて作業環境として十分に使用できるものは少なかったように思います。

というわけで僕は Web 系の技術者でもありますから Linux で使っていくことになります。

インストール

ここ読んどけって感じなのですが、この解説も若干古くなっているので適当に書いておきます。

Debian は stable が普通にインストールできます。 Ubuntu は 13.04 では駄目らしいので 13.10 の Daily Build を使うといいと思います。他のディストリビューションは知らん。

後述の通りインストール時には WiFi が動かないので、ネットワーク無しでインストールできるインストーラーを用意するか USB で動く Linux でサポートされてるネットワークカードを用意する必要があります。

普通にインストールできるんですが WiFi が動きません。これは Intel の 7260 というえらく新しいチップを使っていることが原因のようです。

このチップは kernel 3.11 から Linux ではサポートされています。ですが kernel 3.11 はこれ書いてる現在ではまだ RC7 とリリースされていません。当然標準で対応しているディストリビューションとかもないです。なのでビルドする必要があります。

ですが Debian 系列のディストリビューションの場合、 Ubuntu 13.10 Daily Build 用のパッケージを使用できます。ここにカーネルのパッケージ転がっているので使うと幸せになれるでしょう。

ファームウェアに関してはここに転がってますので、 /lib/firmware に入れるとよいです(ちなみにこの人めんどくさそうなブランチのカーネルをビルドしてますが今ではそんなことせずに上記のように単に 3.11 使えばいいというようになってます)。

だいたいこれで動くんですが WiFi の感度が若干悪い感じがします。感度表示が悪いだけで実際にネットワーク品質が悪いかというとそうでもないのですが。それからたまにアクセスポイントを見落すことがあります。その場合も明示的にアクセスポイント名を入れれば普通に使えます(ステルスモードの AP に繋ぎにいくような感覚になる)。

バッテリー

Linux 入れて使ってみれば分かるかと思いますが、大変にバッテリーの消費が激しいことになります。電池だと 4時間半 〜 5 時間半ぐらいしか駆動しません。 Windows だと 8 時間ぐらいは駆動するらしいのでこれはちょっとというかかなり残念です。

ですが適切に設定するとそれなりにバッテリー持つようにはなります。 tlp という恐しく高機能な省電力化ツールがあるのですが、恐しく導入がめんどうなのと、基本的に最小消費電力設定で運用してしまって問題ないので、手動でチマチマ設定しましょう。

Ubuntu 日本語フォーラムのこのトピックが大変に参考になります。僕は以下のようなスクリプトを作成しています。

#!/bin/sh
# USB の自動サスペンド
sudo sh -c "echo 1 > /sys/bus/usb/devices/usb1/power/autosuspend"
sudo sh -c "echo 1 > /sys/bus/usb/devices/usb2/power/autosuspend"
sudo sh -c "echo 1 > /sys/bus/usb/devices/usb3/power/autosuspend"

# WiFi の省電力設定
sudo iw dev wlan0 set power_save on

# サウンドまわりの省電力設定
sudo sh -c "echo 1 > /sys/module/snd_hda_intel/parameters/power_save"
sudo sh -c "echo 1 > /dev/dsp"

# laptop mode 
sudo sh -c "echo 5 > /proc/sys/vm/laptop_mode"
sudo sh -c "echo 0 > /proc/sys/kernel/nmi_watchdog"

sudo sh -c "echo 1500 > /proc/sys/vm/dirty_writeback_centisecs"
sudo modprobe -r sky2

# PCI 経由で繋がってるものの省電力設定
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:00.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:02.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:03.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:14.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:16.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1b.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1c.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1c.3/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1d.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1f.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1f.2/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:00:1f.3/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:01:00.0/power/control"
sudo sh -c "echo 'auto' > /sys/bus/pci/devices/0000:02:00.0/power/control"

# SSD が稼動してない時に SATA を最低消費電力モードにする設定
sudo sh -c "echo 'min_power' > /sys/class/scsi_host/host0/link_power_management_policy"
sudo sh -c "echo 'min_power' > /sys/class/scsi_host/host1/link_power_management_policy"
sudo sh -c "echo 'min_power' > /sys/class/scsi_host/host2/link_power_management_policy"
sudo sh -c "echo 'min_power' > /sys/class/scsi_host/host3/link_power_management_policy"

/sys/bus/pci 以下とかどんな環境でも同じ名前なのかよく分からんので自分の環境を調べてやったほうがいいです。 TLP を使うとこの辺の設定を状況に応じて動的に調整出来るようになるのですが、その設定はたいへんにめんどくさいのと、 CPU 以外は常に全て省電力設定でもパフォーマンス上の問題はないので、上記のようなスクリプトを適当にログイン時にでも実行するようにしておけばそれでいいです。

CPU の動作周波数

CPU の動作周波数についてはインストールの項で紹介したエントリにあるように i7z というユーティリティで確認することができます。しかし CPU の動作周波数を必要に応じて変更しなければ省電力を実現することは出来ません。

/sys/devices/system/cpu/cpu{0-3}cpufreq/scaling_governor というファイルに動作モードを書き込むことで CPU の動作速度を設定することが出来ます。なので僕は以下のようなスクリプトを作っています。

#!/usr/bin/env ruby
exit false unless %{ondemand powersave performance}.index(ARGV[0])
(0..3).each do |i|
  system "sudo su -c 'echo #{ARGV[0]} > /sys/devices/system/cpu/cpu#{i}/cpufreq/scaling_governor'"
end

puts "set #{ARGV[0]}"

これをパスの通っているところに cpufreq という名前とかで置いておけば

などと設定出来るようになります。バッテリ駆動なのか AC アダプタ駆動なのか判別してモード切り替えるとかもやりたきゃ比較的楽に出来ると思います。

powersave モードではだいたい 800 〜 1000MHz 程度で動作しますが、 Linux で使う限り、ブラウジング、動画の閲覧などであれば動作に問題はありません。基本 powersave にしてゲームとかやりたいときだけ performance にするとかがいいと思います。

ここまで頑張って設定すると powersave モード時にだいたいバッテリーで 7 時間 〜 7 時間半ほどは稼動するようになります。 Windows での実測値にさほど見劣りしない駆動時間が得られると言っていいと思います。

back to index of texts


Site Search

Update History of this content