การวัดโหลดซีพียูที่มีไฮเปอร์เธรด


12

ฉันจะรับการใช้งานที่แท้จริงของ cpu ที่เปิดใช้งานแบบมัลติคอร์แบบหลายเธรดได้อย่างไร

ตัวอย่างเช่นให้พิจารณาซีพียู 2 คอร์ซึ่งแสดงคอร์เสมือน 4 คอร์

เวิร์กโหลดเธรดเดียวจะแสดงเป็น 100% ในtopเนื่องจากแกนหลักเสมือนหนึ่งคอร์ถูกใช้อย่างสมบูรณ์ CPU และtopทำงานได้ตามที่คาดหวังเช่นจะมี 4 คอร์จริง

อย่างไรก็ตามด้วยสองเธรดสิ่งที่ได้รับคือ: ถ้าทุกอย่างทำงานได้ดีพวกเขาจะมีความสมดุลกับคอร์ที่แท้จริงสองคอร์ดังนั้นเราจึงมีการใช้งาน 200%: สองเท่า 100% และสองคอร์เสมือนว่างและใช้พลังงาน CPU ที่มีอยู่ทั้งหมด . ดูเหมือนว่าตกลงกับฉัน

อย่างไรก็ตามหากเธรดสองเธรดรันบนแกนประมวลผลจริงเดียวเธรดเหล่านั้นจะปรากฏขึ้นโดยใช้สองเท่า 100% ซึ่งจะทำให้การใช้งานแกนประมวลผลเสมือน 200% แต่ในด้านของจริงนั่นจะเป็นหนึ่งคอร์ที่ใช้พลังงานร่วมกันในสองเธรดซึ่งจะใช้ซีพียูเพียงครึ่งเดียว

ดังนั้นหมายเลขการใช้งานที่แสดงโดยtopไม่สามารถใช้เพื่อวัดปริมาณงาน CPU ทั้งหมด

ฉันยังสงสัยว่าการทำไฮเปอร์เธรดสร้างความสมดุลของสองเวอร์ชวลบนแกนจริง หากสองเธรดใช้จำนวนรอบที่แตกต่างกันแกนประมวลผลเสมือนจะ 'ปรับ' เพื่อให้ทั้งคู่แสดงโหลด 100% แม้ว่าโหลดจริงจะแตกต่างกันหรือไม่


1
คุณเข้าใจหรือไม่ว่าระบบตัวดำเนินการนั้นไม่ได้ตระหนักถึงความแตกต่างระหว่างแกนประมวลผลเสมือนจริงแบบ hyperthreading กับแกนหลักจริงใช่ไหม?
Ramhound

ดูเหมือนเป็นเช่นนั้น แต่มันไม่จำเป็นต้อง? การแมปจริงกับแกนเป็นแผนที่ที่เรียบง่ายหนึ่งถึงสอง ปัญหาคือวิธีการวัดโหลดบนแกนประมวลผลเสมือนจริงซึ่งเปลี่ยนประสิทธิภาพที่มีอยู่โดยการกำหนดเวลาไว้กับแกนอีกแกนหนึ่งจริง แต่ฉันคิดว่าข้อมูลทั้งหมดเป็นคำถามที่เป็นเครื่องมือที่ได้รับผลที่เหมาะสมจากพวกเขา
dronus

1
ฉันแค่อยากจะมีการวัดโหลดที่ 100% จะหมายถึงว่าทุกรอบของทุกแกนที่แท้จริงถูกนำมาใช้
dronus

1
พูดง่ายๆ: จะบอกได้อย่างไรว่าซีพียูของฉันจะสามารถทำงานต่อไปได้โดยไม่ทำให้การทำงานต่อเนื่องช้าลง?
dronus

1
@ แรมฮาวด์ดังนั้นถ้าฉันมีหน่วยประมวลผลแบบฟิสิคัลแบบ 4 คอร์ที่มี 8 คอร์แบบลอจิคัลและค่าเฉลี่ยการโหลดของฉันบอกว่า 4.00 ฉันใช้งานแบบ 100% หรือ 50% หรือไม่
Buttle Butkus

