เมตริกการใช้งาน CPU ทำให้ผู้ดูแลระบบเข้าใจผิดเนื่องจาก Hyperthreading และ Turbo Boost

ทีมชุมชน BigGo
เมตริกการใช้งาน CPU ทำให้ผู้ดูแลระบบเข้าใจผิดเนื่องจาก Hyperthreading และ Turbo Boost

ผู้ดูแลระบบได้พึ่งพาเปอร์เซ็นต์การใช้งาน CPU มาเป็นเวลานานเพื่อประเมินความจุของเซิร์ฟเวอร์และวางแผนการขยายระบบ สมมติฐานทั่วไปนั้นง่ายมาก หากเซิร์ฟเวอร์แสดงการใช้งาน CPU 50% ก็ควรจะสามารถรับมือกับปริมาณงานเป็นสองเท่าได้ อย่างไรก็ตาม การทดสอบล่าสุดเผยให้เห็นว่าการคิดแบบเชิงเส้นนี้นำไปสู่การคำนวณที่ผิดพลาดอย่างร้ายแรงในสถานการณ์จริง

การสำรวจความไม่แม่นยำของเมตริกการใช้งาน CPU ในการวางแผนความจุของเซิร์ฟเวอร์
การสำรวจความไม่แม่นยำของเมตริกการใช้งาน CPU ในการวางแผนความจุของเซิร์ฟเวอร์

โปรเซสเซอร์สมัยใหม่ทำลายโมเดลการใช้งานแบบเชิงเส้น

ปัญหาหลักอยู่ที่วิธีการทำงานจริงของโปรเซสเซอร์สมัยใหม่เมื่อเปรียบเทียบกับวิธีที่เครื่องมือตรวจสอบรายงานกิจกรรมของมัน เมื่อทำการทดสอบความเครียดบนโปรเซสเซอร์ AMD Ryzen 9 5900X 12 คอร์ ผลลัพธ์แสดงความแตกต่างอย่างมากระหว่างการใช้งานที่รายงานกับความสามารถในการทำงานจริง ที่การใช้งาน 50% ที่รายงาน ระบบจริงๆ แล้วกำลังทำงาน 60-85% ของงานสูงสุดที่เป็นไปได้ ขึ้นอยู่กับประเภทของปริมาณงาน

ความแตกต่างนี้จะยิ่งชัดเจนมากขึ้นกับงานที่ใช้การคำนวณหนัก การดำเนินการทางคณิตศาสตร์เมทริกซ์แสดงผลลัพธ์ที่รุนแรงที่สุด โดยการใช้งาน 50% ที่รายงานจริงๆ แล้วแทนความจุจริงของโปรเซสเซอร์ 80-100% ชุมชนได้สังเกตประสบการณ์ที่คล้ายกันในสภาพแวดล้อมการผลิต โดยผู้ดูแลหลายคนได้เรียนรู้อย่างยากลำบากว่าเซิร์ฟเวอร์จะไม่เสถียรก่อนที่จะถึงการใช้งานสูงสุดตามทฤษฎี

สรุปผลการทดสอบ

ประเภทภาระงาน การใช้งานที่รายงาน 50% ความสามารถในการทำงานจริง
CPU ทั่วไป 50% 60-65%
การคำนวณจำนวนเต็ม 64-bit 50% 65-85%
การคำนวณเมทริกซ์ 50% 80-100%
การวิเคราะห์การใช้งาน CPU เทียบกับประสิทธิภาพจริงเพื่อการจัดการ workload ที่ดีขึ้น
การวิเคราะห์การใช้งาน CPU เทียบกับประสิทธิภาพจริงเพื่อการจัดการ workload ที่ดีขึ้น

Hyperthreading สร้างความคาดหวังความจุที่ผิด

ตัวการหลักที่อยู่เบื้องหลังเมตริกที่ทำให้เข้าใจผิดเหล่านี้คือเทคโนโลยี hyperthreading โปรเซสเซอร์สมัยใหม่เช่น Ryzen 9 5900X ปรากฏว่ามี 24 คอร์ต่อระบบปฏิบัติการ แต่จริงๆ แล้วมีเพียง 12 คอร์ทางกายภาพที่มีทรัพยากรร่วมกัน เมื่อปริมาณงานใช้เธรดมากกว่า 12 เธรด เธรดเพิ่มเติมจะต้องแบ่งปันหน่วยประมวลผล แคช และส่วนประกอบอื่นๆ กับเธรดที่มีอยู่

การจัดการแบ่งปันนี้ทำงานได้ดีสำหรับงานบางประเภท แต่ให้ประโยชน์น้อยมากสำหรับงานอื่นๆ ปริมาณงาน CPU ทั่วไปอาจเห็นการปรับปรุงเล็กน้อยจาก hyperthreading ในขณะที่การดำเนินการที่ใช้หน่วยความจำมากมักไม่แสดงการเพิ่มขึ้นเลย ระบบปฏิบัติการถือว่าแต่ละ hyperthread เป็นคอร์เต็มสำหรับการคำนวณการใช้งาน สร้างภาพลวงตาของการขยายแบบเชิงเส้นที่ไม่มีอยู่จริงในทางปฏิบัติ

Hyperthread: เทคโนโลยีที่ช่วยให้คอร์โปรเซสเซอร์ทางกายภาพเดียวสามารถประมวลผลสตรีมคำสั่งหลายรายการพร้อมกันได้โดยการแบ่งปันทรัพยากรการประมวลผล

