qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2] block: Switch to host monotonic clock for IO


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2] block: Switch to host monotonic clock for IO throttling
Date: Mon, 23 Mar 2015 09:10:27 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0


On 23/03/2015 06:24, Fam Zheng wrote:
> Currently, throttle timers won't make any progress when VCPU is not
> running, which would stall the request queue in utils, qtest, vm
> suspending, and live migration without special handling.
> 
> For example in bdrv_drain_all, all requests are resumed immediately
> without taking throttling limit into account. This means whenever it is
> called, IO throttling goes ineffective (examples: system reset,
> migration and many block job operations.).
> 
> This might be some loophole that guest could exploit.
> 
> If we use the host clock, we can later just trust the nested poll when
> waiting for requests.
> 
> Note that for qemu-iotests case 093, which sets up qtest when running
> QEMU, we still use vm clock so the script can control the clock stepping
> in order to be deterministic.
> 
> Signed-off-by: Fam Zheng <address@hidden>

Reviewed-by: Paolo Bonzini <address@hidden>

> ---
> v2: Don't break qemu-iotests 093.
> ---
>  block.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/block.c b/block.c
> index 0fe97de..89a1d5b 100644
> --- a/block.c
> +++ b/block.c
> @@ -30,6 +30,7 @@
>  #include "qapi/qmp/qjson.h"
>  #include "sysemu/block-backend.h"
>  #include "sysemu/sysemu.h"
> +#include "sysemu/qtest.h"
>  #include "qemu/notify.h"
>  #include "block/coroutine.h"
>  #include "block/qapi.h"
> @@ -181,10 +182,16 @@ static void bdrv_throttle_write_timer_cb(void *opaque)
>  /* should be called before bdrv_set_io_limits if a limit is set */
>  void bdrv_io_limits_enable(BlockDriverState *bs)
>  {
> +    int clock_type = QEMU_CLOCK_REALTIME;
> +
> +    if (qtest_enabled()) {
> +        /* For testing block IO throttling only */
> +        clock_type = QEMU_CLOCK_VIRTUAL;
> +    }
>      assert(!bs->io_limits_enabled);
>      throttle_init(&bs->throttle_state,
>                    bdrv_get_aio_context(bs),
> -                  QEMU_CLOCK_VIRTUAL,
> +                  clock_type,
>                    bdrv_throttle_read_timer_cb,
>                    bdrv_throttle_write_timer_cb,
>                    bs);
> 



reply via email to

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