KVM: ฟีเจอร์ CPU ใดที่ทำให้ VM ทำงานได้ดีขึ้น?


21

เรากำลังใช้ Ubuntu 12.04 กับพารามิเตอร์ต่อไปนี้:

  • Dell R910
  • เคอร์เนล 3.2.0-25-generic # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x CPU Intel (R) Xeon (R) E7- 4870 @ 2.40GHz (แต่ละอันมี 10 ฟิสิคอล, HT และ Intel VT ที่เปิดใช้งาน)
  • ขณะนี้แขกของ Windows ไม่มี VirtIO แต่จะเปลี่ยนในไม่ช้า

เรากำลังเรียกใช้แขกของ Windows หลายคนบนเครื่องนี้หนึ่งในนั้นคือ Windows 2003 32 บิตและอีกหนึ่ง Windows 2008 (64 บิต) ขณะนี้เรากำลังดิ้นรนกับปัญหาด้านประสิทธิภาพและเล่นกับซีพียูรุ่นต่างๆ

เรามักจะใช้ "qemu-system-x86_64 สำหรับแขก Windows 32 Bit ของเราเช่น:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

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

ตอนนี้ฉันอยากรู้อยากเห็นและวิ่ง:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

และ:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

ด้วยเวอร์ชันที่แตกต่างกันทั้งหมดมันเป็นเรื่องยากที่จะเดา "Nehalem" ดูเหมือนจะเป็นคนที่มีประสิทธิภาพมากที่สุดในรายการนั้น ตอนนี้ฉันสงสัยว่าจะบอกได้อย่างไรว่าซีพียูรุ่นใดดีที่สุดสำหรับแขกของฉัน? ท่องอินเทอร์เน็ตฉันพบทรัพยากรต่อไปนี้:

เมื่อฉันอ่านเว็บไซต์เหล่านั้นอย่างถูกต้องพวกเขาอ้างว่า "-cpu host" อาจให้ประสิทธิภาพที่ดีที่สุด ฉันยังไม่กังวลเกี่ยวกับการย้ายข้อมูลเนื่องจากโฮสต์ KVM ทั้งสองติดตั้งเท่ากัน (ฮาร์ดแวร์เดียวกัน)

ดังนั้นผู้ดูแลระบบ KVM ที่มีประสบการณ์จะแนะนำอะไร มีกฎทองหรือแม้กระทั่งเมทริกซ์เช่น "รุ่นนี้ดีที่สุดสำหรับแขกระบบปฏิบัติการ" หรือไม่?

ฉันขอโทษถ้าฉันสามารถหาข้อมูลนี้ด้วยตัวเอง - ฉันใช้การค้นหาของ Google หลายครั้งและเรียกดูเว็บไซต์จำนวนมาก ฉันไม่พบสิ่งที่ตอบคำถามของฉัน


ทำไมต้องกังวลกับสวิตช์ -cpu เลย? ปล่อยมันทิ้งไป
psusi

1
ทำไมไม่มายุ่งกับมัน? Afaik มันสามารถนำมาปรับปรุงประสิทธิภาพ
Valentin

หากต้องก้าวเข้ามาและเลียนแบบสิ่งต่าง ๆ มันจะส่งผลเสียต่อประสิทธิภาพการทำงาน ลองดูโดยไม่ต้อง
psusi

2
ฉันเพิ่งพบว่า libvirt เพิ่มพารามิเตอร์ "-host qemu32" โดยอัตโนมัติเพราะเราไม่ได้ตั้งค่า
Valentin

3
@psusi: เพิ่งทดสอบวันนี้ ... เมื่อฉันปล่อยสวิตช์ -cpu ออกไปประสิทธิภาพก็ดีพอ ๆ กับที่ฉันเลือกซีพียูรุ่นที่ดีที่สุด
Valentin

คำตอบ:


13

มันค่อนข้างง่ายจริงๆ สำหรับคลัสเตอร์ที่เป็นเนื้อเดียวกันและการตั้งค่าโฮสต์เดี่ยวใช้hostตัวเลือก สำหรับคลัสเตอร์แบบผสมให้ใช้ CPU รุ่นต่ำสุดที่มีอยู่ดังนั้นหากโฮสต์หนึ่งคือ Penryn และ Nehalem อื่นให้ใช้ Penryn ทั้งคู่

หากคุณกำลังใช้ RHEV หรือ oVirt สิ่งนี้จะถูกสร้างขึ้นมาแล้ว VMWare มีสิ่งนี้เรียกว่า "EVC" และจัดวางเป็นคุณลักษณะที่ยอดเยี่ยม

