Tuesday, August 17, 2004

swsusp กับ Linux 2.6.8.1 บน Vaio-C1

แต่ไหนแต่ไรเข้าใจว่า "swsusp" ย่อมาจาก Software Suspend เพราะบนเว็บเขาเขียนไว้แบบนั้น

วันก่อนเอา Kernel 2.6.8.1 มาลองคอมไพล์บน Crusoe ดู เพราะ suspend to ram ด้วย apm -s ไม่ได้ อยากลองว่า kernel ใหม่จะใช้ได้แล้วหรือยัง ถ้าใช้ได้แล้วก็ดีเลย เพราะจะได้ไม่ต้อง reboot บ่อยๆ โปรแกรมที่เคยรันแล้วและใช้บ่อยและยังอยู่ใน cache ของ code morphing ของ crusoe มันก็จะได้เร็วอยู่ตลอด (จากที่เคยทดสอบ)

อ่านเจอในเอกสาร Documentation/power/swsusp.txt ของ 2.6.8.1 เขาบอกว่า ตอนนี้ swsusp มีสองรุ่นให้เลือกใช้ คือ

"echo 4 > /proc/acpi/sleep" calls the old version (software suspend)
"echo disk > /sys/power/state" calls the new one (swap suspend)
ถ้าของใหม่เข้ามาแทนที่เมื่อไรจะเรียก swsusp ว่า "Swap Suspend" แทน

ลองเล่นดูโดย config kernel ดังนี้

CONFIG_MCRUSOE=y
...
#
# Power management options (ACPI, APM)
#
CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y
CONFIG_PM_DISK=y
CONFIG_PM_DISK_PARTITION="/dev/hda3"
บูทขึ้นมาใหม่ ปรากฏว่าของเก่า /proc/acpi/sleep ยังมีให้เล่น แต่ไม่เห็นมี /sys/power/state ให้ลองเล่น สงสัยเขาสะกดผิด /sys ลองดูใน /proc/sys/ ก็ไม่มี power เอาไว้วันหลังค่อยหาๆดูใหม่ว่าทำไม ตอนนี้เล่น swsusp ของเก่าไปก่อนก็แล้วกัน

วิธีใช้เขาบอกว่า

In a really perfect world:
echo 1 > /proc/acpi/sleep       # for standby
echo 2 > /proc/acpi/sleep       # for suspend to ram
echo 3 > /proc/acpi/sleep       # for suspend to ram, 
                                     but with more power conservative
echo 4 > /proc/acpi/sleep       # for suspend to disk
echo 5 > /proc/acpi/sleep       # for shutdown unfriendly the system

and perhaps
echo 4b > /proc/acpi/sleep      # for suspend to disk via s4bios
แต่ก่อนอื่นต้องดูก่อนว่า เครื่องเรายอมให้ echo เลขอะไรได้บ้าง
[vuthi@crusoe ~]# cat /proc/acpi/sleep 
S0 S3 S4 S5 
แสดงว่า echo ใส่เข้าไปได้แค่ 0, 3, 4, 5 จากที่ลองดู 0, 5 ไม่มีอะไรเกิดขึ้น ส่วน 3 ได้ผลเหมือน apm -s คือ เครื่องหลับไปแต่ปลุกไม่ตื่น ตื่นขึ้นมาก็ตายไปเลย ต้องถอดสายหม้อแปลงและถ่านออก (ไม่มีปุ่ม reset ให้กด)

echo 4 ใช้งานได้ดีเลยทีเดียว แต่ก็ไม่มีอะไรใหม่ เพราะเคยใช้ได้ตั้งแต่ kernel 2.6.2 แล้ว เปิด X11 อยู่ก็ใช้ได้ resume กลับมาก็เข้า X ให้เรียบร้อยเหมือนเดิม แต่ถ้าจะให้มัน resume ต้องเพิ่ม resume=/... ใน grub.conf แบบนี้

title Fedora Core (2.6.8.1)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.8.1 ro root=LABEL=/ rhgb resume=/dev/hda3
        initrd /boot/initrd-2.6.8.1.img
ตรงนี้ต้องระวัง ถ้า suspend ไปแล้วบูทขึ้นมาโดยไม่มี resume=... มันจะบูทแบบปกติ พอถึงขึ้นตอน fsck ข้อมูลในดิสก์อาจจะเละ เพราะก่อนหน้านี้ปิดเครื่องแบบ suspend ยังไม่ได้ unmount ให้เรียบร้อย

สรุปแล้ว crusoe เครื่องนี้ยังทำ suspend to ram ไม่ได้ ต้องใช้ swsusp แบบ Hibernate ของ Windows เหมือนเดิม resume ขึ้นมาโปรแกรมทั้งหลายก็ช้าลงเหมือนเปิดเครื่องใหม่ๆแต่แรก

No comments: