VirtualBox: เป็นการดีที่จะกำหนดแกน CPU เสมือนมากกว่าจำนวนแกน CPU จริง


40

เนื่องจากฉันมีซีพียูที่สามารถใช้Hyper-Threadingได้ฉันสงสัยว่าเป็นความคิดที่ไม่ถูกต้องหรือไม่ที่จะกำหนดคอร์ CPU เสมือนมากกว่าจำนวนคอร์ CPU จริงตามคำแนะนำต่อไปนี้:

คำเตือน VirtualBox

สำเนา:

CPU เสมือนเพิ่มเติมถูกกำหนดให้กับเครื่องเสมือนมากกว่าจำนวนฟิสิคัล CPU บนระบบโฮสต์ นี่น่าจะลดประสิทธิภาพของเครื่องเสมือนของคุณ โปรดพิจารณาลดจำนวนของ CPU เสมือน

ใครสามารถให้เหตุผลกับหัวข้อนี้

EDIT1:

CPU ที่เป็นปัญหาคือ Intel Core i7-4700HQ, Ark Intel , CPU Benchmark

EDIT2:

สมมติว่าไม่มี HW ที่ล้าสมัยเช่น HDD (แทนที่จะเป็น SSD) และ / หรือ Low RAM (16GB นี่ขั้นต่ำvm.swappiness4GB สำหรับ VM นี้) และอื่น ๆ


2
คำเตือนมีความแม่นยำพอสมควรและไม่ควรเพิกเฉยเว้นแต่ว่าประสิทธิภาพในเวลาจริงนั้นไม่สำคัญหรือหากมีการโหลดเพียงเล็กน้อยเท่านั้น (ซอฟต์แวร์) จะถูกวางลงบนเครื่องเสมือน ดูดังนั้นอะไรคือ cpu core cores (ซึ่งต่างจาก cpu core)
agc

อย่างที่พูดกัน สิ่งต่าง ๆ อาจเร็วขึ้นจริงด้วย CPU ที่น้อยกว่าใน VM
Rui F Ribeiro

คุณไม่ควรเข้าไปในเส้นสีแดง คุณสามารถใช้ 4 "cores" บน CPU core ที่เปิดใช้งาน HT ได้จริง สำหรับ RAM คุณควรทำ RAM 50% แม้ว่าส่วนที่เป็นสีเขียวจะอยู่นอกเหนือนั้น
ทรงกระบอก

ใน Virtualbox "cores" เป็น thread ทั้งหมดดังนั้นหากคุณมี CPU ที่มี 4 cores และ Hyperthreading นั่นก็คือ 8 "cores" ดังนั้นคุณสามารถตั้งค่า virtual cores ได้ถึง 4 คอร์ใน VM เดียวถ้าคุณใช้มันเพียงอย่างเดียว นั่นคือสิ่งที่ฉันทำตลอดเวลาและใช้งานได้ดี
ทรงกระบอก

ฉันต้องพิสูจน์อะไร เส้นสีแดงสำหรับ "แกน" มากกว่า 4 แกนสำหรับฉันฉันไม่เคยไปไกลเกินกว่านี้และฉันไม่เคยเรียกใช้ VM 2 พร้อมกัน หากคุณต้องการความเสี่ยงที่จะทำให้พีซีของคุณพังโดยให้ CPU ทั้งหมดกับ VM และคุณไม่ได้ทำอะไรนอก VM มันอาจจะโอเค
ทรงกระบอก

คำตอบ:


30

ฮาร์ดแวร์ / ระบบปฏิบัติการ / ซอฟต์แวร์

ผู้ให้บริการ : Linux Mint 18 Cinnamon 64-bit (อัพเดทเต็ม) เคอร์เนลเวอร์ชัน 4.4.0-47-generic

บุคคลทั่วไป : Windows 8.1 Pro 64 บิต (อัปเดตเต็มที่)

หน่วยประมวลผล : Intel Core i7-4700HQ , (แคช 6MB, 4 คอร์ทางกายภาพหรือ 8 โดยใช้ Hyper-Threading), เกณฑ์มาตรฐานของ CPU

VirtualBox : เวอร์ชั่น 5.1.10 r112026 (Qt5.5.1)

บุคคลทั่วไปเพิ่มเติม : ติดตั้งและทันสมัย