การกลับมาสู่การแสดงคุณต้องมี virtio ทุกอย่างที่คุณสามารถทำได้ และหากคุณยังคงติดขัดในประสิทธิภาพการทำงานคอขวดเหล่านั้นมักจะได้รับการแก้ไขเป็นกรณี ๆ ไปแล้วแต่กรณี

[offtop] คุณเลือกเผยแพร่ฉันได้แสดงความคิดเห็นในหัวข้ออื่น [/ offtop]


ขอบคุณ dyasny หวังว่าคุณจะตอบกลับและมอบ "กฎทอง" ให้ฉัน!
Valentin

11

ขณะนี้แขกผู้เข้าพักของ Windows ไม่มี VirtIO

อย่าเสียเวลาไปกับการปรับแต่งอะไรเลย
ติดตั้งไดรเวอร์ virtIO แล้วกลับมาอีกครั้ง ความแตกต่างนั้นใหญ่มากจนการปรับปรุงใด ๆ ที่คุณพบในตอนนี้จะไม่มีความหมายใด ๆ กับ virtIO

เป็นเพียงตัวอย่างของเซิร์ฟเวอร์ของเรา:
- หากไม่มี virtIO แล้ว W2k3 สามารถจัดการผู้ใช้ Terminal Server ได้ประมาณ 10 ราย
- ด้วย virtIO เครื่องเดียวกันที่ใช้ระบบปฏิบัติการเดียวกันนี้ในปัจจุบันรองรับผู้ใช้ 120 ถึง 125 คนโดยที่ช้าลงเล็กน้อย และเราได้เพิ่มเครื่องเสมือนอื่นเพื่อเรียกใช้ SQL Server หนึ่งในคอมพิวเตอร์ที่มีอยู่จริง


ขอบคุณสำหรับคำใบ้ ใช่ VirtIO ควรเปิดใช้งานอย่างไม่เหมาะสม แต่เราพบปัญหาเล็กน้อยเกี่ยวกับผู้เยี่ยมชม Windows 2003 ซึ่งควรแก้ไขก่อน นอกจากนั้นฉันต้องการชี้แจงเกี่ยวกับหัวข้อโมเดล CPU
Valentin

นี่คือเหตุผลหนึ่งที่ฉันใช้ Hyper-V นับตั้งแต่ปี 2008 สิ่งนี้หมายความว่าไม่ติดตั้งและมันหมายถึงไดรเวอร์ทั้งหมดสำหรับ Hyper-V ที่ปรับปรุงด้วย Windows Update ปัญหาความเข้ากันได้มี deamn ร้ายแรง
TomTom

@TomTom Hyper-V ไม่ได้เป็นเพียงไฮเปอร์ไวเซอร์ที่ได้รับการรับรองให้ใช้งาน Windows และการรับรองในบริบทนี้หมายถึง SVVP / WHQL
dyasny

1
ไม่ได้เป็นเพียงตัวเดียวที่ใช้งานได้ตามที่มีไดรเวอร์ติดตั้งอยู่แล้ว) นอกจากนี้ฉันคิดว่า XEN เพราะพวกเขาเป็นเจ้าของ piggiback ในไดรเวอร์ Hyper-V ไม่ต้องรักษาองค์ประกอบที่ปรับปรุงภายนอกอื่นเป็นสิ่งที่ดีจริงๆ ฉันไม่สนใจว่าพวกเขาจะได้รับการลงทะเบียนหรือไม่จุดคือฉันไม่ได้ดูผู้ให้บริการรายอื่นเพราะทั้งหมดผ่านการปรับปรุง windows ฉันแค่หวังว่า MS จะเปิด Windows Update สำหรับซอฟต์แวร์ของบุคคลที่สาม;)
TomTom

1
เนื่องจากฉันแน่ใจว่าคุณเคยได้ยินเกี่ยวกับ slipstreaming และแม่แบบ VM ฉันจะ (เกือบ) ไม่พูดถึงสิ่งเหล่านั้น :) ปัญหาของฉันกับ Hyper-V คือการสนับสนุนที่แย่มากของแขกลินุกซ์
dyasny

8

