suspend (ThinkPad X60s)

ThinkPad X60s での suspend to disk (hibernation)について、現状のまとめ

software suspend (swsusp) に加え software suspend2 もできるようになりました。( revised 2006/Aug )

まともに調べていません :p が、suspend2 の方が performance が良い気がします。多分。

(安直に X60s を使うには、何もしなくても様々な機能が使える SuSE 10.1 が良いかもしれません。ただ、SuSE では swsusp が採用されています。)

software suspend 2を使うには

kernel 2.6.19-rc1 で、ahci patch が取り込まれたようです。併せて kernel 中での SATA driver の場所が SCSI -> ATA に変わっています。

tar jxf linux-2.6.19-rc1.tar.bz2
cd linux-2.6.19-rc1
bzip2 -dc suspend2-2.2.8.1.patch.bz2 | patch -p1
make menuconfig
make bzImage .....

kernel config はconfig_2.6.19-rc1+suspend2.gz

suspend するには、hibernate script を使うのが簡単で便利です。

software suspend (swsusp)を使うには

SUSE の kernel patch 群や kernel ML に流れていた sata がらみの patch などを眺めて、適当に merge した patch を kernel (2.6.16.x)に当てて suspend to disk できるようにしました。merge したパッチ: patch.swsusp_2.6.16.12,patch.swsusp_2.6.16.20

tar jxf linux-2.6.16.12.tar.bz2
cd linux-2.6.16.12
patch -p1 < ~/patch.swsusp_2.6.16.12
make menuconfig && make bzImage && make modules && make modules_install

kernel config は config_2.6.16.12.gz 。 それから grub.conf(menu.lst) には以下のように記述。

 title Plamo-4.2
 root (hd0,6)
 kernel (hd0,6)/boot/bzImage root=/dev/sda7 ro resume=/dev/sda6 vga=0x317

suspend するには、

echo "good night"
chvt 1
sleep 2
echo shutdown > /sys/power/disk; echo disk > /sys/power/state
sleep 2
chvt 7
echo "good morning!"

のようなスクリプトを走らせる。(sleep は不要かもしれない)

現在(2006/Aug)は、上記のような swsusp の patch を当てなくても suspend できるかもしれません。元々 suspend2 の方が好きなので、今後は swsusp について(記載しない|調べない)可能性が大です。

以下は購入時からの時系列に沿ったメモ

Plamo 上で、ちょうどリリースされた kernel 2.6.16 + suspend2 2.2.1 を試してみたら、、、hibernate からの resume 時に

Suspend2 2.2.1: Swapwriter: Signature found.
Suspend2 2.2.2: Resuming enabled.
Reading kernel & process data...
Failed to initialise the Suspend2 Compressor filter.
Failed to read pageset 1.
Suspend2 2.2.1: Sanity check error
VFS: Cannot open root device "sda5" or unknown-block(8,5)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,5)

んーーー?おかしいな?root partition が scsi 的な SATA だから initrd が必要なのかなぁ。でも普通の boot up はできるんだけどなぁ。

mkinitrd をインストールして、initrd を設定してみたんだけど、何も変わらないなぁ。。。

boot loaderの問題かもと思って、grub-0.93 -> 0.97にしてみたが関係なし。。。

kernel 2.6.16-git6 + suspend2 2.2.1.1-git を試す。kernel panic は無くなった。が、resume はうまくいかない。

今回は hibernate スクリプトを使っているのだが、これを使わずに直接 /proc/suspend2 以下を操作することで、resume がうまくいきそうな気配。。。実は hibernate script を使うのは今回が初めて。人様が書いた script を何も調べずに使うのは、やはりいけないということですね。

kernel 2.6.16 + suspend2-2.2.2.1 を試す。resume で失敗する。swapwriter でも、filewriter でもだめ。resume 時の Reading caches の後で止まっている模様。

echo 7 > /proc/suspend2/default_console_level
echo 12 > /proc/suspend2/debug_sections

とかして、より詳しい情報を取得してみると

pnp: Device 00:08 does not supported activation.
pnp: Device 00:09 does not supported activation.
Reading caches...
Reading caches...
ata1: handling error/timeout
ata1: port reset, p_is 0 is 0 pis 0 cmd 4017 tf d0 ss 113 se 0
ata1: status=0x50 {DriveReady SeekComplete }
sda: Current: sense key=0x0
     ASC=0x0 ASCQ=0x0

で止まった。sata 周りか。。。(エラーに何となく記憶があると思いゴソゴソ探してみると、LibrettoL2のメモで少し似たようなエラーをみたことがあったからだった。昔のことなのに結構覚えてるなー。)

さらに kernel をいじっていると、今度は、

Reading caches...
Reading caches...
Uhhuh. NMI received. Dazed and confused, but trying to continue
You Probably have a hardware problem with your RAM chips
ata1: port reset, p_is 20000000 is 1 pis 0 cmd 4017 tf d0 ss 113 se 0
ata1: status=0x50 { DriveReady SeekComplete }
sda: Current: sense key: No Sense
      Additional sense: No additional sense information
Decompression yielded 1 bytes instead of 4096.
Kernel panic - not syncing: Failed to read chunk 0/17589 of the image. (-5)

となってしまった。もしかして、memory の問題だった???

