แกน "เสมือน" ที่คุณกำหนดให้กับ VM นั้นมีอยู่เพื่อใช้ในการประมวลผลหลายอย่างภายในไคลเอ็นต์ระบบปฏิบัติการ หากคุณกำหนดหนึ่งคอร์ให้กับ VM ดังนั้นระบบปฏิบัติการ guest ไม่สามารถแจกจ่ายโหลดข้ามหลายคอร์ได้ ดังนั้นสมมติว่าเป็นสถานการณ์จริง:
โฮสต์กับ 4 CPU แขกรับมอบหมาย 1 CPU
- เครื่องโฮสต์ที่รัน 4 ฟิสิคัลคอร์
- ระบบปฏิบัติการไคลเอ็นต์ภายใน VM ที่กำหนด 1 คอร์
ในกรณีนี้ guest OS จะสามารถใช้งานได้เพียงแกนเดียวเท่านั้น ดังนั้นหากคุณใช้แอพพลิเคชั่นแบบมัลติเธรดซึ่งปรับขนาดได้ดีในหลายคอร์แอปจะยังคงทำงานบนแกนเดียวเท่านั้น ดังนั้นเธรดทั้งหมดบนเกสต์ OS ต้องแชร์ฟิสิคัลคอร์หนึ่งแกน
การรันเกสต์ OS ในการตั้งค่านี้ซึ่งโหลด CPU อย่างเต็มที่จะให้โหลด CPU ของโฮสต์ OS ที่ ~ 25% (หนึ่งใน 4 คอร์ที่โหลดบนโฮสต์)
แน่นอนคุณยังสามารถใช้งาน CPU ที่ต้องใช้งานได้ภายในโฮสต์ระบบปฏิบัติการของคุณและใช้ประโยชน์จาก 3 คอร์ที่เหลืออยู่
โฮสต์ที่มี 4 CPUs แขกที่ได้รับมอบหมาย 4 CPU
- เครื่องโฮสต์ที่รัน 4 ฟิสิคัลคอร์
- ระบบปฏิบัติการไคลเอ็นต์ภายใน VM ที่กำหนด 4 คอร์
ในกรณีนี้คุณสามารถรันแอพพลิเคชั่นแบบมัลติเธรดที่ปรับขนาดได้อย่างดีภายใน guest VM ซึ่งสามารถใช้งาน CPU เสมือนทั้ง 4 ตัวได้อย่างเต็มที่ VirtualBox จะใช้ 4 ฟิสิคัลคอร์เพื่อประมวลผลงานที่กำหนดภายใน VM และดังนั้นโหลดซีพียูโฮสต์ของคุณจึงสามารถใช้งานได้สูงสุด 100%
ดังนั้นสิ่งที่คุณควรเลือกการตั้งค่า?
คำตอบของคำถามนี้ขึ้นอยู่กับว่าคุณต้องการทำอะไร ในบางกรณีอาจเป็นประโยชน์ในการกำหนดแกนทั้งหมดให้กับ VM หรือแม้แต่การเรียกใช้ VM หลายตัวที่มีจำนวน CPU ทั้งหมดที่กำหนดแต่ละค่า ในกรณีเช่นนี้ VM สามารถใช้ประโยชน์อย่างเต็มที่จากพลังการประมวลผลทั้งหมดของโฮสต์ หากมีการมอบหมาย CPU เพิ่มเติมให้กับ VM มากกว่าที่มีอยู่จริงจริงแล้ว VMs จะได้รับผลกระทบจากการโหลดบน VM ที่แตกต่างกัน เพื่อป้องกันสิ่งนี้คุณอาจอุทิศคอร์บางตัวให้กับ VM ที่เฉพาะเจาะจง ตัวอย่างเช่นการเรียกใช้ 2 VMs ที่มี 2 CPU ที่ได้รับมอบหมายแต่ละรายการบน 4 คอร์โหนดสามารถช่วยให้แต่ละ VM ได้รับ 2 CPU ที่ทุ่มเท (สมมติว่าไม่มีโหลดที่กำหนดโดยโฮสต์ระบบปฏิบัติการซึ่งใช้เวลาส่วนหนึ่งในการประมวลผลด้วย)
มันมีผลกระทบทางลบต่อโฮสต์ของฉันในการกำหนดคอร์ทั้งหมดให้กับ VM หรือไม่?
อีกครั้งนี้ขึ้นอยู่กับการใช้งานซอฟต์แวร์ หากคุณเรียกใช้ VM ซึ่งไม่ได้ใช้งาน (ไม่มีโปรแกรมที่ใช้ CPU มากเลย) โหลดที่กำหนดโดย VM นี้จะอยู่ใกล้กับ 0% คุณสามารถเรียกใช้ 10 VMs แบบขนานและยังคงประสบกับโหลดโฮสต์ CPU ใกล้เคียงกับ 0% หาก VMs ทั้งหมดไม่ได้ทำงาน
CPU ทำงานอย่างไรกับการโหลดที่ไม่สม่ำเสมอ
การกระจายโหลดซีพียูอย่างมากขึ้นอยู่กับองค์ประกอบในระบบปฏิบัติการเฉพาะที่เรียกว่าตัวกำหนดตารางเวลา สำหรับ Windows XP ตัวจัดตารางเวลาพยายามที่จะปัดเศษโหลดแกน CPU ทั้งหมด ดังนั้นการรันภารกิจแบบเธรดเดียวที่มีการโหลดแบบเต็มบน CPU แบบ quad-core จะให้ผลการโหลด ~ 25% สำหรับแต่ละคอร์
น่าเสียดายที่สิ่งนี้ได้พิสูจน์แล้วว่าไม่ดีสำหรับการจัดการพลังงานของ CPU ที่ทันสมัย สำหรับระบบที่ทันสมัยมันยังเป็นข้อได้เปรียบหากหนึ่งคอร์เดียวถูกโหลดสูงสุด 100% ก่อนที่คอร์ที่สองจะเข้ามาเกี่ยวข้อง เหตุผลก็คือตราบใดที่มีโหลดไม่เพียงพอที่จะใช้แกนกลางจนเต็มแกนอื่น ๆ ก็จะยังคงอยู่ในโหมดสลีปลึกเพื่อประหยัดพลังงานและลดการกระจายความร้อน
สำหรับซีพียูบางตัวเช่น Intel Core i-Series และ AMD รุ่นใหม่ (Bulldozer) สิ่งนี้น่าสนใจยิ่งกว่าเพราะในกรณีที่มีการใช้งานเซ็ตย่อยของคอร์ที่ไม่ได้ใช้งานเท่านั้น สิ่งนี้จะช่วยลดการใช้พลังงานของ CPU ทั้ง (Intel และ AMD) เริ่มใช้งบประมาณการใช้พลังงานความร้อนและพลังงานเพื่อโอเวอร์คล็อกแกนที่ใช้งานอยู่ ดังนั้นสิ่งนี้สามารถให้แอปพลิเคชันแบบเธรดเดียว (ซึ่งไม่สามารถแจกจ่ายไปยังหลายคอร์เพื่อทำงานในแบบขนาน) เพิ่ม อย่างไรก็ตามเมื่อแกนทั้งหมดมีการใช้งานเทคโนโลยี "เพิ่ม" เหล่านี้ส่วนใหญ่จะมีผลเพียงเล็กน้อยต่อกำลังการประมวลผลเนื่องจากสถานการณ์ "ทุกแกนใช้งานอยู่" นั้นเป็นสถานการณ์ที่ CPU ออกแบบมาอย่างแท้จริง
ดังนั้นคำตอบก็คือ Core i7 ของคุณจะจัดการโหลดไม่สม่ำเสมอบนแกนเดี่ยวและอาจให้ประสิทธิภาพที่เพิ่มขึ้นสำหรับแอพพลิเคชั่นแบบเธรดเดี่ยว อย่างไรก็ตามการเพิ่มขึ้นนี้อยู่ในช่วงไม่กี่เปอร์เซ็นต์ในขณะที่แอพพลิเคชั่นแบบมัลติเธรดซึ่งสามารถกระจายโหลดข้ามหลายคอร์ซีพียูสามารถเพิ่มขึ้นได้ด้วยปัจจัย (x2 ในอัลคอร์แบบ dual-core, 4x บน quad-core ... ) . ดังนั้นมัลติเธรดจึงให้พลังงานมากกว่าในแง่ของการรวมพลังของ CPU มากกว่าเธรดเดี่ยวรวมกับการเพิ่มสัญญาณนาฬิกา