lkml.org 
[lkml]   [2006]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: sched_clock() uses are broken
From
Date
Russell King <rmk+lkml@arm.linux.org.uk> writes:
>
> However, this is not the case. On x86 with TSC, it returns a 54 bit
> number. This means that when t1 < t0, time_passed_ns becomes a very
> large number which no longer represents the amount of time.

Good point. For a 1Ghz system this would happen every ~0.57 years.

The problem is there is AFAIK no non destructive[1] way to find out how
many bits the TSC has

Destructive would be to overwrite it with -1 and see how many stick.

> All uses in kernel/sched.c seem to be aflicted by this problem.
>
> There are several solutions to this - the most obvious being that we
> need a function which returns the nanosecond difference between two
> sched_clock() return values, and this function needs to know how to
> handle the case where sched_clock() has wrapped.

Ok it can be done with a simple test.

>
> IOW:
>
> t0 = sched_clock();
> /* do something */
> t1 = sched_clock();
>
> time_passed = sched_clock_diff(t1, t0);
>
> Comments?

Agreed it's a problem, but probably a small one. At worst you'll get
a small scheduling hickup every half year, which should be hardly
that big an issue.

Might chose to just ignore it with a big fat comment?

-Andi

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-05-02 18:46    [W:0.098 / U:0.604 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site