วิธีปฏิบัติที่ดีที่สุด: vCPU ต่อหนึ่งคอร์ที่มีอยู่จริง


27

ฉันกำลังพยายามค้นหาเอกสารหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับการจำลองเสมือนที่เกี่ยวกับการจัดสรร vCPU ต่อฟิสิคัลคอร์ (ของ CPU) หากเป็นเรื่องสำคัญฉันกำลังดู vmWare สำหรับการนำ virtualization ไปใช้ ตัวอย่างเช่น Intel Xeon CPU อาจมีคอร์ที่ 4, 8 และอื่น ๆ ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการจัดสรรมากกว่าหนึ่ง vCPU ต่อหนึ่งคอร์ที่มีอยู่จริง ผู้ขายที่ฉันกำลังพูดถึงคิดอย่างแน่นอนว่าสามารถจัดสรรแกนเดียวให้กับ vCPU หลาย ๆ ตัวได้

สิ่งที่ฉันเห็นโดยทั่วไปในการวิจัยของฉันคือ "ดีขึ้นอยู่กับใบสมัครของคุณ" และในกรณีนั้นแอปพลิเคชันของฉันคือการแก้ไขรหัสการรวบรวม / การเชื่อมโยงการทดสอบและการจัดการการกำหนดค่า แน่นอนว่า VMs ทั้งหมดไม่จำเป็นต้องได้รับการกำหนดค่าด้วย vCPU หลายต่อแกน แต่ในกรณีทั่วไป

คำตอบ:


24

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

โปรดจำไว้ว่าใน VMware การใช้งาน CPU แสดงเป็น MHz ที่ใช้ไม่ใช่แกน ... ถ้าคุณไม่ได้ตรึง CPU เสมือนทั้งหมดของคุณที่ 100% ตลอดเวลาฉันไม่คิดว่าผู้ขายของคุณถูกต้อง

ลองดูที่คลัสเตอร์ของระบบต่อไปนี้ ...

  • 9 โฮสต์ ESXi
  • เครื่องเสมือน 160 เครื่อง
  • 104 แกนประมวลผลทางกายภาพทั่วทั้งคลัสเตอร์
  • โปรไฟล์เครื่องเสมือนโดยเฉลี่ยคือ: 4 vCPU และ 4GB ถึง 18GB RAM
  • CPU สามารถ oversubscribed อย่างปลอดภัย ... แต่โปรดจำไว้ว่ามันสามารถถูกจำกัด จองและจัดลำดับความสำคัญในระดับ VM

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

จากคลัสเตอร์ที่ใช้งานอยู่ - 3 เครื่องโฮสต์เสมือน 42 เครื่อง ป้อนคำอธิบายรูปภาพที่นี่


4
หลังจากเห็นการโยกย้าย 3936 vMotion ฉันไม่รู้สึกแย่เกินไปเกี่ยวกับ 1,200 ของเรา
Mark Henderson

2
ฉันดูสถิติของกลุ่ม VM ของเราเมื่อวานนี้ซึ่งแสดงตัวเลขที่ได้รับจาก @whwhite เรามี 3 โฮสต์รวม 24 โปรเซสเซอร์และ 55 GHz เรามี 59 VMs โดยมีการจัดสรร 79 vCPU ทั้งหมด ตามสถิติของ vSphere ในช่วง 6 เดือนที่ผ่านมาเราได้เฉลี่ยเล็กน้อยกว่า 14 GHz ที่ใช้ (ต่ำสุด 9 GHz, สูงสุด 25 GHz) และในช่วงเวลานั้นมีการนับจำนวนคอร์โปรเซสเซอร์นับ 0
พอลเกียร์

7

