On 24/02/14 23:26, Paolo Bonzini wrote:
> Thanks for raising this.
>
> I noticed that mirror_run() does not throttle the first loop where it
> populates the dirty bitmap using bdrv_is_allocated_above().
This is on purpose. Does it causes a noticeable stall in the guest?
> The main
> copy loop does take the speed limit into account but perhaps that's
> broken too.
Yeah, it looks broken. Each iteration of the loop can write much more
than sectors_per_chunk sectors, but here:
if (s->common.speed) {
delay_ns = ratelimit_calculate_delay(&s->limit,
sectors_per_chunk);
} else {
delay_ns = 0;
}
the second argument is fixed. :/
Paolo
Thanks for the answer. Something is still not clear to me. Are we in
front of a bug (that means, something that could be fixed) or is this
behaviour somehow expected for some reason? More and more tests I am
doing, I get allways the same throughput chart: unlimited bandwidth when
syncronizing the disk, and smooth bandwidth limit when migrating RAM.
Joaquim