qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]