หากต้องการขยายการเขียนบทความของ ewwhite เว้นแต่ว่าคุณมีแอปพลิเคชันที่สามารถใช้ประโยชน์จาก vCPU หลายตัวหรือหลายคอร์ต่อ vCPU มีประโยชน์อย่างมากในการจัดสรร vCPUs / cores หลายตัวให้กับ VM ในความเป็นจริงบ่อยครั้งกว่าคุณจะจบลงด้วยประสิทธิภาพที่ต่ำกว่าซึ่งแตกต่างจากการทำงานใน vCPU เดียวที่มีหนึ่งคอร์ที่ได้รับมอบหมายส่วนหนึ่งเป็นเพราะค่าใช้จ่ายในการจัดตารางเวลาที่จำเป็นในการเรียกใช้ vCPU หลาย

FWIW ในการตั้งค่า VDI หมายเลขที่ถูกอ้างถึงบ่อยครั้งคือ 5 vCPU ต่อหนึ่งฟิสิคัลคอร์ แน่นอนว่าการคำนึงถึงเดสก์ท็อปที่ทำงานในสำนักงาน หาก VM ของคุณยุ่งอยู่กับการคอมไพล์โค้ดตลอดเวลาคุณอาจไม่สามารถใส่ 5 vCPU ต่อหนึ่งคอร์ที่มีอยู่จริง

เหตุผลที่คนจำนวนมากพูดว่า "มันขึ้นอยู่กับ" เป็นเพราะมันทำจริงๆ ดูค่า CPU Ready ของคุณแล้วตัดสินใจว่าคุณสามารถเพิ่มโหลด CPU มากขึ้นในระบบใดระบบหนึ่งหรือไม่ CPU Ready เป็นการวัด vCPU ที่พร้อมใช้งานคำสั่ง แต่ต้องรอเวลา CPU จริงเพื่อให้พร้อมใช้งาน

ในกรณีของคุณหากคุณกำลังรวบรวมโปรแกรมขนาดใหญ่อาจเป็นไปได้ว่า VM ของคุณจะต้องใช้เวลา CPU มาก ตามที่ระบุไว้ ewwhite โดยทั่วไปการจำลองเสมือนมีแนวโน้มที่จะเป็นดิสก์ I / O และ RAM ที่ จำกัด มากกว่าการ จำกัด ของ CPU


13
absolutely zero benefit in allocating multiple vCPUs/cores to a VM- ไม่ถูกต้องทั้งหมด เรามีแอพพลิเคชั่นแบบเธรดเดียวที่ใช้แขวนเป็นรายสัปดาห์ เมื่อ vCPU เดียวอยู่ที่ 100% มันเป็นไปไม่ได้ที่จะเข้าสู่ระบบนั้นและเราต้องทำการรีเซ็ตระดับไฮเปอร์ไวเซอร์ของ VM เราเพิ่ม vCPU ตัวที่ 2 และเมื่อแอปหยุดทำงานเราสามารถเข้าไปและฆ่าเธรดที่ละเมิดได้อย่างง่ายดาย นี่เป็นกรณีของความจริงเล็กน้อย แต่คุณไม่สามารถจัดการได้อย่างสมบูรณ์
Mark Henderson

4
สิ่งที่มาร์คเขียนคือเหตุผลที่เราใช้สองคอร์เป็นขีด จำกัด ล่างสำหรับ VM ทุกตัว - ไม่สำคัญว่าพวกเขาต้องการหรือไม่
นิลส์

2
ค่าที่พร้อมเป็นวิธีที่ดีที่สุดในการบอกว่าคุณมีพื้นที่สำรองมากกว่าโฮสต์ค่าที่พร้อมของคุณควรต่ำที่สุดเท่าที่จะเป็นไปได้ เป็น% ของเวลาที่ VM พร้อม "ใช้" เพื่อใช้รอบ CPU แต่ต้องรอเนื่องจาก CPU ไม่ว่างกับงานอื่น เพื่ออธิบายว่าทำไมการให้ vm ของคุณหลายคอร์มีผลกระทบต่อประสิทธิภาพฉันจะใช้ตัวอย่างง่ายๆ: ถ้าฉันมีฟิสิคัลคอร์ 4 คอร์และ 4vms ถ้าคุณมี 3 วีเอ็มที่มี 2 คอร์และหนึ่งวีเอ็มที่มี 4 คอร์ รอบมากขึ้นเนื่องจากพวกเขาสามารถ "พอดี" ได้ดีขึ้นในทวีคูณ ไปอนุรักษ์เป็นไปได้กับคุณ vcpus!
Rqomey