裏蓋を開けて、memory を確認してみる。ふむふむ、ELPIDA のメモリーか。ん???メモリーがきちんと刺さってないじゃん!!!何たることだ。刺し直して、suspend/resume してみると、メモリーのエラーはなくなった。(Kernel panic にはなるけど。)

物理メモリーがきちんと装着されていなかったということは、これまで作業した全てがかなり怪しいと思わざるを得ないなぁ。がっくり。orz... → というわけでシステムを入れ直す。

memtest でテストした結果、問題は見つからず。

しかしながら相変わらず resume 時に失敗する。ata1 を handle できていないようだ。関係あるかどうかわからないが、ここ↓の情報が役立つかも。

http://www.thinkwiki.org/wiki/Problems_with_SATA_and_Linux

うぅーーーん。ごく稀に、resume に成功することがある(2.6.16 + suspend2-2.2.1)のだけれど、再現性がない。。。こういうのは原因を探しにくいので嫌だなぁ。エラーの内容からいって、SATA の制御周りに問題が潜んでいそうなのだが、、、

お、今日付け(4/8)で、SATA 用のファームウェアアップデートが出ている。も、もしかしたら、、、、 はずれでした。orz...

あれから時間が過ぎましたが、状況は改善していません。(仕事が忙しいので腰を据えていじる時間がないのですが、)現在の組合せは kernel 2.6.17-rc2 + suspend2-2.2.5 です。resume 時(reading caches)に SATA の handling error で止まります。ToT

お!つい最近の kernel ml に関連するスレッド("sata suspend resume...", Apr 19 2006 〜)があるじゃないかー。まさしく同じ問題ではまっている話だ!このスレッドの内容は、suspend2 に関するものではなく、software suspend に対するものでした。そこの記述にしたがって、同様のことをやってみたけれど、やはり resume 時に失敗してしまいます。うーん。。。

suse の kernel src をとってきて、その中の patch 群から必要そうなものをピックアップする。それを kernel 2.6.16.12 に適用することで、suspend/resume に成功している。ただ、resume 直後 load avg. がえらく上がっているのが気になります。(しばらくすると落ち着きますが。) 一方、suspend2 の方はしばらくペンディングすることに。

(2006/Jul/22) Nigel さんの転職で停滞していた suspend2 ML ですが、Nigel さんの仕事が落ち着いたのか、しばらく前から suspend2 MLが再び活発になっています。X60s での suspend2 も近々できるようになるでしょう。(X60s で suspend to disk, suspend to ram 共にできているという報告も流れてます。)

このところ多忙で suspend2 patch を全く follow できていません。仕事が一段落したら検証してみるつもりです。個人的には、suspend2 の方が好きなので。

(2006/08/14) suspend2 ができるようになりました。(^o^)/ 仕事が一段落したので、suspend2 を再び試してみました。 7月半ばに linux-ide ML に流れていた SATA の AHCI 周りの patch ( http://marc.theaimsgroup.com/?l=linux-ide&m=115277002327654&w=2 ) を kernel 2.6.18-rc2 に当てた上で、suspend2 patch 2.2.7.4 を。 software suspend (swsusp) と比較して、suspend/resume に要する時間が短いですし、resume 後に load avg. が異常に上がることもないようです。また何度か suspend/resume してみましたが安定しています。 ( swsusp でsuspend/resume が遅いのは、swsusp が single cpu にしないと動かないからかもしれません、未確認ですが。)

(2006/09)上述の AHCI 周りの patch は、kernel 2.6.18-rc6 でも適用可能。

(2006/09/20) kernel 2.6.18 + ahci patch + suspend2-2.2.8 でも ok

(2006/10/06) kernel 2.6.19-rc1 + suspend2-2.2.8.1。 kernel 2.6.19-rc1 で ahci patch が merge された模様。同時に SATA driver が SCSI 配下から ATA 配下に変わっている。kernel configuration を変更すること。

(2006/10/12) メモリーを 512MB から 1GB に。suspend2 はもちろん問題なく使えます :-)

(2006/12/01) kernel 2.6.19 + suspend2-2.2.9-for-2.6.19-rc6。

(2007/02/17) kernel 2.6.20 + suspend2-2.2.9.7-for-2.6.20。

(2007/03/29) kernel 2.6.20.4 + suspend2-2.2.9.10-for-2.6.20。

(2007/04/18) kernel 2.6.21-rc7 + suspend2-2.2.9.12-for-2.6.21-rc6。たまには kernel config を保存しておこう。→config_2.6.21-rc7+suspend2.gz

(2007/05/20) kernel 2.6.22-rc1 + suspend2-2.2.10。あわせて、hibernate-script-1.95, suspend2-userui-0.7.1 に。

(2007/05/25) kernel 2.6.21.3 + suspend2-2.2.10。

(2007/06/26) kernel 2.6.21.5 + suspend2-2.2.10.1。kernel config が若干変わった。config_2.6.21.5+suspend2-2.2.10.1

(2007/06末) Sony VAIO TZ90 を入手したので、このページの更新頻度は下がりそうです。 今後suspend2 に関しては TZ90 のページの方に書くことになりそう。

Last modified:2007/06/28 13:05:59
Keyword(s):[suspend2] [swsusp] [X60s] [Linux] []
References:[ThinkPad X60s]