คำตอบ:


5

Martin Tegtmeier ที่ Oracle ได้เขียนบล็อกโพสต์ที่น่าสนใจเกี่ยวกับปีที่แล้ว: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

คำตอบสั้น ๆ ; Hyperthreading ยุ่งกับความสามารถของผู้ใช้ในการรายงานเปอร์เซ็นต์ cpu-Utilization / cpu-idle โดยรวม

ในกรณีที่เลวร้ายที่สุดซีพียู 2-core 4-virtual-core ที่รัน 2 เธรดที่ 100% -utilisation-per-core เกือบจะทำให้ซีพียูอิ่มตัว (ขึ้นอยู่กับการใช้พอร์ตการประมวลผลเฉพาะเธรดที่ใช้ทรัพยากรการคำนวณที่แตกต่างกันอย่างสิ้นเชิงบน cpu เท่านั้นที่สามารถทำงานได้โดยไม่ส่งผลกระทบต่อประสิทธิภาพการทำงานของเธรดปัจจุบัน) อย่างไรก็ตามด้านบนจะยังคงใช้งาน 50% ในกรณีนี้


1
ลิงค์การทำงานปัจจุบัน: blogs.oracle.com/partnertech/ …
JánLalinský

4

การใช้ประโยชน์หลักแตกต่างจากโหลดบนระบบมาก การใช้ประโยชน์แกนประมวลผลเป็นการแสดงให้เห็นว่าแกนประมวลผลกำลังคำนวณอะไรหรือรอคำแนะนำ อาจเป็น 100% ซึ่งสอดคล้องกับเวลาใดก็ตามที่ CPU คำนวณบางอย่าง

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

ในระบบ Linux ค่าเฉลี่ยการโหลดเป็นค่าที่คำนวณได้เพื่อวัดประสิทธิภาพโดยรวมของระบบ ค่าของโหลดเฉลี่ยควรเปรียบเทียบกับทรัพยากรการคำนวณแบบขนานแกนที่เฉพาะเจาะจง ดังนั้นหากระบบที่มี 4 ฟิสิคัลคอร์มีค่าเฉลี่ยการโหลด 4 หรือมากกว่านั้นเราสามารถพูดได้อย่างปลอดภัยว่ากระบวนการบางอย่างจะรอทรัพยากร

ไม่สำคัญหากการใช้งาน CPU เท่ากับ 100 หรือ 10 เปอร์เซ็นต์ ค่าเฉลี่ยการโหลดอาจสูงถึง 200 หรือ 300 ในกรณีเหล่านี้ระบบจะตอบสนองแทบจะไม่

ในค่าเฉลี่ยภาระเซิร์ฟเวอร์เซิร์ฟเวอร์สภาพการทำงานปกติไม่ควรเกินจำนวนแกนในระยะเวลานาน แหลมสั้นไม่สำคัญในความคิดของฉัน 3 ตัวเลขซึ่งคุณจะเห็นในwผลลัพธ์คือโหลด av เป็นเวลา 1/5/15 นาที


0

ในความคิดของฉันไม่มีคำตอบข้างต้นเป็นที่น่าพอใจ

ฉันคิดว่าบทความที่ฉันอ้างถึงลิงก์ต่อไปนี้มีการกำหนดเป้าหมายอย่างดีเพื่อตอบคำถามนี้: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

อ้างอิง:

แนวคิดเบื้องหลัง HT คือการอนุญาตให้เธรดแอปพลิเคชันอื่นทำงานในขณะที่แอปที่กำลังรันอยู่ เนื่องจากการคาดคะเนผิดสาขาฟองในท่อเป็นต้นเพื่อให้เป็นไปได้ต้องมีพอร์ตอื่นหรือ AS register ระบบจะเห็นการลงทะเบียนนั้นเมื่อเปิดใช้งาน HT อย่างไรก็ตามระบบปฏิบัติการ (และห่วงโซ่อาหารจนถึงเครื่องมือที่สมบูรณ์แบบที่คุณใช้อยู่) คิดว่ากำลังการผลิตของโปรเซสเซอร์สองเท่าคือ CPU 100% ที่แต่ละพอร์ต AS