Qemu ไม่ทำงานในลักษณะเดียวกันกับที่ไฮเปอร์ไวเซอร์อื่นทำ สำหรับผู้เริ่มสามารถให้การจำลองเต็มรูปแบบ นั่นหมายความว่าคุณสามารถเรียกใช้รหัส x86 บนโปรเซสเซอร์ ARM ได้ เมื่ออยู่ในโหมด KVM ในขณะที่คุณกำลังใช้งานมันไม่ได้ทำ ... ตัวประมวลผลถูกเปิดเผยไม่ว่าอะไรก็ตาม แต่สิ่งที่รายงานไปยังระบบปฏิบัติการจะถูกเปลี่ยนโดยการ-cpuตั้งค่าสถานะ

หากคุณต้องการความเร็วที่เร็วขึ้นมันเป็นจุดเริ่มต้นที่จะลองและจับคู่ความสามารถของโปรเซสเซอร์เสมือนกับโปรเซสเซอร์จริงของคุณให้ดีที่สุด สิ่งนี้จะช่วยลดกรณีที่มีการเรียกใช้ opcode ย่อยที่เหมาะสมเพื่อเรียกใช้งานและยังลด opcodes ที่ไม่สามารถทำได้บนฮาร์ดแวร์ของคุณที่แปลเป็นอย่างอื่นก่อน เนื่องจากรุ่นของโปรเซสเซอร์ Xeon ของคุณเปิดตัวในต้นปี 2011 มันอาจรองรับส่วนใหญ่สอดคล้องกับ Core i7 series สำหรับสิ่งที่ฉันจะบอกว่าสถาปัตยกรรม Nehalem เป็นแบบจำลองที่ดีที่สุดของคุณ

การอ้างอิงจากลิงค์ใดลิงก์หนึ่งของคุณ ( ปรับแต่ง KVM ):

หากต้องการส่งผ่านคุณสมบัติตัวประมวลผลโฮสต์ที่มีอยู่ทั้งหมดให้กับผู้เยี่ยมชมให้ใช้สวิตช์บรรทัดคำสั่ง

 qemu -cpu host

หากคุณต้องการรักษาความเข้ากันได้คุณสามารถเปิดเผยคุณสมบัติที่เลือกให้แขกของคุณ หากโฮสต์ทั้งหมดของคุณมีคุณสมบัติเหล่านี้ความเข้ากันได้จะยังคงอยู่:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

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

-cpu hostส่วนใหญ่เวลาที่แม้ว่าคุณต้องการที่จะติด การระบุ CPU ที่มีค่าสถานะน้อยกว่าหมายความว่าแอปพลิเคชันจะหลีกเลี่ยงการใช้คุณสมบัติที่สามารถทำให้เร็วขึ้น


4
เขาใช้ KVM ซึ่งต้องการส่วนขยายการจำลองเสมือนและไม่เรียกใช้การจำลอง แม้ว่าจะเป็นไปตาม qemu
Javier

1
ยังคง +1 คะแนนจากฉันสำหรับความพยายามและข้อเสนอแนะในการใช้โฮสต์ -cpu!
Valentin

3

คุณได้รับตัวเลือก '-cpu host' สับสน ตัวเลือกนี้ไม่ได้เปิดใช้งานเฉพาะคุณสมบัติ CPU ทั้งหมดที่เฉพาะเจาะจงกับระบบโฮสต์ของคุณ แต่จะเปิดใช้งานคุณสมบัติทั้งหมดที่ CPU ของคุณรองรับและสิ่งที่สามารถจำลองได้แม้ว่า CPU ของคุณจะไม่รองรับก็ตาม

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

แหล่งที่มา: http://wiki.qemu.org/Features/CPUModels


1
ตอนแรกฉันคิดว่าคำตอบนี้อ้างถึงการสนับสนุนการเรียนการสอนเช่นการสนับสนุน SSE ที่สามารถเลียนแบบ แต่แน่นอนว่าไม่สมเหตุสมผลเมื่อคุณใช้งานในโหมด KVM หรือ TCG และไม่ใช่ทั้งสองอย่างผสมกัน ดังนั้นฉันเดาว่าการเลียนแบบที่อ้างถึงที่นี่อาจเป็นสิ่งต่าง ๆ เช่น x2apic ที่ไม่มีการสนับสนุน h / w แต่เคอร์เนลสามารถปลอมมันได้ ฉันแค่พูดถึงสิ่งนี้เพื่อพยายามอธิบายให้ชัดเจนเพราะมันทำให้ฉันสับสนในตอนแรก
Neil McGill

-2

CentOS 6.7 มอบ KVM + Spice ให้ฉันใน Dell R910 ฉันคิดว่าเมื่อคุณให้มันยิงคุณจะไม่กลับไปที่อื่น (อย่างจริงจัง)!

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