Mobile From Advance

16 January 2008

WM5 กับ Compaction Thread

ศัพท์ใหม่มาอีกแล้วครับ Compaction Thread คราวนี้เป็นปรากฏการณ์เฉพาะตัวที่เกิดขึ้นกับอุปกรณ์ที่ใช้งาน ROM สำหรับเก็บข้อมูล


ในสมัยก่อนจะเป็น Windows Mobile 5 นั้น การใช้งาน ROM จำกัดอยู่เพียงเก็บตัวระบบปฏิบัติการ กับที่เหลือก็เอามาใช้เก็บข้อมูลทั่วๆไป จนมาถึงสมัยของ Windows Mobile 5 ซึ่งใช้การจัดการหน่วยความจำคล้ายกับคอมพิวเตอร์ หรือที่เรียกกันว่า Persistent Storage ต่างจากคอมพิวเตอร์เพียงเล็กน้อยคือ แทนที่จะใช้ Hard Disk ก็ใช้ ROM ทำหน้าที่แทน


และในคอมพิวเตอร์ในยุคถัดไปจากนี้ (Ultra Mobile PC - UMPC) ซึ่งน่าจะเป็นอุปกรณ์ที่มาแทน Pocket PC ก็จะใช้การจัดการหน่วยความจำในลักษณะเดียวกันมากขึ้นครับ สิ่งที่เป็นผลพลอยได้อันหนึ่งของ Persistent Storage ก็คือปรากฏการณ์ที่เรียกว่า Compaction Thread นี่เองครับ


ผลของ Compaction Thread ก็คือ จะทำให้เครื่องของเรา ทำงานช้าลงจนสังเกตได้ในบางช่วง


เหตุของ Compaction Thread ก็คือ การใช้งาน ROM ในการเก็บข้อมูลนี่เองครับ


การใช้งาน ROM (ทั้ง NOR และ NAND) ในการเก็บข้อมูลนั้น นอกจากจะไม่ใช้พลังงานในการเก็บข้อมูลซึ่งเป็นข้อดีแล้ว ยังมีผลข้างเคียงที่เกิดจากลักษณะของ ROM ด้วยครับ


ลักษณะสำคัญอันนี้ของ ROM ก็คือ การเขียนข้อมูลลงใน ROM นั้น เมื่อเขียนลงไปแล้ว หากจะลบ จะต้องใช้เวลาค่อนข้างมากครับและยังลดทอนอายุการใช้งานของ ROM ลงมากด้วย


เช่น NOR ROM นั้น จะใช้เวลานานถึงสองวินาทีในการลบข้อมูล ส่วน NAND ROM จะลบได้เร็วกว่ากันมาก แต่ทั้งคู่ ก็จะมีอายุสั้นลงทุกครั้งที่เกิดการลบ


ดังนั้น Windows Mobile 5 จึงออกแบบระบบจัดการหน่วยความจำให้หลีกเลี่ยงการลบข้อมูลใน ROM ลงให้เหลือน้อยที่สุดครับ เพื่อให้ทำงานได้เร็ว และยืดอายุการใช้งาน ROM


แนวคิดก็คือ เมื่อมีการปรับปรุงข้อมูล แทนที่จะลบข้อมูลเดิมออก แล้วเขียนข้อมูลใหม่ทับลงไป ระบบจะใช้การถ่ายข้อมูลมาไว้บน RAM, แล้วก็แก้ไข, จากนั้นก็จะเขียนลงไปใน ROM โดยเขียนในจุดอื่นที่ยังไม่ได้ใช้งาน ส่วนจุดเดิมที่ใช้ไปแล้วนั้น ก็จะกำหนดให้เป็น Invalid คือไม่ใช้งาน


ผลของการจัดการแบบนี้คือ ระบบไม่จำเป็นต้องลบข้อมูลใน ROM บ่อยๆ ซึ่งนอกจากจะทำให้ทำงานได้เร็วแล้ว ยังชลออายุการใช้งานของ ROM ด้วย เพราะไม่ต้องลบบริเวณเดิมบ่อยๆ เป็นการกระจายภาระของ ROM ให้ทั่วถึงกัน จะได้ยืดเวลาในการหมดอายุ และจะหมดอายุลงในเวลาใกล้เคียงกันทุกจุด


ROM จะแบ่งออกเป็นหลายๆ Block และแต่ละ Block จะแบ่งย่อยออกเป็น Sector โดยที่แต่ละ Sector มีขนาดประมาณ 512 Byte รวมเข้าด้วยกันเป็นแต่ละ Block ขนาดประมาณ 128 kByte ครับ


ระบบจะจัดการกับข้อมูลทีละ Sector คือเขียนลงไปใน Unused Sector แล้วกำหนด Sector เดิมเป็น Invalid Sector


ดังนั้น พอใช้งานไประยะหนึ่ง ก็จะมี Unused Sector น้อยลง ขณะเดียวกันก็จะมี Invalid Sector มากขึ้น


