โฮสต์ Quad Core พร้อม hyper-threading จำนวนโปรเซสเซอร์ที่จะกำหนดค่าใน VirtualBox?


10

ฉันมีโปรเซสเซอร์ Quad-Core i7 ที่มี hyperthreading (8 แกนตรรกะ) เมื่อฉันกำหนดค่าเครื่องเสมือนให้ใช้ 8 โปรเซสเซอร์ VirtualBox ให้คำเตือนแก่ฉันว่าฉันมีสี่แกนเท่านั้น (ซึ่งเป็นจริง) และนี่อาจทำให้ ปัญหาประสิทธิภาพการทำงาน แต่ไฮเปอร์เธรดเป็นคุณลักษณะของฮาร์ดแวร์ดังนั้นระบบปฏิบัติการจึงเห็น 8 คอร์และส่งคำแนะนำไปยัง 8 ทั้งหมดถ้าการตั้งค่าเป็น 4 ทำให้ VM ใช้ 2 คอร์ (4 เธรด) แทนที่จะเป็น 4 เธรดพร้อมกัน (ทั้ง 4 คอร์) )? คำเตือนที่ฉันคำนึงถึงว่าเครื่องของฉันมีเธรดมากเกินไปหรือไม่?

คำตอบ:


9

ตามมาตรฐานที่ทำโดยKristian Wedbergฉันจะบอกว่าคุณควรใช้แกนตรรกะทั้งหมดที่คุณมี
นอกจากนี้ฉันทำเกณฑ์มาตรฐานของตัวเองโดยใช้ CPU เดียวกัน (i7, 4 CPU พร้อม HT) ซึ่งยืนยันว่าการเพิ่มประสิทธิภาพสำหรับแอพพลิเคชั่นแบบมัลติเธรด หากเกสต์ PC (ชนะ 8.1 x 64) ใช้ทั้งหมด 8 คอร์ดังนั้นโฮสต์พีซี (Ubuntu x64) ก็ใช้ทั้ง 8 คอร์เช่นกัน

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่


ตกลง ฉันใช้ 4 คอร์และพบว่าใช้เวลา CPU เพียง 50% เมื่อสร้างโปรเจ็กต์ของฉัน จากนั้นทั้งๆที่คำเตือนฉันเปลี่ยนเป็น 8 ซึ่งเป็นจำนวนของแกนตรรกะการสร้างได้ใช้เวลา CPU 100% และฉันเชื่อว่ามันวิ่งเร็วกว่าเดิม
Deqing

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

8

ฉันพบว่าแม้ว่าจะเป็นไปได้ (และเร็วขึ้น) ใน VirtualBox (ประสบการณ์ของฉันคือเวอร์ชัน 5.1.0) เพื่อจัดสรร vCPU ให้กับ VM โดยใช้ตัวประมวลผลเชิงตรรกะ แต่อาจพบปัญหาภายในระบบปฏิบัติการแขกเมื่อทำงานที่โหลดสูง . ในกรณีของฉัน VM 2012 ของ Windows 2012 ที่มี 12 vCPU บนโฮสต์ 8 หลัก Ubuntu 16.04 (ที่รายงาน 16 ตัวประมวลผลเชิงตรรกะ) จะ BSOD ในระหว่างการโหลด CPU สูงด้วยข้อความแสดงข้อผิดพลาด DPC_WATCHDOG_VIOLATION การวิเคราะห์แบบ minidump โดยใช้osronline.comแสดงให้เห็นว่า e1g6032e.sys (ไดรเวอร์เครือข่าย Intel 100/1000 ซึ่งเป็นเจ้าของ Windows) เป็นสาเหตุของการละเมิด

สิ่งนี้ทำให้ฉันเชื่อว่าการจับเวลาในระบบปฏิบัติการเกสต์นั้นได้รับผลกระทบในทางลบเมื่อทำการจัดสรร vCPU ตามความสามารถของตัวประมวลผลเชิงตรรกะและการรัน VM ที่โหลดสูงเป็นระยะเวลานาน ในกรณีของฉันโหลด CPU 100% ภายใน Windows VM สักสองสามนาทีจะทำให้ BSOD หลังจากลดจำนวน vCPU เป็น 8 (ซึ่งสอดคล้องกับจำนวนฟิสิคัลคอร์ของโฮสต์) Windows VM จะไม่ BSOD อีกต่อไปภายใต้สถานการณ์โหลดสูงที่คล้ายกัน เอกสารออนไลน์จาก VirtualBox หนึ่งกล่าวว่าควรทำเช่นนี้ แต่ไม่ได้ให้เหตุผลใด ๆ

ในสภาพแวดล้อมของฉันยังมี Ubuntu VM อีกสองตัวที่กำลังทำงานแต่ละตัวมี 8 vCPU ของตนเอง โหลดได้น้อยที่สุดในเวลาที่ปัญหา BSOD ของ Windows VM


คำตอบที่ยอดเยี่ยม (พร้อมแหล่งที่มา) ขอบคุณ! สองสามปีที่ผ่านมา แต่ตอนนี้ฉันรู้ :)
แอนโธนี

2

คำเตือนที่ฉันคำนึงถึงว่าเครื่องของฉันมีเธรดมากเกินไปหรือไม่?

ใช่. หากคุณตั้งค่าจำนวนคอร์ใน VM ให้มากกว่าจำนวนที่คุณมีอยู่กระบวนการจัดตารางงานใน Virtual Box จะมอบทรัพยากร CPU ซึ่งนำไปสู่ปัญหาด้านประสิทธิภาพที่สำคัญ

ในการกระจายโหลดข้ามแกนนั่นคืองานของโฮสต์ระบบปฏิบัติการและควรทำงานในคฤหาสน์ที่ถูกต้อง


4
คุณมีข้อมูลใด ๆ ที่สนับสนุนงบของคุณหรือไม่ มีคนทำการค้นคว้าenvobi.com/post/virtualbox-hyper-threading-benchmark-surpriseและพวกเขาแนะนำให้ตั้งค่า Virtual Box CPU ให้นับจำนวนของCPU แบบโลจิคัล
Maxim Egorushkin

0

นี่เป็น VM ดั้งเดิมของเครื่องของคุณหรือไม่ บางครั้งคุณจะได้รับข้อผิดพลาดที่แปลกประหลาดถ้าคุณโคลน VM และย้ายไปยังเครื่องอื่นและ / หรือเปลี่ยนการตั้งค่า
ฉันขอแนะนำให้ดาวน์โหลดและติดตั้ง Virtual Box เวอร์ชันล่าสุดด้วยส่วนขยายล่าสุด

ฉันมีความมุ่งมั่นทั้งแปดคอร์และฉันไม่ได้รับข้อผิดพลาดกับ i7 ของฉันที่รัน VM กับ Ubuntu 13.10

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