เครื่องมือมาตรฐาน # 1 : WinRAR รุ่น 5.40 64 บิตสุดท้าย

เครื่องมือมาตรฐาน # 2 : VeraCrypt เวอร์ชัน 1.19 64 บิตสุดท้าย


การจัดเตรียม

ในทั้งสองกรณีฉันรอหลังจากบูตจนกว่า CPU, RAM, ดิสก์ไดรฟ์จะเสถียรใกล้จุดศูนย์


วิธี

  1. การโคลนเครื่องเสมือนจริงให้มีสองชุดเหมือนกัน
  2. ฉันมีสำหรับรอบที่สองเนื่องจากรีบูตโปรแกรมป้องกันไวรัสที่ปิดการใช้งานชี้ไปที่ด้านล่างของคำตอบนี้และปรับปรุง WinRAR ในทั้งสองกรณีจากรุ่นเบต้าเป็นรุ่นสุดท้าย
  3. ฉันได้เตรียมการแบบเดียวกันกับที่ได้กล่าวไว้ก่อนหน้านี้
  4. เครื่องเสมือนทำงานในเบื้องหน้าโดยไม่ต้องใช้แอปพลิเคชันหิวเวลา CPU อื่น ๆ ฉันได้ปิดการใช้งานสิ่งที่ฉันสามารถทำได้เพื่อจุดประสงค์ของการทดสอบที่ไม่ได้รับผลกระทบ
  5. เพื่อรวมการแคชที่อาจเกิดขึ้นภายในหรือภายนอกระบบฉันรันการทดสอบเดียวกันสองครั้งดังนั้น ประโยชน์ที่ได้รับเกือบจะไม่มี

ผล

WinRAR

  1. 4แกน => 7.5นาที ( เวลาที่สั้นกว่าดีกว่า)

    WinRAR พร้อมการเปิดใช้งาน 4 คอร์

    WinRAR พร้อมการเปิดใช้งาน4คอร์ประมวลผล 1.5GiB ใน7.5นาที

  2. 8 cores => 4.5นาที ( เวลาที่สั้นกว่าดีกว่า)

    WinRAR ที่เปิดใช้งาน 8 คอร์

    WinRAR พร้อมการเปิดใช้งาน8คอร์ประมวลผล 1.5GiB ใน4.5นาที


VeraCrypt

  1. 4แกน => ความเร็ว2.6ลิ่ม / s ( สูงกว่าความเร็วที่ดีกว่า)

    VeraCrypt ที่เปิดใช้งาน 4 คอร์

    เวราคริปต์ที่เปิดใช้งาน4คอร์ความเร็ว AES เร่งความเร็ว AES (AES-NI)ความเร็วHW 2.6 GiB / s

  2. 8แกน => ความเร็ว3.9ลิ่ม / s ( สูงกว่าความเร็วที่ดีกว่า)

    VeraCrypt ที่เปิดใช้งาน 8 คอร์

    เวราคริปต์ที่เปิดใช้งาน8คอร์ความเร็ว AES เร่งความเร็ว AES (AES-NI)ความเร็วHW 3.9 GiB / s


ข้อสรุป

ฉันสามารถทำการทดสอบได้มากเท่าที่จำเป็น แต่ฉันคิดว่าถ้าสองอันนี้ซึ่งหนึ่งในนั้นคือการทดสอบการบีบอัดที่ซับซ้อนค่อนข้างที่สองคือชุดของการทดสอบการเข้ารหัสที่ซับซ้อนค่อนข้างสิ่งที่จะเป็นจุด

มาตรฐานทั้งสองแสดงความแตกต่างที่ทำเครื่องหมายไว้ ฉันไม่เห็นเหตุผลที่จะเชื่อว่าผลลัพธ์ของพวกเขาไม่ถูกต้องเนื่องจากฉันทำตามการเตรียมการและวิธีการที่เข้มงวดมากยิ่งไปกว่านั้นการทดสอบเหล่านี้เกิดขึ้นใน RAM เพื่อแยกแยะปัญหาคอขวดของ I / O จากมุมมองของฉันคำเตือนที่กล่าวถึงในคำถามอาจนำไปใช้กับเงื่อนไขบางอย่าง แต่ไม่แน่นอนทั้งหมด จากการแบ่งปันกับคุณผลลัพธ์ที่น่าทึ่งเหล่านี้ฉันมั่นใจว่าคุณจะเห็นด้วยกับฉันว่าคำเตือนนี้อาจไม่ได้รับการพิจารณาอย่างจริงจังเกี่ยวกับซีพียูสมัยใหม่ที่มีHyper-Threadingกับ VirtualBox เวอร์ชันล่าสุด สิ่งหนึ่งที่แน่นอน: อย่านำฉันไปหาคำและทดสอบภายใต้เงื่อนไขของคุณเองก่อนที่คุณจะตัดสินใจใช้การตั้งค่านี้อย่างถาวร