ข้อมูลจำเพาะของโปรเซสเซอร์

  • รุ่น: AMD Ryzen 9 5900X
  • คอร์ฟิสิคัล: 12
  • เธรด: 24 (พร้อม hyperthreading )
  • ความเร็วคลอกพื้นฐาน: 4.3 GHz (เมื่อคอร์ทั้งหมดทำงาน)
  • ความเร็วคลอก Boost: 4.9 GHz (เมื่อใช้งานน้อย)
  • การเปลี่ยนแปลงความเร็วคลอก: ลดลง 15% จากการใช้งานน้อยไปสู่การใช้งานสูง
ผลกระทบของ hyperthreading ต่อเมตริกการใช้งาน CPU และการประเมินประสิทธิภาพ
ผลกระทบของ hyperthreading ต่อเมตริกการใช้งาน CPU และการประเมินประสิทธิภาพ

Turbo Boost เพิ่มความซับซ้อนอีกชั้นหนึ่ง

เทคโนโลยี Turbo Boost ทำให้การวัดการใช้งานซับซ้อนยิ่งขึ้นโดยการปรับความเร็วนาฬิกาโปรเซสเซอร์แบบไดนามิกตามโหลดปัจจุบันและสภาวะความร้อน เมื่อคอร์น้อยลงทำงาน โปรเซสเซอร์สามารถรันคอร์แต่ละตัวที่ความถี่สูงขึ้น บางครั้งเร็วกว่า 15% เมื่อเปรียบเทียบกับเมื่อคอร์ทั้งหมดยุ่ง เมื่อการใช้งานเพิ่มขึ้นและคอร์มากขึ้นเริ่มทำงาน โปรเซสเซอร์จะต้องลดความเร็วนาฬิกาเพื่อจัดการความร้อนและการใช้พลังงาน

สิ่งนี้สร้างเป้าหมายที่เคลื่อนไหวสำหรับการคำนวณประสิทธิภาพ ตัวส่วนในการคำนวณการใช้งาน (รอบที่ใช้ได้ทั้งหมด) หดตัวลงเมื่อตัวเศษ (รอบที่ยุ่ง) เพิ่มขึ้น ทำให้การใช้ความจุจริงเพิ่มขึ้นเร็วกว่าการก้าวหน้าแบบเชิงเส้นที่เครื่องมือตรวจสอบแนะนำ

แนวทางการวางแผนความจุที่แนะนำ

  1. ทดสอบ Benchmark กับ Workload จริง: ทดสอบแอปพลิเคชันจริงด้วยข้อมูลและสถานการณ์ที่เป็นจริง
  2. วัดผลลัพธ์การทำงาน: ติดตามคำขอต่อวินาที ธุรกรรมที่เสร็จสิ้น หรือเมตริกที่เกี่ยวข้องอื่นๆ
  3. ตรวจสอบเวลาตอบสนอง: มุ่งเน้นที่เปอร์เซ็นไทล์ของความหน่วง ( P95 , P99 ) มากกว่าแค่ throughput
  4. กำหนดเกณฑ์แบบระมัดระวัง: ขยายขนาดที่การใช้งาน 60-70% ที่รายงานแทนที่จะรอให้ตัวเลขสูงขึ้น
  5. ใช้เมตริกเฉพาะแอปพลิเคชัน: แทนที่การใช้งาน CPU แบบทั่วไปด้วยตัวชี้วัดประสิทธิภาพเฉพาะ workload

ผลกระทบการผลิตและกลยุทธ์การแก้ไขชั่วคราว

ผลกระทบในทางปฏิบัติขยายไปไกลเกินกว่าข้อกังวลเชิงทฤษฎี ผู้ดูแลระบบรายงานว่าเซิร์ฟเวอร์ไม่ตอบสนองหรือแสดงเวลาแฝงที่ไม่สามารถยอมรับได้ก่อนที่จะถึงการใช้งาน 100% ที่รายงาน หลายคนได้เรียนรู้ที่จะขยายโครงสร้างพื้นฐานของพวกเขาเมื่อการใช้งานถึง 60-70% แทนที่จะรอเกณฑ์ที่สูงกว่า

เรื่องนี้ใกล้เคียงกับบ้านมาก ครั้งหนึ่งฉันเคยพยายามอธิบายให้ผู้จัดการฟังว่าเซิร์ฟเวอร์ที่ใช้งาน 60% ไม่มีพื้นที่เหลือเลย และพวกเขามองฉันเหมือนฉันมีสองหัว

วิธีแก้ไขที่แนะนำเกี่ยวข้องกับการเปลี่ยนโฟกัสจากเมตริกเปอร์เซ็นต์ CPU ไปสู่การวัดงานจริง วิธีการนี้ต้องการการเปรียบเทียบแอปพลิเคชันเฉพาะภายใต้สภาวะที่เป็นจริง การวัดปริมาณงานและเวลาตอบสนองจริง และการใช้เมตริกเหล่านี้แทนการใช้งาน CPU ทั่วไปสำหรับการวางแผนความจุ แม้ว่าจะซับซ้อนกว่าการตรวจสอบเปอร์เซ็นต์ง่ายๆ วิธีการนี้ให้ข้อมูลเชิงลึกที่แม่นยำเกี่ยวกับความจุระบบจริงและขีดจำกัดประสิทธิภาพ

อ้างอิง: %CPU Utilization Is A Lie