แต่ภายใต้ประทุนที่มียังคงเป็นเพียงหนึ่งหน่วยการดำเนินการ: เดียวทางกายภาพหลักคุณเริ่มต้นด้วยก่อนที่จะ HT ถูกเปิดใช้งาน ความแตกต่างคือมันถูกใช้ร่วมกันระหว่างพอร์ต 2 AS อย่างใดอย่างหนึ่ง วิธีการที่แกนเดี่ยวได้รับการสลับระหว่างสองพอร์ตนั้นซับซ้อนมาก แต่เข้าใจได้ง่ายที่สุดในแง่ของการจัดลำดับคิว ฉันไปที่ระดับรายละเอียดในชั้นเรียน GCaP ของฉัน

การวัดการทดสอบที่ดีที่สุดที่ฉันมีบ่งชี้ว่าแต่ละพอร์ต HT ไม่สามารถทำได้มากกว่า 75% ไม่ว่างโดยเฉลี่ยหรือ 150% ของความจุทั้งหมดที่คาดว่าจะได้ 200% ตามระบบปฏิบัติการ ความจุ "ที่หายไป" 50% ที่ฉันอ้างถึงก่อนหน้านี้เป็นภาพลวงตา Intel ได้อ้างว่ามีบางอย่างที่อยู่ในช่วง 120% ถึง 130% สำหรับแอปพลิเคชันทั่วไป

ในความเป็นจริงฉันค่อนข้างมั่นใจว่าระบบปฏิบัติการสามารถเข้าถึง 100% ในแต่ละคอร์เสมือนได้ไม่ต้องสงสัยเลย ฉันเพิ่งทำ:

mvn clean install -DskipTests -T 5

และฉันสามารถรับรองคุณได้ถึง 8 คอร์เสมือนและคอร์ฟิสิคัล 4 คอร์ทั้งหมดใช้งาน CPU 100% และแน่นอนฉันไม่มี 8 คอร์ในเครื่องของฉัน

เรื่องสั้นสั้น ๆ คุณสามารถสมมติสิ่งต่อไปนี้ถ้าภาระของ CPU ทั้งหมดเกินกว่า 100% ที่คุณเป็นมากที่สุดและเป็นไปได้ค่อนข้างแม่นยำโดยใช้ 100% ของคอร์ทางกายภาพ Menas นั้นถ้าคุณมีฟิสิคัล CORE 1 แบ่งออกเป็นระบบปฏิบัติการ CPU 1 และ CPU 2 และใน CPU 1 คุณมีการใช้งานรวม 50% และบน CPU 2 คุณมีการใช้งานรวม 50% ซึ่งเป็นไปได้มากที่สุดในชีวิตจริงของคุณ สร้างแรงกดดันให้กับการใช้งานทั้งหมด 100% บน CPU นั้น คุณทำมันจนเต็มแล้ว

แต่แน่นอนว่าระบบปฏิบัติการในเครื่องมือตรวจสอบระบบไม่มีความคิดที่จะขายภาพลวงตาให้คุณ จาก prespective ของระบบปฏิบัติการและวิธีการจัดการทรัพยากรมันก็จะเชื่อว่า eeach ของทั้งสองแกนเสมือนยังคงว่าง 50 เปอร์เซ็นต์ดังนั้นหากมีงานที่ต้องดำเนินการมากขึ้นมันจะพยายามกระจายมันอย่างสม่ำเสมอทั่วทั้งสองแกน . ดังนั้นเมื่อคุณใช้งาน CPU มากกว่า 100% ในระหว่างช่วงเวลาของการใช้งาน CPU จะมีการจัดคิวงานให้ทำงานในช่วงเวลานั้นเสมอซึ่งไม่เคยมีการเปลี่ยนแปลงใด ๆ ในที่สุดมันก็จะได้รับ แต่ก็มีเธรดบางตัวที่ไม่ได้ทำงานแม้ว่าจะมีกำหนดให้รันก็ตาม

ขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.