คุณรันบน VM เดียวกันโดยมีการเปลี่ยนแปลงแกนประมวลผลหรือ VM แตกต่างกัน (แต่เหมือนกัน) สองอันหรือไม่? หาก VM เดียวกันคุณลองอีกครั้งในลำดับอื่น ๆ หลังจากนั้นเพื่อแยกแยะอิทธิพลที่เป็นไปได้ของอัลกอริทึมการแคชของระบบปฏิบัติการเกสต์
Wildcard

ลองเรียกใช้การทดสอบการเบิร์น CPU จริงเพื่อความสนุก
ทรงกระบอก

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

อีกสิ่งหนึ่งที่คุณสามารถลองได้ แต่อาจยากกว่านี้ ติดตั้ง gentoo หรือ Linux จาก Scratch VM และตรวจสอบว่ามันทำงานอย่างไรเมื่อมีการรวบรวมอย่างเข้มข้น หรือลองสร้าง Chromium ใน VM
ทรงกระบอก

@Vastastil เห็นด้วยทั้งหมด ในกรณีของฉันฉันใช้ VM สำหรับการรวบรวม C ++ (ซึ่งเป็นภาระผูกพันของ cpu) และเหตุผลเดียวที่ฉันได้ 16-core cpu คือการรวบรวมได้เร็วขึ้น คำเตือนนั้นไร้สาระสมบูรณ์โดยไม่มีคำอธิบายที่เหมาะสมและนำไปสู่ข้อสรุปที่ผิดเช่น "สิ่งต่าง ๆ อาจจะเร็วกว่าโดยใช้ CPU น้อยกว่าใน VM"
Pavel P

16

ในฐานะที่เป็นผู้ออกแบบระบบปฏิบัติการฉันเห็นด้วยอย่างยิ่งกับผลลัพธ์ของการวัด จำนวนพล่ามที่ผลิตในที่อื่น ๆ เกี่ยวกับเรื่องนี้ไม่น่าเชื่อ

ดูจำนวนแกนตรรกะที่เป็นจำนวนเธรด / กระบวนการแบบขนานที่สามารถเรียกใช้งานโดย HW ซึ่งทำได้โดยการทำซ้ำเช่นรีจิสเตอร์และพอยน์เตอร์คำสั่งของซีพียูคอร์ ตอนนี้ซีพียูคอร์เองตัดสินใจที่จะใช้เธรด (ตัวชี้คำสั่ง) มันจะตัดสินใจใช้เธรดอื่นเนื่องจากคำสั่งของเธรดปัจจุบันไม่พร้อมใช้งานในแคชและจำเป็นต้องดึงข้อมูลมาจากหน่วยความจำหรือแคช L3 กลไกนี้จะสร้างการปรับปรุงที่มีศักยภาพ 10% -30% ในคำแนะนำ / วินาทีหรือประสิทธิภาพของ CPU

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

Virtualbox จำกัด จำนวนของเธรดที่สามารถทำงานแบบขนานสำหรับแต่ละเครื่องเสมือน (VM) แต่ตัวกำหนดเวลากระบวนการโฮสต์จะเปลี่ยนหน่วยประมวลผลแบบลอจิคัลและตัวประมวลผลทางกายภาพซึ่งตัวประมวลผลทางกายภาพจะทำงานแบบไดนามิก หากคุณใช้งานแอพพลิเคชั่นที่โหลดสูงบน VM แกนหลักแบบลอจิคัลเพิ่มเติมจะให้ประโยชน์เหมือนกัน 10% -30% โหลดอาจเป็นแอพพลิเคชั่นแบบมัลติเธรดเดียวหรือชุดของแอปพลิเคชันที่แตกต่างกัน