@ MarkHenderson ฉันสามารถดูว่ามันจะมีประโยชน์และสิ่งที่อาจเกิดขึ้นกับคนที่ถามคำถามตั้งแต่เขาทำงานกับคอมไพเลอร์
Extractor ความเป็นจริง

@ ไม่มีฉันเชื่อว่าการให้ VM 2 ทุกคอร์ไม่ว่าจะมีความต้องการทางธุรกิจหรือไม่นั้นเป็นความคิดที่แย่จริงๆ มันอาจส่งผลเสียต่อคุณได้อย่างง่ายดายในหลาย ๆ ทางขนาดของสล็อตขนาดของคอร์ไม่เพียงพอที่จะเริ่มต้นใหม่ / ล้มเหลวประสิทธิภาพการทำงานลดลงเนื่องจากสิ่งที่ Rqomey เขียนเพียงสิ่งอื่น ๆ นับไม่ถ้วน คุณสามารถเข้าไปใน VM ของคุณผ่าน vCenter และ DCUI ได้ตลอดเวลา
ความเป็นจริง

3

ปัญหาพื้นฐานนั้นโดยทั่วไปเหมือนกับการจัดตารางกระบวนการในระบบทางกายภาพ ตราบใดที่ภาระของระบบต่ำกว่าจำนวนแกนประมวลผล (หรือแม้แต่ตัวประมวลผลเชิงตรรกะในกรณีของ HyperThreading) ก็เป็นไปด้วยดีและตัวประมวลผลสามารถจัดการโหลดได้

ดังนั้นตราบใดที่โหลดพร้อมกันใน vCPU ที่ใช้แล้วทั้งหมดจะไม่เกินโหลดที่สามารถจัดการได้โดยคอร์ฟิสิคัลทั้งหมด

สำหรับความต้องการของคุณเพียงรวบรวมเป็นงาน CPU-intesive ซึ่งจำเป็นเท่านั้นเวลา สำหรับ compiler-VM เราจัดสรรซีพียูให้มากที่สุด ดังนั้นหากมีความต้องการที่จะรวบรวมมันจะทำได้เร็วที่สุด (ถ้าคอมไพเลอร์ของคุณรองรับการคอมไพล์ paralell)

สิ่งนี้อาจไม่เป็นจริงสำหรับคอมไพเลอร์ -VM ที่มีภาระคงที่ (เช่นหากคุณให้บริการอินเทอร์เน็ตเพื่อทำการคอมไพล์และมีการใช้งานอย่างต่อเนื่อง)


2

กฎข้อหนึ่งที่ฉันเคยเห็น (อาจเป็นในเอกสารประกอบของ VMware) ไม่ได้จัดสรรแกนเพิ่มเติมให้กับ VM มากกว่าที่มีอยู่จริงบนโฮสต์เพราะนั่นจะทำให้ vCores หลายแห่งถูกเลียนแบบบนแกนเดียวเพิ่มค่าใช้จ่ายที่ไม่จำเป็น


1
สิ่งที่ตรงกันข้าม ถ้าฉันมีซีออน 6-core และฉันจัดสรรได้แค่ 4 คอร์ใน VM? แล้วการแสดงจะเป็นอย่างไร? ระบบ VM จะสามารถเก็บเกี่ยวพลังงานจากคอร์ทั้ง 6 คอร์หรือไม่หรือจะถูก จำกัด ที่ 4?
Overmind

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