qemu-block
[Top][All Lists]
Advanced

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

Re: [Qemu-block] [PATCH v3 09/21] block: Add average I/O queue depth to


From: Alberto Garcia
Subject: Re: [Qemu-block] [PATCH v3 09/21] block: Add average I/O queue depth to BlockDeviceTimedStats
Date: Fri, 23 Oct 2015 15:47:52 +0200
User-agent: Notmuch/0.13.2 (http://notmuchmail.org) Emacs/23.2.1 (i486-pc-linux-gnu)

On Fri 23 Oct 2015 03:31:38 PM CEST, Stefan Hajnoczi <address@hidden> wrote:
>> +uint64_t timed_average_sum(TimedAverage *ta, uint64_t *elapsed)
>> +{
>> +    TimedAverageWindow *w;
>> +    check_expirations(ta);
>> +    w = current_window(ta);
>> +    if (elapsed != NULL) {
>> +        int64_t remaining = w->expiration - 
>> qemu_clock_get_ns(ta->clock_type);
>> +        *elapsed = ta->period - remaining;
>
> There is no guarantee that qemu_clock_get_ns(ta->clock_type) executes
> quickly after check_expirations(ta).  If the system is under heavy load
> and swapping, maybe significant amounts of time have passed.  This race
> condition could result in bad elapsed values being calculated.
>
> We need to be careful about elapsed <= 0 values, especially if the
> caller divides by elapsed and is exposed to Divide By 0 exceptions.
>
> Either check_expirations() needs to integrate qemu_clock_get_ns() or we
> simply need to deal with bogus values here.

Good catch, thanks!

I think having check_expirations() return the time is probably the best
option.

Berto



reply via email to

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