มีข้อได้เปรียบที่แท้จริงในการกำหนด "คอร์" เพิ่มเติมให้กับ VirtualBox หรือไม่?


40

ฉันมี 2.8 Quad Core i7 พร้อม VirtualBox ฉันมีตัวเลือกในการกำหนดคอร์ถึง 4 คอร์ให้กับเครื่องของแขก แต่ฉันได้ทำสองอย่างเท่านั้น ข้อดี / ข้อเสียของการกำหนดแกนเพิ่มเติมให้กับแขกคืออะไร BTW ฉันยังสามารถเล่นสตาร์คราฟต์ 2 บนการตั้งค่าอัลตร้าตลอดทางในขณะที่ใช้ระบบปฏิบัติการของผู้เยี่ยมชมสองคน (Win 7 และ Ubuntu) และเช่นเดียวกันกับ BFBC2 (ผู้ทดสอบความเครียดของฉัน) i7 จะตอบสนองต่อโหลดไม่เท่ากันทั่วทั้งคอร์อย่างไร?

คำตอบ:


62

แกน "เสมือน" ที่คุณกำหนดให้กับ 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 มากกว่าเธรดเดี่ยวรวมกับการเพิ่มสัญญาณนาฬิกา


1
ว้าวนั่นช่วยให้ฉันเข้าใจพฤติกรรมแบบมัลติคอร์จริง ๆ ไม่ใช่แค่ส่งผลต่อ vms
Dan Allen

2
ฉันมีปัญหากับไคลเอนต์ Ubuntu 12.04 LTS ของฉันทำงานช้ามากบน Macbook Air ของฉันด้วย Dual Core 2 / GHz i7 ฉันปรับการตั้งค่าไคลเอนต์เป็นสองซีพียูและตอนนี้มันกะพริบ ฉันไม่สนใจข้อความเตือนของการตั้งค่าที่ไม่เหมาะสม
Mike Graf

มันซับซ้อนมากเนื่องจาก VirtualBox ไม่ได้ใช้ Core มันใช้ตัวประมวลผลและทุกคนมี 1 ตัวประมวลผลอาจ 2 .. ถึงแม้ว่ามันจะเป็นแบบ quad-core หรือ octa-core เว้นแต่พวกเขาจะเรียก Cores Processors?
SSpoke

0

ฉันไม่ได้เจาะลึกคู่มือในเว็บไซต์ VB แต่ฉันคิดว่าการจัดสรรคอร์ให้กับเครื่องเกสต์จะทำให้ Guest OS เห็นหลายคอร์ดังนั้นจึงอนุญาตให้แอปพลิเคชันที่สามารถใช้ประโยชน์จากคอร์เสริมเหล่านั้นด้วยความเร็วที่เพิ่มขึ้น / พลังงาน / ประสิทธิภาพเช่นเดียวกับที่ใช้กับโฮสต์ระบบปฏิบัติการ

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