On 04.01.2012 15:14, Paolo Bonzini wrote:
On 01/04/2012 02:08 PM, Peter Lieven wrote:
thus my only option at the moment is to limit the runtime of the while
loop in stage 2 or
are there any post 1.0 patches in git that might already help?
No; even though (as I said) people are aware of the problems and do
plan to fix them, don't hold your breath. :(
ok, just for the record. if someone wants the time limit patch for the
while loop in stage 2 (which solves the problem
for me) and after some tweaking is able to provide a throughput of
approx. 450MB/s in my case, i attached it.
it also solves the case that due to a lot of dups the rate_limit does
not kick in and end the while loop.
--- qemu-kvm-1.0/arch_init.c.orig 2012-01-04 14:21:02.000000000 +0100
+++ qemu-kvm-1.0/arch_init.c 2012-01-04 14:27:34.000000000 +0100
@@ -301,6 +301,8 @@
bytes_transferred_last = bytes_transferred;
bwidth = qemu_get_clock_ns(rt_clock);
+ int pages_read = 0;
+
while ((ret = qemu_file_rate_limit(f)) == 0) {
int bytes_sent;
@@ -309,6 +311,11 @@
if (bytes_sent == 0) { /* no more blocks */
break;
}
+ if (!(++pages_read & 0xff)) {
+ if ((qemu_get_clock_ns(rt_clock) - bwidth) >
migrate_max_downtime())
+ break; /* we have spent more than allowed downtime in this
iteration */
+ }
}
if (ret < 0) {