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
|