한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › L7 OS ของเซิร์ฟเวอร์ (เคอร์เนล)

หยุดชะงักจาก memory reclaim และ compaction Memory compaction / reclaim stalls (THP)

ID สาเหตุ so-reclaim · ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

โปรเซสจะหยุดชะงักระหว่างที่ OS ทำ compaction หน่วยความจำเพื่อสร้างเพจขนาดใหญ่ (huge page) หรือเรียกคืนหน่วยความจำให้ว่าง (reclaim)

ทำไม หน่วยความจำว่างเหลือน้อย หรือฟีเจอร์ huge page (THP) สั่ง compaction หน่วยความจำ → ผลคือ เธรดที่ขอหน่วยความจำต้องรอจนการ reclaim หรือ compaction เสร็จ → บนหน้าจอ เซิร์ฟเวอร์ค้างเป็นพัก ๆ แบบไม่สม่ำเสมอ (ไม่กี่ ms ถึงหลายร้อย ms)

อาการ
ค้าง, กระตุก
ปัจจัย
การหยุดชะงัก
ใครเจอ
ทั้งเซิร์ฟเวอร์
เกิดเมื่อไร
ยิ่งเปิดไว้นานยิ่งเป็น, สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
ลดการจัดสรรหน่วยความจำก้อนใหญ่ระหว่างรัน (จองไว้ล่วงหน้าตอนเริ่มแล้วใช้ซ้ำ)
งานฝั่งทีมอินฟรา
ตั้งให้ใช้ huge page (THP) เฉพาะส่วนที่ร้องขอ (madvise), เพิ่มเกณฑ์หน่วยความจำว่างขั้นต่ำ (vm.min_free_kbytes เป็นต้น)
บนกราฟ
พุ่งแบบสุ่มเป็นครั้งคราว · เวลาต่อทิกของเซิร์ฟเวอร์, PSI ของหน่วยความจำ
จุดที่ต้องดู
some และ full ใน /proc/pressure/memory (สัดส่วนเวลาที่หยุดรอหน่วยความจำ) และค่าที่เพิ่มขึ้นของ compact_stall ใน /proc/vmstat ดูคู่กับเวลาต่อทิกของเซิร์ฟเวอร์ และตรวจค่า /sys/kernel/mm/transparent_hugepage/defrag
สัญญาณว่าใช่
ตอนที่ทิกพุ่ง PSI ของหน่วยความจำสูงขึ้นและ compact_stall เพิ่มขึ้น defrag ตั้งเป็น always
สัญญาณว่าไม่ใช่
PSI และ compact_stall ไม่ขยับ: ไม่ใช่สาเหตุนี้ ถ้าการใช้ swap เพิ่มขึ้น ให้ดู “สวอป”
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)

แหล่งอ้างอิง

  1. Transparent Hugepage Support Linux kernel
    ถ้า defrag=always เมื่อจัดสรร THP ไม่สำเร็จจะ reclaim และ compaction หน่วยความจำทันทีตรงนั้นและหยุดรอ, madvise จะทำแบบนั้นเฉพาะส่วนที่ร้องขอ
  2. Documentation for /proc/sys/vm/ Linux kernel
    min_free_kbytes: เกณฑ์หน่วยความจำว่างขั้นต่ำ (watermark) ที่เคอร์เนลกันไว้
  3. PSI - Pressure Stall Information Linux kernel
    some (สัดส่วนเวลาที่งานบางส่วนหยุดรอหน่วยความจำ) และ full (สัดส่วนเวลาที่งานทั้งหมดหยุด) ใน /proc/pressure/memory

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L7 OS ของเซิร์ฟเวอร์ (เคอร์เนล)

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (ค้าง)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง