Re: [RFT] kvm with Windows optimization

Anthony Liguori
2007-10-25T18:08:33Z

Avi Kivity wrote:
> Anthony Liguori wrote:
>> Avi Kivity wrote:
>>> This is a request for testing of an experimental kvm feature that
>>> dramatically accelerates some Windows releases (when running with
>>> the ACPI HAL, and especially with guest SMP). The feature detects
>>> accesses by the guest to the Task Priority Register (TPR) and
>>> patches them at runtime to a kvm-friendly code snipped that is
>>> provided by the BIOS.
>>>
>>> The upshot of all that is that
>>> http://kvm.qumranet.com/kvmwiki/Windows_ACPI_Workaround is no longer
>>> required, and Windows SMP no longer runs like a dog; it's quite
>>> snappy from my very limited testing.
>>>
>>> Please download the test release from
>>> http://people.qumranet.com/avi/tpr-opt-1.tar.gz and give it a spin.
>>> Once it has received some exposure, I'll merge it into mainline.
>>>
>>> Credit for the original idea is due to Ben Serebrin.
>>>
>>>
>>
>> Sweet!
>>
>> I needed the following patch to compile. Will let you know how
>> testing goes.
>>
>
> I already applied that, plus another minor fix, so I recommend
> re-downloading. Should have given it a new name.

What's the minor fix? During the second stage of installing winxp, I
just got the following BUG(). Have to reboot to check and see if this
is specific to your branch.

[68630.390361] ------------[ cut here ]------------
[68630.390367] kernel BUG at /home/anthony/tmp/b/kernel/mmu.c:308!
[68630.390370] invalid opcode: 0000 [1] SMP
[68630.390372] CPU 1
[68630.390374] Modules linked in: kvm_intel kvm nfs lockd sunrpc tun
i915 drm af_packet rfcomm l2cap thinkpad_acpi ppdev acpi_cpufreq
cpufreq_stats cpufreq_ondemand freq_table cpufreq_userspace
cpufreq_conservative cpufreq_powersave sbs ac battery bay dock container
button video ipv6 bridge ipt_REJECT xt_state xt_tcpudp iptable_filter
ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack
nfnetlink ip_tables x_tables sbp2 lp arc4 ecb blkcipher snd_hda_intel
snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss joydev
iwl4965 snd_seq_midi iwlwifi_mac80211 hci_usb snd_rawmidi
snd_seq_midi_event snd_seq snd_timer bluetooth pcmcia cfg80211 usbhid
hid sdhci mmc_core snd_seq_device serio_raw parport_pc parport
yenta_socket rsrc_nonstatic pcmcia_core pcspkr psmouse snd soundcore
intel_agp shpchp pci_hotplug snd_page_alloc evdev ext3 jbd mbcache sg
sr_mod cdrom sd_mod ata_piix ohci1394 ieee1394 ata_generic libata
scsi_mod ehci_hcd uhci_hcd usbcore e1000 thermal processor fan fuse
apparmor commoncap
[68630.390435] Pid: 15055, comm: qemu-system-x86 Not tainted
2.6.22-14-generic #1
[68630.390437] RIP: 0010:[<ffffffff8837f905>] [<ffffffff8837f905>]
:kvm:mmu_memory_cache_alloc+0x25/0x30
[68630.390451] RSP: 0018:ffff810041e3b9b8 EFLAGS: 00010246
[68630.390453] RAX: 0000000000000000 RBX: ffffc2000109dea0 RCX:
ffff81003f47c080
[68630.390456] RDX: ffff81003f47c088 RSI: 0000000000000028 RDI:
ffff810042d103e0
[68630.390458] RBP: ffff81004eaf9460 R08: 0000000000000000 R09:
0000000000000004
[68630.390460] R10: 0000000003a94163 R11: 0000000000000000 R12:
ffff810042d10000
[68630.390463] R13: 0000000000000000 R14: ffff81004eaf9460 R15:
ffff810042d10000
[68630.390465] FS: 00002b08de4add40(0000) GS:ffff81000102c280(0000)
knlGS:0000000000000000
[68630.390468] CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033
[68630.390470] CR2: 0000000000010000 CR3: 00000000284ef000 CR4:
00000000000026e0
[68630.390473] Process qemu-system-x86 (pid: 15055, threadinfo
ffff810041e3a000, task ffff81003b9346e0)
[68630.390475] Stack: ffffc2000109dea0 ffffffff8837fa16
000000002149d043 0000000000000002
[68630.390480] 000000002149d000 ffffffff883801ad 00002b08df4e4000
0000000000003a94
[68630.390484] 0000000000000000 0000000000000000 0000000003a94000
0000000003a94000
[68630.390487] Call Trace:
[68630.390496] [<ffffffff8837fa16>] :kvm:rmap_add+0xf6/0x110
[68630.390507] [<ffffffff883801ad>]
:kvm:paging32_set_pte_common+0x10d/0x2b0
[68630.390523] [<ffffffff88380399>] :kvm:paging32_set_pte+0x49/0x50
[68630.390534] [<ffffffff883809dd>] :kvm:kvm_mmu_pte_write+0x33d/0x3b0
[68630.390553] [<ffffffff8837a6cd>]
:kvm:emulator_write_emulated_onepage+0x9d/0x100
[68630.390564] [<ffffffff88382da8>] :kvm:x86_emulate_insn+0x5e8/0x4450
[68630.390574] [<ffffffff8855f467>] :kvm_intel:vmcs_readl+0x17/0x20
[68630.390586] [<ffffffff8837acff>] :kvm:emulate_instruction+0x1af/0x2f0
[68630.390596] [<ffffffff88562090>] :kvm_intel:handle_exception+0x240/0x2b0
[68630.390603] [<ffffffff88387aa9>] :kvm:apic_update_ppr+0x29/0x60
[68630.390615] [<ffffffff8837ca74>] :kvm:kvm_vcpu_ioctl+0xe54/0x11b0
[68630.390622] [<ffffffff8026e624>] add_to_page_cache_lru+0x24/0x40
[68630.390628] [<ffffffff8028f088>] shmem_getpage+0x298/0x7e0
[68630.390652] [<ffffffff802a84f5>] core_sys_select+0x275/0x300
[68630.390670] [<ffffffff80240719>] __dequeue_signal+0x19/0x1d0
[68630.390677] [<ffffffff8023ffce>] recalc_sigpending+0xe/0x30
[68630.390680] [<ffffffff8024212c>] dequeue_signal+0x5c/0x190
[68630.390685] [<ffffffff8024f4f9>] getnstimeofday+0x39/0xa0
[68630.390692] [<ffffffff802a6e05>] do_ioctl+0x35/0xe0
[68630.390698] [<ffffffff802a6f24>] vfs_ioctl+0x74/0x2d0
[68630.390705] [<ffffffff802a7215>] sys_ioctl+0x95/0xb0
[68630.390712] [<ffffffff80209e8e>] system_call+0x7e/0x83
[68630.390723]
[68630.390724]
[68630.390725] Code: 0f 0b eb fe 0f 1f 80 00 00 00 00 48 81 c7 e0 03 00
00 be 28
[68630.390733] RIP [<ffffffff8837f905>]
:kvm:mmu_memory_cache_alloc+0x25/0x30
[68630.390742] RSP <ffff810041e3b9b8>