ทำไมการเพิ่ม“ จำนวนตัวประมวลผลเชิงตรรกะ” สำหรับ Hyper-V ที่โฮสต์โดย VM เพิ่มประสิทธิภาพของ VM


9

เพื่อความเข้าใจของฉันเครื่องเสมือน (สมมติว่าRelative Weightมีค่าเท่ากัน) จะได้รับส่วนแบ่งที่เท่ากันของโปรเซสเซอร์

เมื่อ VM ได้รับเวลาในการประมวลผลมันไม่สำคัญว่า VM จะเห็นคอร์เดียวที่จะใช้หรือหลายคอร์เนื่องจากการประมวลผลมาจากอาเรย์ของโปรเซสเซอร์บนโฮสต์ Hyper-V โดยไม่คำนึงถึง อย่างไรก็ตามเมื่อฉันตั้งNumber of logical processorsค่าจาก 1 เป็น 4 ใน Hyper-V สำหรับ VM เฉพาะฉันเห็นประสิทธิภาพเพิ่มขึ้นอย่างมาก

รายละเอียดเกี่ยวกับการตั้งค่าปัจจุบันของฉันมีประมาณ:

  • โฮสต์ Hyper-V มี RAM 32 GB, ตัวประมวลผลเชิงตรรกะ 24 ตัว (คำผิดหรือเปล่า), เนื้อที่ไม่กี่ TB

  • VM ได้รับการจัดสรร RAM 6 GB, 1 หรือ 4 คอร์, สองสามร้อย GB ของพื้นที่และรัน 2008 R2

ฉันเคยพบสิ่งที่คล้ายกันในการตั้งค่า Hyper-V ที่ผ่านมา

คำตอบ:


20

เครื่องเสมือนในไฮเปอร์ไวเซอร์ทุกตัวที่ฉันรู้จักสามารถใช้ CPU เสมือนเพิ่มเติมซึ่งกำหนดตารางเวลาเพิ่มเติมของการเรียกใช้เธรดพร้อมกัน

มันเป็นชั้นของนามธรรมที่เป็นนามธรรมระหว่างเครื่องทางกายภาพและเครื่องเสมือนที่ทำให้มันไม่ทำงานตามที่คุณอธิบาย VM ไม่ทราบว่ามีฟิสิคัลคอร์จำนวนเท่าใด VM ไม่ "เห็น" ฟิสิคัล CPU (หรือคอร์) บนเครื่องฟิสิคัล ไฮเปอร์ไวเซอร์มอบ VM จำนวนซีพียูเสมือนจริงและแขกระบบปฏิบัติการใช้ CPU เสมือนเหล่านั้นเพื่อกำหนดเธรดที่เกิดขึ้นพร้อมกันเพิ่มเติม ... จำนวน CPU เสมือนทั้งหมดที่ไฮเปอร์ไวเซอร์ส่งมอบให้กับเครื่องเสมือนอาจเกินจำนวนฟิสิคัล CPU / แกนในเครื่อง

กล่าวอีกวิธีหนึ่งว่าเครื่องเสมือนเมื่อกำหนด vCPU เดียวให้กำหนดเวลาเธรดราวกับมี CPU เพียงตัวเดียว ไม่สำคัญว่ามีกี่คอร์ในเครื่องทางกายภาพพื้นฐาน (แม้ว่าจะเป็นที่น่าสังเกตว่าเครื่องทางกายภาพอาจกำหนดเวลาให้ VM thread หนึ่งเธรดบนหนึ่งฟิสิคัลคอร์สำหรับหนึ่งเธรดควอนตัมหรือแบ่งเวลาจากนั้นเรียกใช้บนฟิสิคัลคอร์อื่นในครั้งถัดไปที่มีการกำหนดเวลา ไม่มีความคิดใด ๆ ที่เกิดขึ้นแม้ว่าทั้งหมดรู้ว่ามันสามารถกำหนดเวลาหนึ่งเธรดในแต่ละครั้งหนึ่งหลังจากที่อื่นเพราะมันมี CPU เสมือนเดียว)

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

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

มีความแตกต่างกันเล็กน้อยระหว่างวิธีที่ Hyper-V และ VMware hypervisors กำหนดเวลาเธรดเครื่องเสมือนสำหรับการดำเนินการและพวกเขาแตกต่างกันในวิธีการใช้ทรัพยากรทางกายภาพ "oversubscription" แต่นี่เป็นแนวคิดทั่วไปที่ดีในการเริ่มต้น


7
@ Flapjack00 ไม่ ... มันเป็นสิ่งที่ตรงกันข้ามกับที่ฉันพูดไป และขอให้ชัดเจนเกี่ยวกับเงื่อนไขของเราที่นี่ คุณกำหนด vCPU หรือ CPU เสมือนให้กับ VM ไม่ใช่ "แกนประมวลผล" คอร์ (ซึ่งฉันถือว่าคุณหมายถึงหน่วยประมวลผลทางกายภาพที่ใช้ซ็อกเก็ตเดียว) ไม่เท่ากับ vCPU มีชั้นของสิ่งที่เป็นนามธรรมระหว่างพวกเขา หาก VM มีการกำหนด 1 vCPU ไว้เท่านั้นมันสามารถกำหนดเวลาให้เธรดเดียวเท่านั้นที่จะเรียกใช้ในแต่ละครั้ง
Ryan Ries

1
อา! ดังนั้นในกรณีนั้น VM ที่กำหนดค่าด้วย 4 vCPU สามารถกำหนดตารางเวลาได้ 4 เธรดในครั้งเดียว สมมติว่าโฮสต์ของฉันมี vCPU เพียงพอให้ใช้งานได้เธรด 4 เธรดเหล่านั้นสามารถดำเนินการพร้อมกันได้หรือไม่
Blackjack00

1
@ Flapjack00 "สมมติว่าโฮสต์ของฉันมี vCPU เพียงพอ" - โฮสต์ไม่มี vCPU นั่นคือ VM ทำ โฮสต์มีแกนประมวลผล(หรืออย่างถูกต้องมากขึ้นตัวประมวลผลเชิงตรรกะ - แกนเดียวอาจมีตัวประมวลผลเชิงตรรกะหลายตัวเช่นเดียวกับ Hyper-Threading)ซึ่ง vCPU ได้รับมอบหมายให้
BlueRaja

2
@Dan นั่นเป็นปัญหาเฉพาะสำหรับ VMware ไม่ส่งผลกระทบต่อ Hyper-V
Jake Oshins

1
"x vCpu ต้องการล็อก Y cpu" ที่ VMware ลบออกใน ESX 3.5 ดังนั้นจึงไม่สามารถใช้กับไฮเปอร์ไวเซอร์ที่ทันสมัยได้อีกต่อไป ดังที่กล่าวไปแล้วคุณควรระมัดระวังไม่ให้ทรัพยากรที่ไม่จำเป็นกับ VMs ของคุณและ vCpu นั้นมีความสำคัญเป็นพิเศษ มีมากเกินไปและคุณจะสูญเสียประสิทธิภาพโดยรวม
pauska

3

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

ระวังอย่าให้ VMs มากเกินไปเพื่อที่จะไม่ก่อให้เกิดการโต้แย้งถ้า VM หนึ่งมีแกนประมวลผลเสมือนมากกว่าโฮสต์โฮสต์ VM จะแข่งขันกับตัวเองและในกรณีของ hypervisors ที่กำหนดเวลาไว้เช่น vmware VM จะ ไม่สามารถดำเนินการใด ๆ เลย (ตัวเลือกสำหรับ overallocate ถูกบล็อกโดยชั้นการจัดการของหลักสูตร)

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