Restoring KVM guest from saved state results in hung guest with non-virtio devices - in lucid
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libvirt (Ubuntu) |
Confirmed
|
Low
|
Unassigned |
Bug Description
The dom0 host is a fresh install of Ubuntu Lucid
ii qemu-kvm 0.12.3+
ii libvirt-bin 0.7.5-5ubuntu17
ii libvirt0 0.7.5-5ubuntu17
kernel 2.6.32-
The domU is a Ubuntu Lucid created with ubuntu-vm-builder:
ubuntu-vm-builder kvm lucid \
--domain vm2 --dest vm2 --hostname vm2 \
--mem 256 --user user --pass password \
--ip 10.0.24.200 --mask 255.255.255.0 --net 10.0.24.0 \
--bcast 10.0.24.255 --gw 10.0.24.253 --dns 10.0.5.220 --bridge=br0 \
--libvirt qemu:///system \
--addpkg openssh-server \
--addpkg acpid \
--addpkg acpi-support \
--addpkg screen
virsh suspend/restore works ok.
virsh save domain /tmp/domain.state works ok
virsh restore /tmp/domain.state claims to work, but then connect via vnc, or serial console reveals a "hung" guest, unsreponsive to any input.
This is different than a previously reported kernel panic in the guest.
The kvm process on dom0 is consuming 100% of cpu.
Stracing the process reveals...
8949 ioctl(13, 0xae80, 0) = 0
8938 <... select resumed> ) = 1 (in [18], left {0, 970198})
8949 ioctl(13, 0xae80 <unfinished ...>
8938 read(18, <unfinished ...>
8949 <... ioctl resumed> , 0) = 0
8938 <... read resumed> "\16\0\
0\0\0\0\
8949 futex(0x825f804, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
8938 rt_sigaction(
0
8938 write(8, "\0", 1) = 1
8938 write(17, "\1\0\0\0\0\0\0\0", 8) = 8
8938 read(18, 0xbfc53adc, 128) = -1 EAGAIN (Resource temporarily unavailable)
8938 gettimeofday(
8938 clock_gettime(
8938 timer_gettime(0, {it_interval={0, 0}, it_value={0, 0}}) = 0
8938 timer_settime(0, 0, {it_interval={0, 0}, it_value={0, 250000}}, NULL) = 0
8938 clock_gettime(
8938 clock_gettime(
8938 clock_gettime(
8938 gettimeofday(
8938 clock_gettime(
8938 timer_gettime(0, {it_interval={0, 0}, it_value={0, 13378}}) = 0
8938 gettimeofday(
8938 futex(0x825f804, FUTEX_WAKE_PRIVATE, 1) = 1
8949 <... futex resumed> ) = 0
8938 select(67, [7 10 14 15 16 18 19 66], [], [], {1, 0} <unfinished ...>
8949 futex(0x825f804, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
8938 <... select resumed> ) = 3 (in [7 16 18], left {0, 999996})
8949 <... futex resumed> ) = 0
8938 read(18, <unfinished ...>
8949 ioctl(13, 0xae80 <unfinished ...>
8938 <... read resumed> "\16\0\
8949 <... ioctl resumed> , 0) = 0
8938 rt_sigaction(
8949 futex(0x825f804, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
8938 <... rt_sigaction resumed> {0x80524e0, ~[KILL STOP RTMIN RT_1], 0}, 8) = 0
8938 write(8, "\0", 1) = 1
8938 write(17, "\1\0\0\0\0\0\0\0", 8) = 8
8938 read(18, 0xbfc53adc, 128) = -1 EAGAIN (Resource temporarily unavailable)
8938 read(16, "\2\0\0\0\0\0\0\0", 4096) = 8
8938 read(16, 0xbfc52b6c, 4096) = -1 EAGAIN (Resource temporarily unavailable)
8938 read(7, "\0\0", 512) = 2
8938 read(7, 0xbfc5396c, 512) = -1 EAGAIN (Resource temporarily unavailable)
8938 gettimeofday(
8938 clock_gettime(
8938 timer_gettime(0, {it_interval={0, 0}, it_value={0, 0}}) = 0
8938 timer_settime(0, 0, {it_interval={0, 0}, it_value={0, 29000000}}, NULL) = 0
8938 clock_gettime(
8938 clock_gettime(
8938 gettimeofday(
8938 futex(0x825f804, FUTEX_WAKE_PRIVATE, 1) = 1
8949 <... futex resumed> ) = 0
8938 select(67, [7 10 14 15 16 18 19 66], [], [], {1, 0} <unfinished ...>
8949 futex(0x825f804, FUTEX_WAKE_PRIVATE, 1) = 0
8949 ioctl(13, 0xae80, 0) = 0
8949 ioctl(13, 0xae80, 0) = 0
8949 ioctl(13, 0xae80, 0) = 0
8949 ioctl(13, 0xae80, 0) = 0
8949 ioctl(13, 0xae80, 0) = 0
Those file descriptors are:
# ls -l /proc/8938/fd
total 0
lr-x------ 1 root root 64 2010-04-05 15:08 0 -> /tmp/52.state
l-wx------ 1 root root 64 2010-04-05 15:08 1 -> /var/log/
lrwx------ 1 root root 64 2010-04-05 15:08 10 -> anon_inode:
lrwx------ 1 root root 64 2010-04-05 15:08 11 -> /root/52/disk.1
lrwx------ 1 root root 64 2010-04-05 15:08 12 -> /root/52/disk.2
lrwx------ 1 root root 64 2010-04-05 15:08 13 -> anon_inode:kvm-vcpu
lrwx------ 1 root root 64 2010-04-05 15:08 14 -> socket:[3817853]
lrwx------ 1 root root 64 2010-04-05 15:08 15 -> socket:[3817861]
lrwx------ 1 root root 64 2010-04-05 15:08 16 -> anon_inode:
lrwx------ 1 root root 64 2010-04-05 15:08 17 -> anon_inode:
lrwx------ 1 root root 64 2010-04-05 15:08 18 -> anon_inode:
lrwx------ 1 root root 64 2010-04-05 15:08 19 -> socket:[3818303]
l-wx------ 1 root root 64 2010-04-05 15:08 2 -> /var/log/
lrwx------ 1 root root 64 2010-04-05 15:08 3 -> socket:[3817846]
lrwx------ 1 root root 64 2010-04-05 15:08 4 -> /dev/ptmx
lrwx------ 1 root root 64 2010-04-05 15:08 5 -> /dev/kvm
lrwx------ 1 root root 64 2010-04-05 15:08 6 -> anon_inode:kvm-vm
lrwx------ 1 root root 64 2010-04-05 15:08 66 -> /dev/net/tun
lr-x------ 1 root root 64 2010-04-05 15:08 7 -> pipe:[3817851]
l-wx------ 1 root root 64 2010-04-05 15:08 8 -> pipe:[3817851]
lrwx------ 1 root root 64 2010-04-05 15:08 9 -> /root/52/disk.0
Looks very similar to this:
http://<email address hidden>
Same results with libvirt 0.7.7
Changed in libvirt (Ubuntu): | |
status: | Incomplete → Confirmed |
summary: |
Restoring KVM guest from saved state results in hung guest with non- - virtio devices + virtio devices - in lucid |
See also perhaps:
https:/ /bugzilla. redhat. com/show_ bug.cgi? id=553689