KVM / Qemu上的Windows guest有可怕的关键滞后

主机操作系统是以下版本的Arch Linux: –

qemu 2.1.0-2 libvirt 1.2.7-1 linux 3.15.8-1

客户操作系统是Windows 7 64位。

当我第一次创build这个VM并开始使用它时,这个问题并不存在,而是出现在某个时刻。 我不能不幸把它钉在一个特定的主机或来宾configuration更改或软件更新。

当使用virt-manager查看器运行虚拟机时,按键需要稍微less于一秒的时间来注册。 鼠标操作不会延迟。 整机的运行速度并不明显 – 延迟似乎只能在键盘input。

这是机器的定义:

<domain type='kvm'> <name>Windows7</name> <uuid>ad22629b-64eb-7444-359f-f97d458336cb</uuid> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>4</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-1.5'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>Nehalem</model> <vendor>Intel</vendor> <topology sockets='1' cores='2' threads='4'/> <feature policy='require' name='avx'/> <feature policy='require' name='vme'/> <feature policy='require' name='dtes64'/> <feature policy='require' name='xsave'/> <feature policy='require' name='vmx'/> <feature policy='require' name='xtpr'/> <feature policy='require' name='pcid'/> <feature policy='require' name='est'/> <feature policy='require' name='monitor'/> <feature policy='require' name='tm'/> <feature policy='require' name='pclmuldq'/> <feature policy='require' name='acpi'/> <feature policy='require' name='tsc-deadline'/> <feature policy='require' name='osxsave'/> <feature policy='require' name='tm2'/> <feature policy='require' name='ht'/> <feature policy='require' name='pdcm'/> <feature policy='require' name='ds'/> <feature policy='require' name='rdtscp'/> <feature policy='require' name='ss'/> <feature policy='require' name='pbe'/> <feature policy='require' name='ds_cpl'/> </cpu> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/sbin/qemu-system-x86_64</emulator> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='writethrough'/> <source dev='/dev/volgrp1/qemu_windows7'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/mapper/volgrp2-qemu_windows7_data'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </disk> <controller type='pci' index='0' model='pci-root'/> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </controller> <interface type='direct'> <mac address='52:54:00:f0:f8:5b'/> <source dev='eth0' mode='bridge'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <interface type='network'> <mac address='52:54:00:c4:a5:2a'/> <source network='isolated'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='spice' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> </graphics> <sound model='ich6'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> </domain> 

有没有人对这个问题有什么build议? 我找不到任何有用的Google链接。 我希望这将是一个将再次消失的bug,但现在已经持续了几个版本的Qemu +内核。

这不是一个发行版的问题,而是Windows中的一个bug:

http://keyliner.blogspot.se/2009/11/windows-7-slow-keyboard-response.html (第二个条款)

这是对我的帮助:

  1. 开始,运行, regedit

  2. find这个键: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

  3. 在细节方面,右键单击空白区域并添加一个新的“DWORD(32位)”值。 命名关键的PollStatusIterations

    将值设为Hex = 1

    注意,还有其他类似名称的registry项。

  4. closuresRegedit并重启。

  5. 如果此值已在registry中,请将其重命名为xxPollStatusIterations (右键单击,重命名)以禁用该键。 重新启动并testing。

从内核3.12.21升级到内核3.16.5后,我刚刚经历了与Gentoo相同的问题。 我跳过内核3.14.14,因为它引起的USB2支持消失。

我正在运行这个:

 jserink@jserinki7 ~/qemu/vde $ qemu-system-x86_64 --version QEMU emulator version 2.1.1, Copyright (c) 2003-2008 Fabrice Bellard 

在内核3.16.5时,我遇到了这个问题,在内核3.12.21下运行KVM时,我没有这个问题。 我注意到在3.16.5内核中有一些“新”时序选项,所以我正在调整其中的一些。 当我看到那是什么时,我会回到你身边。

还有一些人声称这是一个Windows问题,但如果是这样的话,我会在kernel-3.12.21上看到它,但是我没有。 当我有东西的时候会报告回来。

好的,改变内核3.16.5中的时间问题什么都不做。 但注意到我略微看到同样的问题是3.12-21,但是非常轻微,而在3.16.5这个问题非常明显。

下面的Windowsregistry修复几乎照亮了这个问题。 戏剧性的改善!

干杯,约翰