On Mon, Nov 13, 2017 at 2:29 PM, Alberto Garcia <be...@igalia.com> wrote: > On Fri 10 Nov 2017 04:19:34 PM CET, Stefan Hajnoczi wrote: >> I/O requests hang after stop/cont commands at least since QEMU 2.10.0 >> with -drive iops=100: >> >> (guest)$ dd if=/dev/zero of=/dev/vdb oflag=direct count=1000 >> (qemu) stop >> (qemu) cont >> ...I/O is stuck... >> >> This happens because blk_set_aio_context() detaches the ThrottleState >> while requests may still be in flight: >> >> if (tgm->throttle_state) { >> throttle_group_detach_aio_context(tgm); >> throttle_group_attach_aio_context(tgm, new_context); >> } >> >> This patch encloses the detach/attach calls in a drained region so no >> I/O request is left hanging. Also add assertions so we don't make the >> same mistake again in the future. > > I'm wondering about the implications of this change... is it possible > now to bypass the I/O limits simply by stopping and quickly resuming the > VM? And is that a problem?
bdrv_set_aio_context() already drains so this patch doesn't change existing behavior with respect to bypassing throttling. It's not ideal that certain VM lifecycle operations temporarily disable throttling, but it's a trade-off since synchronous drain is usually performance sensitive and should not take a long time. Perhaps there are ways to improve the situation, I haven't studied it in detail. Stefan