KVM: Fitur CPU apa yang membuat VM berjalan lebih baik?

21

Kami menggunakan Ubuntu 12.04 dengan parameter berikut:

  • Dell R910
  • Kernel 3.2.0-25-generik # 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 Intel (R) Xeon (R) CPU E7- 4870 @ 2.40GHz (masing-masing dengan 10 inti fisik, HT dan Intel VT diaktifkan)
  • Para tamu Windows saat ini tidak memiliki VirtIO, tetapi itu akan segera berubah

Kami menjalankan beberapa tamu Windows pada mesin ini, salah satunya adalah Windows 2003 32 Bit, satu lagi Windows 2008 (64 Bit). Kami saat ini berjuang dengan masalah kinerja dan bermain-main dengan model CPU.

Kami biasanya menggunakan "qemu-system-x86_64 untuk tamu Windows 32 Bit kami, misalnya:

/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 [...] 

Kinerja tamu ini ternyata menjadi sedikit rendah. Kami belum menjalankan tolok ukur apa pun, tetapi katakanlah bahwa menyalin sejumlah besar data (file) di dalam VM dari satu direktori ke direktori lainnya berjalan jauh lebih cepat ketika kami mengganti model CPU dari "-cpu qemu32" ke "-cpu Nehalem ". File yang memakan waktu sekitar 2: 40h untuk menyalin sekarang menyalin dalam waktu 40 menit. Tentu saja ini bukan uji kualitas tinggi dan ada banyak ruang untuk memiliki usaha yang lebih profesional. Tapi ini merupakan indikator yang jelas bahwa memilih model CPU yang benar dapat mempengaruhi kinerja tamu berat.

Sekarang saya jadi penasaran dan berlari:

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]

Dan:

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

Dengan semua versi yang berbeda ini, agak sulit ditebak. "Nehalem" tampaknya yang paling berkinerja dalam daftar itu. Sekarang saya bertanya-tanya, bagaimana cara mengetahui model CPU mana yang terbaik untuk tamu saya? Menjelajahi Internet, saya menemukan sumber daya berikut:

Ketika saya membaca situs-situs itu dengan benar, mereka mengklaim bahwa "-cpu host" mungkin membawa kinerja terbaik. Saya belum memiliki kekhawatiran tentang migrasi, karena kedua host KVM dilengkapi sama (tepatnya perangkat keras yang sama).

Jadi, apa yang direkomendasikan oleh admin KVM berpengalaman? Apakah ada aturan emas atau bahkan matriks, seperti "model ini adalah yang terbaik untuk OS tamu itu"?

Saya minta maaf jika saya bisa mengetahui informasi ini sendiri - saya menjalankan berbagai pencarian Google dan menelusuri banyak situs web. Saya tidak dapat menemukan sesuatu yang menjawab pertanyaan saya.

Valentin
sumber
Kenapa repot-repot dengan saklar -cpu? Biarkan saja.
psusi
1
Kenapa tidak repot dengan itu? Afaik itu bisa membawa peningkatan kinerja.
Valentin
Jika harus masuk dan meniru hal-hal, itu akan merusak kinerja. Cobalah tanpa.
psusi
2
Saya baru tahu bahwa libvirt menambahkan parameter "-host qemu32" secara otomatis, karena kita tidak menyetelnya.
Valentin
3
@psusi: Baru saja mengujinya hari ini ... ketika saya meninggalkan saklar-cpu, kinerjanya sebagus saya memilih model CPU terbaik.
Valentin

Jawaban:

13

Cukup sederhana kok. Untuk kelompok homogen dan pengaturan satu host gunakan hostopsi. Untuk cluster campuran, gunakan versi CPU terendah yang tersedia, jadi jika satu host adalah Penryn dan Nehalem lainnya, gunakan Penryn pada keduanya.

Jika Anda menggunakan RHEV atau oVirt, ini sudah ada di dalamnya. VMWare memiliki ini disebut "EVC" dan menempatkannya sebagai fitur yang sangat besar.

Kembali ke kinerja, Anda pasti membutuhkan virtio di mana pun Anda bisa menaruhnya. Dan jika Anda masih mengalami hambatan kinerja, itu biasanya dapat diatasi berdasarkan kasus per kasus, tergantung di mana mereka terjadi.

[offtop] Pada pilihan distribusi Anda, saya sudah berkomentar di utas lain [/ offtop]

dyasny
sumber
Terima kasih dyasny, berharap Anda akan membalas dan memberi saya semacam "aturan emas"!
Valentin
11

Para tamu Windows saat ini tidak memiliki VirtIO

Jangan kehilangan lebih banyak waktu dengan mengutak-atik apa pun.
Instal driver virtio dan kembali. Perbedaannya sangat besar sehingga peningkatan apa pun yang Anda dapat temukan sekarang tidak akan ada artinya dengan virtIO.

Hanya sebuah contoh dengan salah satu server kami:
- tanpa virtIO, W2k3 dapat menangani sekitar 10 pengguna Terminal Server
- dengan virtIO, mesin yang sama dengan OS yang sama saat ini menangani 120 hingga 125 pengguna dengan sedikit memperlambat. Dan kami menambahkan mesin virtual lain untuk menjalankan SQL Server satu komputer fisik yang sama

