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 のページの方に書くことになりそう。
Keyword(s):[suspend2] [swsusp] [X60s] [Linux] []
References:[ThinkPad X60s]