ถึงจำนวนข้อมูลอาจจะยังเท่าเดิมนะครับ แต่ผลของปรับปรุงข้อมูลทำให้ดูเหมือนตัวข้อมูลย้ายที่ไปจากเดิม และทิ้งร่องรอยของ Invalid Sector ไว้ และทำให้ Unused Sector ลดลง


เมื่อระบบพบว่า มี Block ไหนที่มีแต่ Invalid Sector แล้ว ก็จะจัดการลบ Block นั้นเสียทีหนึ่ง ทำให้กลายเป็น Unused sector ทั้งหมด เพื่อนำมาใช้งานต่อ
หรือหากพบว่า Block ไหนมี Invalid Sector จำนวนมาก มีข้อมูลเพียงเล็กน้อย และไม่มี Unused Sector เลย ระบบก็จะจัดการย้ายเอาข้อมูลไปไว้ที่ Block อื่น แล้วก็ลบ Block นี้เสีย นำกลับมาใช้งานต่อ


ขั้นตอนลบ Block เพื่อนำมาใช้ใหม่นี้ จะทำในขณะที่เครื่อง "เดินเบา" ครับ คือระหว่างที่เราไม่ได้ใช้เครื่อง ดังนั้นต่อให้ใช้เวลาในการลบนานเท่าไหร่ ก็จะไม่กระทบกระเทือนกับการใช้งานของเรา


โปรแกรมที่ดูแลการทำงานนี้ เราเรียกว่า Compaction Thread ครับ เป็นส่วนหนึ่งของระบบจัดการหน่อยความจำของ Windows Mobile 5
เฉพาะใน Main Memory นะครับ ไม่เกี่ยวกับใน Storage Card เช่น SD หรือ miniSD


ดูๆแล้ว ก็น่าจะโอเค ทุกอย่างดำเนินไปด้วยดีครับ


แต่หากเกิดวันดีคืนดี เราใช้งาน Pocket PC ของเราอย่างหนักชนิดไม่มีเวลาให้หายใจหายคอ ก็จะทำให้ไม่มีช่วงเดินเบาให้ Compaction Thread ทำงานด้วย ผลก็คืออาจจะเหลือ Unused Sector ไม่พอสำหรับใช้งานอีกต่อไป พอถึงตอนนี้ ระบบจะเกิดอาการ Critical Compaction ครับ คือเขาจะหยุดทำงานไปเลย ใช้กำลังของ CPU ทั้งหมดไปจัดการกับหน่วยความจำ คือย้ายเอา Sector ย่อยๆไปรวมไว้ที่ใหม่ แล้วลบ Block ที่มีแต่ Invalid Sector ออกไป


ซึ่งจะใช้เวลาสักพักหนึ่งครับ ทำให้เครื่องของเราอืดไปถนัดใจ เพราะแบ่งเวลาไปจัดการ Compaction


อาการนี้ เพื่อนบางท่านอาจจะเคยพบกันมาแล้วนะครับ ดังนั้นไม่ต้องตกใจ เป็นอาการที่เกิดขึ้นได้ครับ แต่ก็ลดความรุนแรงลงได้เช่นกัน


จากความรู้ใหม่นี้ เราจะพบว่า Compaction เกิดจากการเขียนข้อมูลหรือปรับปรุงข้อมูลนะครับ การอ่านข้อมูลเฉยๆไม่มีผลกระทบกับ Compaction


ดังนั้นหากเราไม่ปรับปรุงข้อมูลใน Main memory บ่อยๆ (ไปปรับปรุงใน SD เอาแทน) ก็จะลดความจำเป็นของการใช้ Compaction Thread ลง


และด้วยกระบวนการย้ายเอา Sector ย่อยไปไว้รวมกันเพื่อลบ Invalid Sector ทำให้กระบวนการนี้ต้องการ Unused Sector พอสมควร หากเราใช้ ROM เก็บข้อมูลหรือติดตั้งโปรแกรมไว้จนเหลือที่ว่างน้อย ก็จะทำให้มี Unused Sector น้อยลง กับมีโอกาสที่จะมี Invalid Sector มากขึ้นอีกด้วย จะทำให้ระบบต้องทำ Compaction บ่อย เครื่องจะทำงานช้าครับ


ดังนั้น เราจึงควรเหลือ Free Storage ไว้พอสมควรนะครับ อย่าใช้จนใกล้เต็ม เพื่อให้เครื่องของเราทำ Compaction ไม่บ่อยเกินไป


การแก้ Registry key ชื่อ CompactionPrio256 และ CompactionCritPrio256 ไม่ได้ช่วยให้ Compaction Thread ทำงานบ่อยน้อยลงนะครับ แทบไม่เกี่ยวกันเลย


ดังนั้น ควรเก็บข้อมูลใน SD แทนที่จะเก็บใน Main Memory เอา Main Memory ไว้ติดตั้งโปรแกรมเป็นหลัก
และเหลือ Free Storage ไว้มากๆ


จะลดความจำเป็นของ Compaction Thread ได้โดยตรงครับ

No comments: