[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



A spinlock is almost certainly no slower. Since the critical region is so
tiny the likelihood of spinning is very small. And the spin_lock() fast path
is probably faster than a CMPXCHG8B.

 -- Keir

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

> 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



_______________________________________________
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®.