คู่มือเกมแลค › L11 ดิสก์
ดีเลย์จาก seek ของ HDD HDD seek latency
ID สาเหตุ dk-hdd · ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ อินฟรา DB (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
HDD ต้องเลื่อนหัวอ่านไปบนจานแม่เหล็ก (seek) การอ่านเขียนข้อมูลที่กระจัดกระจายจึงใช้เวลาเกือบ 10 ms ต่อครั้ง
ทำไม ใช้ HDD บนเซิร์ฟเวอร์เก่าหรือสตอเรจราคาถูก → ผลคือ อ่านเขียนแบบกระจัดกระจายครั้งละประมาณ 10 ms → บนหน้าจอ เซฟและโหลดช้าโดยรวม
- อาการ
- อินพุตดีเลย์
- ปัจจัย
- ความหน่วง
- ใครเจอ
- ทั้งเซิร์ฟเวอร์
- เกิดเมื่อไร
- ตลอดเวลา
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ อินฟรา DB (ทีมอินฟรา), พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
- งานฝั่งทีมพัฒนาเกม
- ออกแบบให้เน้นการเขียนแบบต่อเนื่อง (sequential write)
- งานฝั่งทีมอินฟรา
- เครื่องเซิร์ฟเวอร์/OS: เปลี่ยนเป็น SSD (เริ่มจากดิสก์เก็บข้อมูลที่อ่านเขียนแบบกระจัดกระจายมาก) เครื่อง DB: เปลี่ยนดิสก์ DB ที่อ่านเขียนแบบกระจัดกระจายมากที่สุดเป็น SSD ก่อน
- บนกราฟ
- สูงตลอดตั้งแต่แรก · ดีเลย์การอ่านและเขียนดิสก์ (r_await, w_await)
- จุดที่ต้องดู
- ใช้ lsblk -d -o NAME,ROTA ตรวจว่าเป็นดิสก์หมุน (HDD) หรือไม่ และดู r/s, w/s, r_await และ w_await จาก iostat -x 1 ถ้าเป็น VM ให้ตรวจประเภทดิสก์จากสเปกของคลาวด์หรือสตอเรจ
- สัญญาณว่าใช่
- เป็นดิสก์หมุน และแม้คำขอต่อวินาทีอยู่แค่ระดับหลายสิบถึงร้อยกว่า r_await และ w_await ก็อยู่ที่หลาย ms ถึงหลายสิบ ms ตลอด
- สัญญาณว่าไม่ใช่
- เป็น SSD แต่ดีเลย์สูง: ให้ดูคิวดิสก์อิ่มตัว (dk-iops) หรือ burst credit หมด (dk-burst)
- วิธีตรวจ
- ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)
แหล่งอ้างอิง
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
seek ดิสก์หนึ่งครั้ง 10 ms, อ่านแบบต่อเนื่อง 1 MB จากดิสก์ 20 ms - Exos X18 Data Sheet Seagate
HDD 7,200 rpm มี rotational latency เฉลี่ย 4.16 ms, อ่านแบบสุ่ม 4K ได้ 170 IOPS - lsblk(8) — Linux manual page util-linux
-o เลือกคอลัมน์ที่จะแสดง, คอลัมน์ topology ของอุปกรณ์มี ROTA (เป็นดิสก์หมุนหรือไม่) - ABI stable symbols Linux kernel
/sys/block/(ดิสก์)/queue/rotational: บอกว่าอุปกรณ์เป็นแบบหมุนหรือไม่หมุน - iostat(1) — Linux manual page sysstat
-x: r/s, w/s, r_await, w_await (เวลาประมวลผลเฉลี่ยต่อคำขอ รวมเวลาที่รอในคิว)
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L11 ดิสก์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (อินพุตดีเลย์)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง