Mengapa Windows 7 VM saya berjalan di Linux KVM tidak menggunakan semua prosesor virtual?

12

Semua

Saya mempunyai masalah pada server saya sejak saya memigrasikan salah satu VM saya dari Windows 2008 Server ke Windows 7 (ultimate): meskipun saya telah menetapkan empat core ke VM dan bahkan tampaknya melihatnya, sepertinya berpikir demikian. memiliki dua inti!

Itu mengenali prosesor saya tetapi tidak menggunakannya!

Adakah yang bisa memberi tahu saya apa yang terjadi di sini? Saya pikir itu bisa menjadi beberapa ketidakcocokan antara KVM dan Windows 7 tetapi karena melihat prosesor virtual saya mulai berpikir tidak ... ada petunjuk?

Berikut adalah screenshot dari manajer proses yang hanya menampilkan dua inti pada kotak yang sama:

Pengelola tugas

jkp
sumber
Apakah Anda yakin itu tidak menunjukkan Anda dua procs dual-core?
phoebus
@phoebus: Saya bertanya-tanya, tapi kemudian pada semua versi windows di mana saya telah menjalankan pengaturan ini sebelum saya melihat empat core ketika melihat di monitor prosesor, yang saya tidak di sini.
jkp
Ketika Anda mengatakan prosesor memantau, apakah maksud Anda bagian pemantauan kinerja dari manajer tugas? Karena hanya didasarkan pada tangkapan layar, Anda menunjukkan bukti dua, prosesor dua inti. Jika itu masalahnya, Anda harus melihat semua 4 core di monitor kinerja. Jika tidak, maka ya, ada yang tidak beres.
phoebus
@phoebus: ya, maksud saya bagian pemantauan kinerja task manager. Jelas nampak aneh bagi saya ...
jkp

Jawaban:

17

Saya menduga prosesor sedang disajikan sebagai prosesor inti tunggal di soket terpisah. Windows 7 ultimate mendukung hingga 2 sistem soket, sehingga akan menggunakan 2 prosesor.

Saya tidak tahu apakah Anda dapat mengkonfigurasi KVM untuk menghadirkan prosesor sebagai CPU quad core tunggal atau 2 CPU dual core, yang seharusnya menyelesaikan masalah.

xenny
sumber
1
Itu benar. ATM tidak ada cara untuk mengubah topologi.
Luca Tettamanti
1
Wow, saya tidak tahu ini. Terima kasih telah menaruh jari Anda pada masalah dengan benar. @Luca: apakah Anda tahu jika dukungan seperti itu direncanakan? Saya sebenarnya menggunakan ekstra dua core atau akan sia-sia?
jkp
2
@Luca: sebenarnya sejak qemu 0.12 Anda dapat mengubah topologi. Saya telah memutakhirkan komponen userspace kvm saya, tetapi saya rasa saya perlu mod kernel baru agar bisa berfungsi .... toh, itu bisa dilakukan :)
jkp
Ah, keren ... Saya harus upgrade juga :)
Luca Tettamanti
Perlu diingat bahwa Anda dapat menjalankan modul kernel kvm terbaru pada kernel lama Anda saat ini. Anda mungkin harus mengkompilasi modul sendiri kecuali Anda dapat menemukan repositori untuk distro Anda yang memiliki biner untuk Anda. Tetapi membangun modul tidak terlalu sulit untuk dilakukan.
3dinfluence
21

Pada libvirt 0.8.3, jika Anda mengetik:

virsh capabilities | grep topology

itu akan mencantumkan topologi host:

<topology sockets='1' cores='4' threads='1'/>

Angka-angka mengacu pada soket, inti per soket, dan benang per inti. Tambahkan baris ini ke entri cpu di file xml untuk memungkinkan windows menggunakan semua 4 core, misalnya:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>
Mark Dayel
sumber
mengetahuinya, tetapi melupakannya - baik sekali lagi ada serverfault dan semua orang menulis semua hal yang luar biasa ini. terima kasih atas tipnya!
fen
1
Saya mencoba ini di mesin RHEL 7.2 saya. Ditambahkan <topology sockets='1' cores='4' threads='1'/>ke xml saya. virsh capabilities | grep topologymenunjukkan <topology sockets='1' cores='6' threads='2'/>. KRITIS: dilakukan di kill -HUP nnnnnmana nnnnn adalah PID dari proses libvirtd saya. Mulai VM. Itu berhasil. +1! Terima kasih! ... Tapi jangan lupa untuk menendang libvirtd dengan sinyal HUP atau restart!
Mike S
4

Pengaturan topologi didukung penuh dalam virt-manager sejak Ubuntu 15.04.

Dari virt-manager> CPU> Topologi:

  • Periksa: Tetapkan topologi CPU secara manual
  • Soket: 2
  • Core: 2
  • Thread: 2

Berikut ini dibuat dari pengaturan di atas di virt-manager. Anda tidak perlu memasukkan ini dengan edit virsh.

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

Topologi berhenti dikenali oleh windows setelah pembaruan, dan sekali lagi membatasi CPU Virtual menjadi 2 soket.

Untuk memperbaikinya, gunakan 'virsh edit' untuk menyembunyikan fitur kvm, dan menambahkan fitur hyperv. Setelah benar-benar dimatikan dan reboot, VM windows akan kembali mengenali banyak CPU.

Mengapa Windows 7 VM saya berjalan di Linux KVM tidak menggunakan semua prosesor virtual?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>
rickfoosusa
sumber
2

Dalam RHEL / CentOS 5.5 (kvm> = 83-164.el5) biner kvm mendukung opsi "-smp N, cores = N" (ada patch backport dalam paket); namun, versi libvirt tidak mendukung elemen <topology> dalam domain XML. Solusinya adalah membuat skrip wrapper untuk / usr / libexec / kvm yang menambahkan opsi yang sesuai dan menentukan skrip itu di elemen <emulator> alih-alih jalur default.

Sergey Vlasov
sumber
1

Perlu dicatat bahwa Ubuntu 10.4 (Lucid) memiliki libvirt versi 0.7.5 sementara dukungan untuk topologi ditambahkan ke libvirt dalam versi 0.7.6. Ubuntu 10.10 (Maverick) memiliki libvirt 0.8.3 dan karenanya harus dapat secara langsung mendukung spesifikasi topologi dalam XML tanpa pembungkus.

pengguna67327
sumber