kvm访客机器上的随机临时networking冻结

我在KVM下运行两台客户机。 主机运行Arch Linux(内核版本2.6.38.2),客户机都是CentOS 5.5(内核版本2.6.18)。 我把networking设置为一个梁,或多或less地如下(当然,我不是亲手做的 – 它是通过系统启动脚本分散的)

# /usr/sbin/brctl addbr br0 # /usr/sbin/brctl addif br0 eth0 # /sbin/ifconfig br0 192.168.3.30 netmask 255.255.255.0 broadcast 192.168.3.255 up # qemu-kvm -hda <disk-image1> -m 2048 -vga std -vnc :3 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup # qemu-kvm -hda <disk-image2> -m 2048 -vga std -vnc :4 -net nic,vlan=0 -net tap,vlan=0,ifname=tap1,script=/etc/qemu-ifup # cat /etc/qemu-ifup #!/bin/sh sudo /sbin/ifconfig $1 0.0.0.0 promisc up sudo /usr/sbin/brctl addif br0 $1 

configuration大多工作。 奇怪的是我频繁的networking“暂停”。 我与虚拟机的大多数交互都是通过ssh或网页浏览器进行的。 通常,特别是在空闲时间之后,我会去input会话中的内容或者访问一个网页,什么也不会发生。 最终,在10-15秒之后,正常的活动将会恢复,没有错误。 ssh从死亡时间的击键经历了一个急stream。 networking请求似乎丢失了,但一个快速的“重新加载页面”得到的结果没有延迟。 虚拟机作为一个整体继续运行,正如我通过观看控制台的VNC会话所看到的那样。 两位客人都是这样的独立。 有时两个人同时被冻结,但有时候一个人会正常工作而另一个人被冻结。 dmesg在冻结时没有任何错误,在主机或客户端。

任何想法,解决scheme,原因,或进一步的诊断?


(补充资料,7/27)

以下是主机上“ifconfig -a”的输出:

 hope 5$ sudo ifconfig -a br0 Link encap:Ethernet HWaddr 4A:F0:CA:32:F5:88 inet addr:192.168.3.30 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::7271:bcff:fea2:f4c4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:140947463 errors:0 dropped:0 overruns:0 frame:0 TX packets:66981660 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:192776331275 (183845.8 Mb) TX bytes:9469675717 (9030.9 Mb) br0:1 Link encap:Ethernet HWaddr 4A:F0:CA:32:F5:88 inet addr:192.168.3.31 Bcast:192.168.3.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 br0:2 Link encap:Ethernet HWaddr 4A:F0:CA:32:F5:88 inet addr:192.168.3.32 Bcast:192.168.3.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 eth0 Link encap:Ethernet HWaddr 70:71:BC:A2:F4:C4 inet6 addr: fe80::7271:bcff:fea2:f4c4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:141848164 errors:0 dropped:0 overruns:0 frame:0 TX packets:68852413 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:195831275369 (186759.2 Mb) TX bytes:9559920997 (9117.0 Mb) Interrupt:20 Memory:d0300000-d0320000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:27197534 errors:0 dropped:0 overruns:0 frame:0 TX packets:27197534 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:127242745992 (121348.1 Mb) TX bytes:127242745992 (121348.1 Mb) sit0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) tap0 Link encap:Ethernet HWaddr 4A:F0:CA:32:F5:88 inet6 addr: fe80::48f0:caff:fe32:f588/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:397512 errors:0 dropped:0 overruns:0 frame:0 TX packets:668318 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:38045826 (36.2 Mb) TX bytes:750358170 (715.5 Mb) tap1 Link encap:Ethernet HWaddr 56:92:5E:DE:93:67 inet6 addr: fe80::5492:5eff:fede:9367/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:25635 errors:0 dropped:0 overruns:0 frame:0 TX packets:88846 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:1999805 (1.9 Mb) TX bytes:17071986 (16.2 Mb) 

主机上'brctl show'的输出:

 hope 6$ sudo brctl show bridge name bridge id STP enabled interfaces br0 8000.4af0ca32f588 no eth0 tap0 tap1 

一个guest虚拟机上的“ifconfig -a”输出:

 guest1# ifconfig -a eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:192.168.3.35 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:323061 errors:0 dropped:0 overruns:0 frame:0 TX packets:210150 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:298541685 (284.7 MiB) TX bytes:25958962 (24.7 MiB) Interrupt:11 Base address:0x4000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2305 errors:0 dropped:0 overruns:0 frame:0 TX packets:2305 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:481780 (470.4 KiB) TX bytes:481780 (470.4 KiB) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 

而另一位客人也是这样:

 guest2# ifconfig -a eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:192.168.3.36 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:62641 errors:0 dropped:0 overruns:0 frame:0 TX packets:25718 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10789140 (10.2 MiB) TX bytes:2012261 (1.9 MiB) Interrupt:11 Base address:0x4000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:182 errors:0 dropped:0 overruns:0 frame:0 TX packets:182 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:25798 (25.1 KiB) TX bytes:25798 (25.1 KiB) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 

我终于找出了正确的答案。

简答:MAC地址冲突。

长答案:对于每个虚拟机,qemu创build一个虚拟网卡。 它为此虚拟NIC分配一个MAC地址。 默认情况下,它为每个NIC分配一个固定的地址(52:54:00:12:34:56)。 如果您在同一个主机上启动多个guest虚拟机,则它们都将获得相同的固定地址。 你甚至可以在我原来的问题的ifconfig输出中看到这个。 当然,如果你将客户桥接在一起,这是一个问题,因为它与在同一个networking上具有两个具有相同MAC地址的物理机器相同。 ARP尽力而为,在他们之间来回翻转,但是很长时间,给我看到的结果。

因此,解决scheme是为每个guest虚拟机的-net参数添加“macaddr = …”标志,使每个标志具有唯一的MAC地址。 例:

 # qemu-kvm -hda <disk-image1> -m 2048 -vga std -vnc :3 -net nic,vlan=0,macaddr=52:54:00:00:00:03 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup # qemu-kvm -hda <disk-image2> -m 2048 -vga std -vnc :4 -net nic,vlan=0,macaddr=52:54:00:00:00:04 -net tap,vlan=0,ifname=tap1,script=/etc/qemu-ifup 

在我看来,qemu的默认行为应该是更聪明的,但是我认为每次访客在每次启动时都会得到相同的MAC地址是相当重要的,不pipe他们是以什么顺序开始的。也许作者想不到一种方法来确保这一点。

无论如何,如果你在同一个networking上运行多个guest虚拟机(虚拟或其他),请确保你设置的MAC地址是明确的和唯一的。 否则,你会遇到同样的问题。

有两件事情可能会导致这个问题1. ldap 2. NetworkManager

所以解决这个问题,禁用ldap和NetworkManager