สำหรับระบบที่ทันสมัยที่มี VT-x หรือ AMD-V จะไม่มีการปรับประสิทธิภาพสำหรับการเพิ่มจำนวนของลอจิคัลคอร์เนื่องจากไม่มีการลงโทษประสิทธิภาพที่เห็นได้ชัดเจนสำหรับการใช้งานเครื่องเสมือนมากขึ้นในเวลาเดียวกัน ขีด จำกัด ของคุณคือประสิทธิภาพของชิปซีพียูของคุณดังนั้นคุณจึงไม่สามารถแสดงวิดีโอบน 3 VMs ในเวลาเดียวกันโดยไม่ทำให้ VM แต่ละตัวช้าลงเพราะจะต้องแชร์ CPU แบบฟิสิคัลเดียวกัน

ระบบโฮสต์ของคุณอาจไม่ตอบสนองหากคุณแสดงวิดีโอบน VM ที่มีแกนตรรกะทั้งหมดอยู่ แต่คุณจะมีปัญหาเกือบเดียวกันหากคุณเรียกใช้แอปแสดงผลนั้นบนโฮสต์ของคุณ อย่างน้อยใน VM คุณมีทางเลือกและคุณสามารถแก้ไขได้ด้วยการ จำกัด การโหลดซีพียูสูงสุดถึง 80% -90% หรือโดยการลดจำนวนคอร์ด้วยเหตุผลนี้


0

สองเซ็นต์ที่ดีที่สุดของฉันคือการไม่ใช้คอร์ / เธรดทั้งหมดเพียงแค่ให้หนึ่งหรือสองโฮสต์

ดังนั้นในกรณีของคุณให้แขกหกหลักไม่เคยเป็นแกนกลาง (เพราะคุณมีเพียง 8 กระทู้ในโฮสต์)

หากจำนวนเธรดที่พร้อมใช้งาน (เพื่อไม่ให้สับสนกับแกน) บนโฮสต์คือ:

  • ถ้า <2 ดีกว่าอย่าใช้เครื่องเสมือนเลย
  • หาก 2 ให้ใช้เครื่องเสมือนในโหมด mono-core หรือเสี่ยงและใช้ dual-core guest
  • ถ้า> 2 ควรใช้สูตร

สำหรับเธรดที่มีมากกว่าสองเธรดฉันมักจะใช้สูตรนี้:

  • N = จำนวนเธรดสำหรับโฮสต์
  • M = จำนวนเครื่องเสมือนที่เกิดขึ้นพร้อมกันที่ฉันต้องการเรียกใช้ (สมมติว่ามียอดดุลเท่ากันจำนวนแกนกลางของผู้เยี่ยมชมที่เท่ากันสำหรับแขกแต่ละคน)
  • สูตร = (N-1) / M หากโฮสต์มีเพียง 4 เธรดหรือน้อยกว่า
  • สูตร = (N-2) / M หากโฮสต์มีเธรดมากกว่า 4 เธรด

ประสบการณ์ของฉันบอกฉันว่ามันราบรื่นและมีความเสี่ยงน้อยกว่าที่จะไม่ผ่านการ จำกัด สูตรดังกล่าว

คำเตือน: ไม่อนุญาตให้เปลี่ยนจำนวนแกนของแขกในขณะที่เรียกใช้แขก แต่อนุญาตให้ลดการใช้ CPU จาก 100% เป็น 75% หรือ 50% ซึ่งแขกไม่น้อยอาจล้มเหลว

ดังนั้นบางครั้งฉันมักจะให้แขกสองคน 6 หกคอร์ในโฮสต์ 8 เธรด (จำนวนของสูตรราวกับว่าแขกเพียงคนเดียวแทนที่จะเป็นแขกสองคน) แต่ จำกัด ให้ความเร็ว CPU 50% (ดังนั้นแขกทั้งสองสามารถใช้ 1 / 2 ของเวลา CPU) แต่เมื่อฉันรู้ว่าแขกจะเรียกใช้แอพที่มีอัตราส่วนมากกว่าหนึ่งอัตราส่วนเช่นภาพเปรียบเทียบ / ข้อต่อ ฯลฯ


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