- ยืนยันการเกิดอาการ เกมแครช จาก variable overflow ใน DOOM engine
- ทำการทดลองให้ DOOM รันต่อเนื่อง 2.5 ปี ในสภาพแวดล้อมการใช้งานจริง
- เมื่อค่าตัวแปรเพิ่มขึ้นเรื่อย ๆ จนถึงจุด overflow เกมก็ ปิดตัวลงในจังหวะที่คาดไว้
- การทดลองดำเนินในสภาพแวดล้อมรันอัตโนมัติระยะยาวโดยใช้ PDA และ DIY UPS
- การทดสอบนี้พิสูจน์ว่า ปัญหาเชิงทฤษฎี สามารถเกิดขึ้นจริงได้ในโลกความเป็นจริง
ที่มาและแรงจูงใจของการทดลอง
- เมื่อราว 2 ปีครึ่งก่อน ผู้เขียนได้อ่านบทความเกี่ยวกับโครงสร้างและการทำงานของ DOOM engine แล้วพบว่า ตัวแปรที่ใช้ติดตามการรันเดโม จะเพิ่มขึ้นต่อเนื่องทุกครั้งที่เริ่มเดโม
- แม้ว่าตัวแปรนี้จะถูกนำไปเปรียบเทียบกับค่าก่อนหน้า แต่เมื่อค่ามันเพิ่มขึ้นซ้ำ ๆ ก็ย่อมมี ความเสี่ยงที่จะ overflow แฝงอยู่ในตัว
- ในสภาพแวดล้อมการใช้งานทั่วไป การจะไปถึงจุด overflow นี้ทำได้ยาก แต่จึงตัดสินใจทดลองด้วยตนเองว่าในความเป็นจริงต้องใช้เวลานานแค่ไหน
วิธีและขั้นตอนการทดลอง
- จากการคำนวณอย่างง่าย คาดว่าต้องใช้ เวลารันประมาณ 2 ปีครึ่ง จึงจะเกิด overflow
- เพื่อยืนยันจริง จึงติดตั้ง DOOM ลงบนอุปกรณ์ PDA แล้วจ่ายไฟด้วย DIY UPS ที่ใช้แบตเตอรี่ 18650
- เชื่อมต่ออุปกรณ์ดังกล่าวเข้ากับ พอร์ต USB ของเราเตอร์ เพื่อให้ได้รับไฟ 5V อย่างต่อเนื่อง
- จากนั้นตั้งค่าให้ระบบทำงานต่อเนื่องในสภาพแวดล้อมชาร์จอัตโนมัติ แล้วปล่อยให้รันเองเกือบตลอดเวลา
การเกิดแครชและผลลัพธ์
- หลังเริ่มการทดลองไปประมาณ 2 ปีครึ่ง พบว่าเกิด ป๊อปอัปแจ้งเตือน บนหน้าจอของอุปกรณ์
- DOOM เปลี่ยนเข้าสู่สถานะ แครชแบบรุนแรงจาก overflow ตามที่คาดไว้
- ผลการทดลองพิสูจน์ว่าอาการเกมปิดตัวจาก variable overflow สามารถเกิดขึ้นได้จริงบนฮาร์ดแวร์จริงและในสภาพแวดล้อมซอฟต์แวร์จริง
บทสรุปและนัยสำคัญ
- ตอกย้ำถึงข้อควรระวังในการเขียนโปรแกรมเกี่ยวกับ ตัวแปรที่สะสมค่าเพิ่มขึ้นเป็นเวลานาน
- ยืนยันเชิงทดลองว่า ปัญหา overflow ที่เคยถูกมองว่าเป็นเพียงความเป็นไปได้ทางทฤษฎี สามารถระเบิดขึ้นได้จริงในโลกความเป็นจริง
- ช่วยกระตุ้นให้ตระหนักถึง ข้อบกพร่องที่ซ่อนอยู่ ใน legacy code หรือซอฟต์แวร์ที่ทำงานยาวนานต่อเนื่อง
ยังไม่มีความคิดเห็น