Messages in this thread | | | Subject | Re: sched_clock() uses are broken | From | Andi Kleen <> | Date | 02 May 2006 18:43:45 +0200 |
| |
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/
| |