1. ภาพรวม
- สรุปคำจำกัดความ การวินิจฉัย วิธีรับมือ และแนวทางป้องกันอาการ thrashing ที่เกิดขึ้นในแคชของระบบไฟล์ ZFS (ARC)
2. ความหมายของ ZFS ARC thrashing
- แนวคิด: การที่ cache hit ล้มเหลวต่อเนื่อง ทำให้เกิดการสลับเปลี่ยนรายการในแคช (eviction) บ่อยครั้ง และส่งผลให้ประสิทธิภาพของระบบลดลงแทน
- ผลกระทบ: ในสภาพแวดล้อม I/O ประสิทธิภาพสูง (เช่น เซิร์ฟเวอร์ฐานข้อมูล) อาจก่อให้เกิดปัญหาบริการขัดข้องรุนแรงได้
3. อาการสำคัญที่ใช้วินิจฉัย
- ค่า CPU
iowait สูงเกิน 20% ต่อเนื่อง
- อัตราการใช้ CPU ใน
system mode เพิ่มขึ้นเมื่อเทียบกับปกติ
- อัตรา cache hit ลดลง (ควรเทียบกับข้อมูลในภาวะปกติ)
- อาการชี้ขาด: หากเธรดเคอร์เนล
arc_prune, arc_evict ใช้ CPU เกิน 90% ถือว่าเป็น thrashing อย่างแน่นอน
4. แนวทางรับมือเร่งด่วน
- การดำเนินการ: ล้างแคชของระบบไฟล์ Linux ด้วยตนเอง
- คำสั่ง:
echo 3 > /proc/sys/vm/drop_caches
- ผลลัพธ์: ลบทั้ง page cache และ slab object พร้อมกัน
- ลักษณะเฉพาะ:
- ข้อมูลที่ยังไม่ถูกเขียนลงดิสก์ (dirty item) จะยังคงอยู่ จึงไม่มีการสูญหายของข้อมูล (ไม่ทำลายข้อมูล)
- หลังรันทันที ประสิทธิภาพอาจลดลงชั่วคราวจนกว่าแคชจะถูกเติมกลับมาใหม่
5. การป้องกันที่ต้นเหตุ
- สาเหตุ: ขนาดแคช ARC ที่จัดสรรไว้ไม่เพียงพอเมื่อเทียบกับเวิร์กโหลดของระบบ
- ขนาด ARC (
zfs_arc_max):
- ค่าเริ่มต้นมีขนาดใหญ่ถึง 1/2 ของหน่วยความจำระบบอยู่แล้ว (อิงตาม Linux)
- อาจก่อให้เกิดการแข่งขันใช้หน่วยความจำกับแอปพลิเคชันอื่น จึงไม่สามารถเพิ่มขึ้นแบบไม่ยั้งคิดได้
- วิธีแก้ไข:
- หากแอปพลิเคชันอื่นใช้หน่วยความจำสูง ให้ลดค่า
zfs_arc_max เพื่อหลีกเลี่ยงการแข่งขัน
- หากต้องการแก้ปัญหาที่ต้นเหตุอย่างแท้จริง วิธีที่แน่นอนที่สุดคือเพิ่มหน่วยความจำกายภาพ (scale-up)
ยังไม่มีความคิดเห็น