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

Re: [Xen-devel] [PATCH] Fix clock_gettime to increment monotonically onPV-domain/x86



An alternative to a spin lock would be to use a 64-bit variable storing the raw
nanosecond value, and use cmpxchg to check/update it. I did it this way for
the clocksource monotonicity:

static cycle_t xen_clocksource_read(void)
{
        int cpu = get_cpu();
        struct shadow_time_info *shadow = &per_cpu(shadow_time, cpu);
        cycle_t ret;

        get_time_values_from_xen(cpu);

        ret = shadow->system_timestamp + get_nsec_offset(shadow);

        put_cpu();

#ifdef CONFIG_SMP
        for (;;) {
                static cycle_t last_ret;
#ifndef CONFIG_64BIT
                cycle_t last = cmpxchg64(&last_ret, 0, 0);
#else
                cycle_t last = last_ret;
#define cmpxchg64 cmpxchg
#endif

                if ((s64)(ret - last) < 0) {
                        if (last - ret > permitted_clock_jitter
                            && printk_ratelimit())
                                printk(KERN_WARNING "clocksource/%d: "
                                       "Time went backwards: "
                                       "delta=%Ld shadow=%Lu offset=%Lu\n",
                                       cpu, ret - last,
                                       shadow->system_timestamp,
                                       get_nsec_offset(shadow));
                        ret = last;
                }
                if (cmpxchg64(&last_ret, last, ret) == last)
                        break;
        }
#endif

        return ret;
}

Jan

>>> Keir Fraser <keir@xxxxxxxxxxxxx> 15.06.07 12:26 >>>
Yeah, it needs a spinlock. Which is a shame, but it's still going to be much
faster than trapping into the hypervisor, which is the only other way we're
going to be able to achieve guaranteed monotonic time.

We could avoid the lock if we guaranteed monotonic time only per task
(thread). Or is that not really good enough? :-)

 -- Keir

On 15/6/07 11:19, "Jan Beulich" <jbeulich@xxxxxxxxxx> wrote:

> I'm afraid this isn't MP-safe - you're in a (pseudo-)read-locked section of
> code,
> yet write a global variable (and even in two pieces). Jan
> 
>>>> Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx> 15.06.07 11:47 >>>
> Hi, Keir
> 
>   This patch intends to increment do_gettimeofday monotonically.
> This is for PV-domain/x86.
> 
> Signed-off-by: Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx>
> 
> By applying patch, the time rollback for SMP is fixed.
> This is important fixes for database software.
> 
> Thanks
> Atsushi SAKAI
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx 
> http://lists.xensource.com/xen-devel 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.