> But I don't understand why bs->slice_time is modified instead of keeping > it constant at 100 ms: > > bs->slice_time = wait_time * BLOCK_IO_SLICE_TIME * 10; > bs->slice_end += bs->slice_time - 3 * BLOCK_IO_SLICE_TIME; > if (wait) { > *wait = wait_time * BLOCK_IO_SLICE_TIME * 10; > }
In bdrv_exceed_bps_limits there is an equivalent to this with a comment. --------- /* When the I/O rate at runtime exceeds the limits, * bs->slice_end need to be extended in order that the current statistic * info can be kept until the timer fire, so it is increased and tuned * based on the result of experiment. */ bs->slice_time = wait_time * BLOCK_IO_SLICE_TIME * 10; bs->slice_end += bs->slice_time - 3 * BLOCK_IO_SLICE_TIME; if (wait) { *wait = wait_time * BLOCK_IO_SLICE_TIME * 10; } ---------- Yes I will try your patch. Regards Benoît