ไม่กี่วันก่อน ผมรีวิว Firefox 3.1 Beta 3 ดีน่ารัก: JavaScript เร็วขึ้น, ฟีเจอร์ usability และ privacy ใหม่, รองรับ HTML5 multimedia แต่ไม่ได้พูดถึง Memory Usage
เพราะเหตุผลที่ดี: วัด Memory Usage ของแอปพลิเคชันยากมาก สูงสุดได้แค่ประมาณการ สוביเจกติ ขึ้นกับปัจจัยจำกัด คนส่วนใหญ่ดูค่าตรงๆ จาก Task Manager, Process Explorer, ps ถึงจะว่าเป็นตัววัดเดียว
บทความนี้ทำ 2 สิ่ง: 1) ตอบตรงๆ ว่า Firefox 3.1 Beta ใช้หน่วยความจำมาก/น้อยกว่าปัจจุบัน 2) สอนเรื่อง Memory Management แบบ Geeky
เน้น Linux เพราะเจาะลึกได้ง่ายกว่า แต่ Windows ก็ครอบคลุม
ทำไมคำตอบง่ายจึงยาก
OS เป็นสิ่งมีชีวิต พารามิเตอร์หลายพันตัวเปลี่ยนทุกวินาที เหมือนถาม "มนุษย์หายใจอากาศเท่าไหร่?" ขึ้นกับ CPU, RAM, Process ที่รัน, Priority, Antivirus, Firewall, Toolbars, Plugins ฯลฯ ทุกคนได้ผลต่างกัน
ผลทดสอบนี้ต้องเก็บเกลือมาก ตัวเลขสัมบูรณ์ ไม่มีความหมาย อาจได้ผลตรงข้ามกัน ทบทวนนี้เป็นแค่สัญญาณประมาณ
ตัวอย่างจริง
ที่ทำงานเดิม บังคับรัน McAfee Antivirus ทำให้ Firefox ตอบสนองช้า ลองปิด Antivirus → Response time ลด 2/3, Memory Usage ลดครึ่ง เพราะ Antivirus ก็ Filter เนื้อหาเว็บทุกหน้า Antivirus, Firewall, Content Checker, Toolbars, Plugins ทั้งหมดส่งผลต่อพฤติกรรมเบราว์เซอร์
ทดสอบต้องควบคุมเข้มงวด: ทดสอบ Short/Long term, Single/Multiple tabs, Render images/Scripts vs Static HTML, Idle 12 ชม. vs Cold Start, Downloading ฯลฯ ทุกเวอร์ชันอย่างน้อย 2 รอบ
Memory Usage บน Linux
Test Case: Linux Mint 6 Felicia, Virtualized บน Intel Core Duo, 512MB RAM, Firefox ไม่มี Add-ons ยกเว้น Default Theme ใช้ System Monitor
Firefox 3.0.3: 24.4MB
Firefox 3.1 Beta 3: 29MB (เพิ่ม 19% Cold start, Single tab)
ตัวเลขเหล่านี้บอกอะไร?
บน Linux แอปมักจอง Memory ไว้แม้ไม่ใช้ (โดยเฉพาะ Java) Pre-allocate แล้วคืนเมื่อ Process อื่นขอ → Static figure ไม่บอกอะไร ต้องลบส่วนเกินออก ต้อง Hog Memory ทั้งหมด (512MB) แล้วคืน → ต้องใช้ Memhog
Memhog
Utility เรียบง่าย: จอง Memory แล้วคืน บังคับ Process ทั้งหมดปล่อย Reserved Memory ที่ไม่ใช้ ลดเหลือขั้นต่ำที่จำเป็น
Linux Mint ไม่มีใน Repo แต่ Compile เองได้:
gcc -Wall memhog.c -o memhog
รัน: ./memhog <memory>

