การปรับแต่งเซิร์ฟเวอร์ Tablebase

การแก้ปัญหา tail latency
  • เซิร์ฟเวอร์ Syzygy tablebase แบบ 7 ตัวหมากมีปัญหาในการรองรับคำขอระหว่างที่ทำการตรวจสอบความถูกต้องของ RAID
  • เปลี่ยนไปใช้แนวทางใหม่โดยใช้ dm-integrity กับ LVM เพื่อให้ตรวจสอบแบบแมนนวลทุกครั้งที่อ่านบล็อกข้อมูล
  • ตั้งค่าเซิร์ฟเวอร์เครื่องที่สองเพื่อทดสอบ benchmark สำหรับการย้าย tablebase ขนาด 17 TiB โดยไม่มี downtime
ฮาร์ดแวร์คอนฟิกใหม่
  • RAM 32 GiB
  • 2 x 201 GiB NVMe (เซิร์ฟเวอร์เดิมไม่มีพื้นที่ SSD)
  • 6 x 5.46 TiB HDD (เซิร์ฟเวอร์เดิมมีดิสก์เพียง 5 ลูก)
  • ระบบปฏิบัติการ: Debian bookworm
ความสำคัญของการมอนิเตอร์
  • ใช้ RAID 5 เพื่อกู้คืนได้เมื่อดิสก์เสีย 1 ลูก และกระจายการอ่านแบบสุ่มไปยังดิสก์ทุกลูก
  • การทดสอบเบื้องต้นดูเหมือนประสิทธิภาพใช้ได้ แต่พบจากการมอนิเตอร์ว่าดิสก์ไม่ได้ทำงานอย่างสม่ำเสมอเท่ากันทุกลูก
ผลลัพธ์ benchmark
  • เซิร์ฟเวอร์ได้รับคำขอ 10~35 รายการต่อวินาที
  • ทำการทดสอบ benchmark โดยบันทึกคำขอจำนวน 1 ล้านรายการ
  • เวลาในการตอบสนองเฉลี่ยรวดเร็ว แต่ tail latency สูง
  • pread ให้ประสิทธิภาพดีกว่า mmap
เปรียบเทียบ mmap กับ pread
  • mmap: แมปไฟล์เข้ากับหน่วยความจำเพื่อจัดการการอ่านดิสก์แบบโปร่งใส แต่จัดการข้อผิดพลาดได้ยาก
  • pread: รายงานข้อผิดพลาดการอ่านผ่านค่าที่ส่งกลับจาก system call
  • เหตุผลที่ pread ทำได้ดีกว่าอาจเป็นเพราะบล็อกข้อมูลที่แมปกับหน่วยความจำอาจข้ามขอบเขตของ page และทำให้เกิดการอ่านดิสก์ 2 ครั้ง
ผลเสียย้อนกลับของ POSIX_FADV_RANDOM
  • การใช้ POSIX_FADV_RANDOM เป็นการส่ง hint ให้ระบบปฏิบัติการทราบว่าการเข้าถึงไฟล์เป็นแบบสุ่มเพื่อลดแรงกดดันต่อ page cache แต่ในทางปฏิบัติกลับให้ผลตรงกันข้าม
  • รูปแบบการเข้าถึง tablebase อาจไม่ได้เป็นแบบสุ่มจริง
การใช้พื้นที่ SSD ที่มีจำกัด
  • เพื่อใช้พื้นที่ SSD ให้คุ้มค่า จึงเก็บ sparse block length list และ block length list ไว้บน SSD เพื่อรับประกันว่าจะมีการอ่านจากดิสก์ช้าอย่างมากไม่เกิน 1 ครั้ง
  • ใช้ RAID 0 แทน RAID 1 โดยยอมสละความซ้ำซ้อนเพื่อปรับประสิทธิภาพให้เหมาะสมที่สุด
การทำให้การอ่านขนานกัน
  • เพื่อให้ส่วนติดต่อผู้ใช้แสดงค่า DTZ สำหรับทุกการเดิน ค่าเฉลี่ยของคำขอหนึ่งครั้งจะก่อให้เกิด WDL probe 23 ครั้งและ DTZ probe 70 ครั้ง
  • ลด tail latency ได้ด้วยการทำคำขอแบบขนาน
ประสิทธิภาพในสภาพแวดล้อมจริง
  • ยืนยันได้ว่าการปรับแต่งในสถานการณ์ benchmark ช่วยได้จริงในสภาพแวดล้อมการใช้งานจริง

# สรุปโดย GN⁺

  • บทความนี้กล่าวถึงกระบวนการปรับแต่งเซิร์ฟเวอร์ tablebase ของ Lichess
  • มีการทดลองหลายแนวทางเพื่อลด tail latency และตรวจสอบประสิทธิภาพด้วยการทดสอบ benchmark
  • ครอบคลุมหัวข้ออย่างการเปรียบเทียบ mmap กับ pread, ผลเสียย้อนกลับของ POSIX_FADV_RANDOM, การใช้พื้นที่ SSD และการทำให้การอ่านขนานกัน
  • บทความนี้อาจเป็นประโยชน์สำหรับนักพัฒนาที่สนใจการปรับแต่งเซิร์ฟเวอร์ และมีโครงการที่มีความสามารถคล้ายกัน เช่น Stockfish

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น