[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 1/2] block: add the support to drain throttle
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH v3 1/2] block: add the support to drain throttled requests |
Date: |
Mon, 12 Mar 2012 16:30:05 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120216 Thunderbird/10.0.1 |
Il 12/03/2012 16:25, Zhi Yong Wu ha scritto:
> > > - qemu_aio_flush();
> > > + QTAILQ_FOREACH(bs, &bdrv_states, list) {
> > > + do {
> > > + qemu_co_queue_restart_all(&bs->throttled_reqs);
> > > + qemu_aio_flush();
> > > + } while (!qemu_co_queue_empty(&bs->throttled_reqs));
> > > + }
> >
> > Even this is not enough. Block device 2 could start a throttled request
> > on block device 1.
>
> I think that this should be allowed here. It does not affect the final
> result. All throttled requests for all disks are drained.
Unfortunately, that depends on the order of block devices. It needs to
be something like this:
do {
qemu_aio_flush();
busy = false;
QTAILQ_FOREACH(bs, &bdrv_states, list) {
if (!qemu_co_queue_empty(&bs->throttled_reqs)) {
qemu_co_queue_restart_all(&bs->throttled_reqs);
busy = true;
}
}
} while (busy);
This means that bdrv_drain() cannot be implemented. The device models
can "drain themselves", but for example monitor commands must still rely
on bdrv_drain_all().
Paolo