รัน Firefox → วัด → รัน Memhog → วัดอีกครั้ง ใช้ ps aux ดู VSZ (Virtual Size) และ RSS (Resident Set Size)
Memory Usage ที่ ps รายงาน (กับ Memhog)
Firefox 3.0.3: VSZ 165MB, RSS 65MB (Cold start) → หลัง Memhog: VSZ คงที่, RSS ลดเหลือ 16.5MB
Firefox 3.1 Beta 3: VSZ 189MB, RSS 53MB → หลัง Memhog: RSS 39MB Firefox 3.1 จองน้อยกว่าตอนเริ่ม แต่ Baseline สูงกว่า (Features เพิ่มขึ้น → Memory เพิ่ม, แต่ Red Greedy น้อยลง)
CPU Usage: Firefox 3.1 น้อยกว่า 3.0 (4.7% vs 7.7%, 3.3% vs 4.2% → ปรับปรุง 27-64%) → เบากว่า ตอบสนองเร็วกว่า แต่จับ Real Memory มากกว่า
Memory Maps
ดูที่ /proc/<pid>/maps Firefox 3.0.3: 455 Maps, Firefox 3.1 Beta 3: 472 Maps (สมเหตุสมผลเพราะ Features เพิ่ม)
Memory Usage ภายใต้ Stress (YouTube Flash)
Firefox 3.0.3: Memory คงที่ 163MB (40MB Real), CPU 5.5%
Firefox 3.1: Memory 194MB (57MB Real), CPU ~11% → Flash ยังไม่ Optimize สำหรับ Beta (Engine Revamped ใหม่)
OOM Score
OOM Score: Kernel ให้คะแนน Process ไหนจะ Kill ก่อน หาก RAM หมด คะแนนต่ำ = ดี ดูที่ /proc/<pid>/oom_score
Firefox 3.0.3: คะแนนแทนๆ ก่อน/หลัง Memhog → ใช้ Memory ฉลาด
Firefox 3.1 Beta 3: คะแนนใกล้เคียง → Kernel จัดการทั้งคู่เท่าๆ กัน
Mini Conclusion: Firefox 3.1 ต้องการ Memory มากกว่า (App ใหญ่กว่า, Features มากกว่า) แต่ CPU น้อยกว่า → Snappier Flash ยังต้องปรับปรุง (Adobe + Mozilla ร่วมกัน)
Memory Usage บน Windows
Test Case: Windows XP SP3, Virtualized บน AMD Athlon 3700+, 768MB RAM, Embedded Theme, Firefox 3.0.7 ไม่มี Extensions
ใช้ Task Manager และ Process Explorer (Sysinternals)
Task Manager
Firefox 3.0.7: ~34MB
Firefox 3.1 Beta 3: ~31MB (น้อยกว่าเล็กน้อย 3MB) Single tab
Process Explorer
Firefox 3.0.7: Working Set 54MB, Virtual Size 114MB, Private Bytes 43MB (Baseline)
Firefox 3.1 Beta 3: Working Set 34MB, Virtual Size 95MB, Private Bytes 25MB → น้อยกว่า ~20MB ต่างจาก Linux มาก
สรุป
Linux: Firefox 3.1 ใช้ Memory มากกว่าเล็กน้อย แต่ CPU น้อยกว่า → Snappier
Windows: Firefox 3.1 ใช้ Memory น้อยกว่า ~20MB → ควรเร็วกว่า
แต่ตัวเลขเหล่านี้ ไม่มีความหมาย! Windows และ Linux จัดการ Memory ต่างกัน Linux Pre-allocate มาก แล้วคืน Windows เพิ่มตาม Demand สอดคล้องกับพฤติกรรม OS ทั่วไป
ทั้งคู่ Firefox 3.1 คาดว่าจะเร็วกว่า Firefox 3 (JS Performance +30%, CPU น้อยกว่า) Footprint ต่างกันแค่ไม่กี่สิบ MB ไม่ง้อใช้งานจริง Flash บน Linux ยัง Under-optimized
อย่าเชื่อผลลัพธ์นี้มากเกินไป ทดสอบมีข้อบกพร่อง จำกัดโดยการออกแบบ แต่เรียนรู้เครื่องมือ Geeky ได้: memhog, ps, maps, OOM score → คุ้มค่า!
ขอให้สนุก!