Gregory MOUSSAT
sumber
Terima kasih atas petunjuknya. Ya, VirtIO seharusnya diaktifkan, tetapi kami mengalami beberapa masalah dengan tamu Windows 2003 yang harus diselesaikan terlebih dahulu. Selain itu, saya ingin memiliki klarifikasi tentang topik model CPU.
Valentin
Ini adalah salah satu alasan saya menggunakan Hyper-V. Sejak 2008 ini berarti TANPA INSTAL dan itu berarti semua driver untuk Hyper-V dikelola dengan Pembaruan Windows. Masalah kompatibilitas ada yang mematikan.
TomTom
@TomTom Hyper-V bukan satu-satunya hypervisor yang disertifikasi untuk menjalankan Windows. Dan sertifikasi dalam konteks ini berarti SVVP / WHQL.
dyasny
1
Tidak, apakah itu satu-satunya yang bekerja di luar kotak karena di dalamnya sudah ada driver yang diinstal;) Plus saya pikir XEN karena mereka piggiback pada driver Hyper-V. Tidak harus memelihara elemen yang diperbarui secara eksternal adalah hal yang sangat bagus. Saya tidak peduli apakah mereka masuk - intinya adalah saya tidak harus menonton penyedia lain, karena semua datang melalui pembaruan windows. Saya hanya BERHARAP MS akan membuka Pembaruan Windows untuk softawre pihak ketiga;)
TomTom
1
Karena saya yakin Anda pernah mendengar tentang slipstreaming dan template VM, saya (hampir) tidak akan menyebutkannya :) Masalah saya dengan Hyper-V adalah dukungan yang sangat buruk dari para tamu Linux.
dyasny
8

Qemu tidak berfungsi dengan cara yang sama seperti banyak hypervisor lainnya. Sebagai permulaan, ini dapat memberikan persaingan penuh. Itu artinya Anda dapat menjalankan kode x86 pada prosesor ARM, misalnya. Ketika dalam mode KVM, saat Anda menggunakannya, itu tidak benar-benar melakukan itu ... prosesor terpapar tidak peduli apa, tapi apa yang dilaporkan ke OS akan diubah oleh -cpuflag.

Jika Anda menginginkan kecepatan yang lebih cepat, ini adalah titik awal untuk mencoba dan mencocokkan kemampuan prosesor virtual dengan prosesor nyata Anda sebaik mungkin. Itu akan mengurangi kasus di mana opcode sub-optimal dipanggil untuk menjalankan tugas, dan juga akan mengurangi opcode yang tidak mungkin pada perangkat keras Anda diterjemahkan ke sesuatu yang lain terlebih dahulu. Karena model prosesor Xeon Anda dirilis pada awal 2011, itu mungkin mendukung sebagian besar sejalan dengan seri Core i7. Untuk itu, saya akan mengatakan bahwa arsitektur Nehalem adalah emulasi terbaik Anda.

Mengutip dari salah satu tautan Anda ( Tuning KVM ):

Untuk meneruskan semua fitur prosesor host yang tersedia ke tamu, gunakan saklar baris perintah

 qemu -cpu host

jika Anda ingin mempertahankan kompatibilitas, Anda dapat mengekspos fitur yang dipilih untuk tamu Anda. Jika semua host Anda memiliki fitur-fitur ini, kompatibilitas tetap dipertahankan:

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

Dengan demikian, jika Anda merasa bahwa Anda mungkin pada akhirnya memindahkan barang-barang cukup untuk membuat masalah, Anda dapat menemukan semua set instruksi yang didukung yang Anda pikir prosesor apa pun yang Anda miliki sekarang atau yang mungkin Anda miliki di masa depan mendukung dan mendaftarkannya.

Namun, sebagian besar waktu, Anda ingin tetap berpegang pada -cpu host. Menentukan CPU dengan flag yang kurang tersedia berarti aplikasi akan menghindari penggunaan fitur yang bisa membuatnya lebih cepat.

Jeff Ferland
sumber
4
Dia menggunakan KVM, yang membutuhkan ekstensi virtualisasi dan tidak berjalan melakukan emulasi; bahkan jika itu didasarkan pada qemu
Javier
1
Masih memberi suara +1 dari saya untuk upaya dan rekomendasi untuk menggunakan host -cpu!
Valentin
3

Anda mendapatkan opsi '-cpu host' bingung. Opsi ini TIDAK mengaktifkan hanya semua fitur CPU yang spesifik untuk sistem host Anda, ini memungkinkan SEMUA fitur yang didukung CPU Anda dan semua yang dapat ditiru bahkan jika CPU Anda tidak mendukungnya.

-cpu host
adalah pilihan yang baik tetapi bukan yang paling efisien, karena mungkin mengaktifkan opsi yang dapat ditiru yang tidak didukung cpu Anda, sistem tamu dapat sedikit melambat kapan saja ia mencoba menggunakan salah satu fitur ini yang perlu ditiru .

Sumber: http://wiki.qemu.org/Features/CPUModels

Joe Huss
sumber
1
Awalnya saya pikir jawaban ini merujuk pada dukungan instruksi misalnya dukungan SSE yang dapat ditiru. Tapi tentu saja itu tidak masuk akal karena Anda menjalankan dalam mode KVM atau TCG dan bukan campuran keduanya. Jadi saya kira emulasi yang dimaksud di sini mungkin hal-hal seperti x2apic di mana tidak ada dukungan h / w tetapi kernel dapat memalsukannya. Saya hanya menyebutkan ini untuk mencoba dan menjelaskan di atas karena saya awalnya bingung.
Neil McGill
-2

CentOS 6.7 memberi saya kinerja KVM + Spice yang tepat pada Dell R910. Saya pikir begitu Anda mencobanya, Anda tidak akan kembali ke hal lain (serius)!

Marc Cyr
sumber