* [PATCH 01/13] hrtimer: round up relative start time @ 2006-02-13 1:09 Roman Zippel 2006-02-13 10:52 ` Thomas Gleixner 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-13 1:09 UTC (permalink / raw) To: Andrew Morton, tglx, linux-kernel When starting a relative timer we have to round it up the next clock tick to avoid an early expiry. The problem is that we don't know the real clock resolution, so we have to assume the worst case, but it's basically the same as the old code did, so it won't be worse than 2.6.15 and with a better clock interface we can improve this. Signed-off-by: Roman Zippel <zippel@linux-m68k.org> --- kernel/hrtimer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-2.6-git/kernel/hrtimer.c =================================================================== --- linux-2.6-git.orig/kernel/hrtimer.c 2006-02-12 18:32:48.000000000 +0100 +++ linux-2.6-git/kernel/hrtimer.c 2006-02-12 18:32:57.000000000 +0100 @@ -419,7 +419,8 @@ hrtimer_start(struct hrtimer *timer, kti new_base = switch_hrtimer_base(timer, base); if (mode == HRTIMER_REL) - tim = ktime_add(tim, new_base->get_time()); + tim = ktime_add(ktime_add(tim, new_base->get_time()), + base->resolution); timer->expires = tim; enqueue_hrtimer(timer, new_base); ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 1:09 [PATCH 01/13] hrtimer: round up relative start time Roman Zippel @ 2006-02-13 10:52 ` Thomas Gleixner 2006-02-13 11:25 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: Thomas Gleixner @ 2006-02-13 10:52 UTC (permalink / raw) To: Roman Zippel; +Cc: Andrew Morton, linux-kernel, Ingo Molnar On Mon, 2006-02-13 at 02:09 +0100, Roman Zippel wrote: > When starting a relative timer we have to round it up the next clock > tick to avoid an early expiry. The problem is that we don't know the > real clock resolution, so we have to assume the worst case, but it's > basically the same as the old code did, so it won't be worse than 2.6.15 > and with a better clock interface we can improve this. > > Signed-off-by: Roman Zippel <zippel@linux-m68k.org> NACK This adds an artificial offset to the expiry time, for what reason? The expiry code makes sure that timers can not expire early. See: timer = rb_entry(node, struct hrtimer, node); if (now.tv64 <= timer->expires.tv64) break; in kernel/hrtimers.c:run_hrtimer_queue(), where now is already tick aligned. Please provide a testcase (or detailed use-case) which proves that this is necessary. tglx > --- > > kernel/hrtimer.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > Index: linux-2.6-git/kernel/hrtimer.c > =================================================================== > --- linux-2.6-git.orig/kernel/hrtimer.c 2006-02-12 18:32:48.000000000 +0100 > +++ linux-2.6-git/kernel/hrtimer.c 2006-02-12 18:32:57.000000000 +0100 > @@ -419,7 +419,8 @@ hrtimer_start(struct hrtimer *timer, kti > new_base = switch_hrtimer_base(timer, base); > > if (mode == HRTIMER_REL) > - tim = ktime_add(tim, new_base->get_time()); > + tim = ktime_add(ktime_add(tim, new_base->get_time()), > + base->resolution); > timer->expires = tim; > > enqueue_hrtimer(timer, new_base); ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 10:52 ` Thomas Gleixner @ 2006-02-13 11:25 ` Roman Zippel 2006-02-13 13:01 ` Ingo Molnar 2006-02-14 7:41 ` Ingo Molnar 0 siblings, 2 replies; 23+ messages in thread From: Roman Zippel @ 2006-02-13 11:25 UTC (permalink / raw) To: Thomas Gleixner; +Cc: Andrew Morton, linux-kernel, Ingo Molnar Hi, On Mon, 13 Feb 2006, Thomas Gleixner wrote: > This adds an artificial offset to the expiry time, for what reason? The > expiry code makes sure that timers can not expire early. See: > > timer = rb_entry(node, struct hrtimer, node); > if (now.tv64 <= timer->expires.tv64) > break; > > in kernel/hrtimers.c:run_hrtimer_queue(), where now is already tick > aligned. > > Please provide a testcase (or detailed use-case) which proves that this > is necessary. Let's assume a get_time() which simply returns xtime and so has a resolution of around TICK_NSEC. This means the real time when one calls get_time() is somewhere between xtime and xtime+TICK_NSEC. Assuming the real time is xtime+TICK_NSEC-1, get_time() will return xtime and a relative timer with TICK_NSEC-1 will expire immediately. The old code did this correctly. For most hardware this is not a real issue, as the delivery time is larger than the clock resolution, but unless you can guarantee it's not an issue on _any_ supported hardware, this fix is needed. As I already said this can be better fixed as soon as we have a better clock abstraction, until then this is only restores the old behaviour. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 11:25 ` Roman Zippel @ 2006-02-13 13:01 ` Ingo Molnar 2006-02-13 13:42 ` Roman Zippel 2006-02-14 7:41 ` Ingo Molnar 1 sibling, 1 reply; 23+ messages in thread From: Ingo Molnar @ 2006-02-13 13:01 UTC (permalink / raw) To: Roman Zippel; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz * Roman Zippel <zippel@linux-m68k.org> wrote: > > This adds an artificial offset to the expiry time, for what reason? The > > expiry code makes sure that timers can not expire early. See: > > > > timer = rb_entry(node, struct hrtimer, node); > > if (now.tv64 <= timer->expires.tv64) > > break; > > > > in kernel/hrtimers.c:run_hrtimer_queue(), where now is already tick > > aligned. > > > > Please provide a testcase (or detailed use-case) which proves that this > > is necessary. > > Let's assume a get_time() which simply returns xtime and so has a > resolution of around TICK_NSEC. This means the real time when one > calls get_time() is somewhere between xtime and xtime+TICK_NSEC. > Assuming the real time is xtime+TICK_NSEC-1, get_time() will return > xtime and a relative timer with TICK_NSEC-1 will expire immediately. > The old code did this correctly. For most hardware this is not a real > issue, as the delivery time is larger than the clock resolution, but > unless you can guarantee it's not an issue on _any_ supported > hardware, this fix is needed. As I already said this can be better > fixed as soon as we have a better clock abstraction, until then this > is only restores the old behaviour. but there is no 'old behavior' to restore to. The +1 to itimer intervals caused artifacts that were hitting users and caused 2.4 -> 2.6 itimer regressions, which hrtimers fixed. E.g.: http://bugzilla.kernel.org/show_bug.cgi?id=3289 so i dont think restoring the first timeout of an interval timer to be increased by resolution [which your patch does] has any meaning. It 'restores' to half of what 2.6 did prior hrtimers. Doing that would be inconsistent and would push the 'sum-up' errors observed for interval timers above to be again observable in user-space (if user-space does a series of timeouts). What's the point? Ingo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 13:01 ` Ingo Molnar @ 2006-02-13 13:42 ` Roman Zippel 2006-02-13 14:44 ` Ingo Molnar 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-13 13:42 UTC (permalink / raw) To: Ingo Molnar; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz Hi, On Mon, 13 Feb 2006, Ingo Molnar wrote: > but there is no 'old behavior' to restore to. The +1 to itimer intervals > caused artifacts that were hitting users and caused 2.4 -> 2.6 itimer > regressions, which hrtimers fixed. E.g.: > > http://bugzilla.kernel.org/show_bug.cgi?id=3289 Ingo, please read correctly, this is mainly about interval timers, which my patch doesn't change. My patch only fixes the initial start time. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 13:42 ` Roman Zippel @ 2006-02-13 14:44 ` Ingo Molnar 2006-02-13 15:49 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: Ingo Molnar @ 2006-02-13 14:44 UTC (permalink / raw) To: Roman Zippel; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz * Roman Zippel <zippel@linux-m68k.org> wrote: > Hi, > > On Mon, 13 Feb 2006, Ingo Molnar wrote: > > > but there is no 'old behavior' to restore to. The +1 to itimer intervals > > caused artifacts that were hitting users and caused 2.4 -> 2.6 itimer > > regressions, which hrtimers fixed. E.g.: > > > > http://bugzilla.kernel.org/show_bug.cgi?id=3289 > > Ingo, please read correctly, this is mainly about interval timers, > which my patch doesn't change. My patch only fixes the initial start > time. Yeah, i know it's about the start time - what else could it possibly be about? As i wrote: > > so i dont think restoring the first timeout of an interval timer to > > be increased by resolution [which your patch does] has any meaning. > > It 'restores' to half of what 2.6 did prior hrtimers. Doing that > > would be inconsistent and would push the 'sum-up' errors observed > > for interval timers above to be again observable in user-space (if > > user-space does a series of timeouts). What's the point? Your change changes the initial start time to be longer by +1 jiffy. My "restores to half of what 2.6 did" observation was in reference to the start time. The other half is the interval time between timeouts. If you add a +1 jiffy to the start time, you ought to do it for the interval time too. Or do it for neither - which is what we chose to do. Yes, the 2.6 regression in the bugzilla was _mainly_ about the intervals adding a comulative +1, but obviously the behavior should be symmetric: if we use our higher resolution for intervals, we should use it for the start time too. In other words: your patch re-introduces half of the bug on low-res platforms. Users doing a series of one-shot itimer calls would be exposed to the same kind of (incorrect and unnecessary) summing-up errors. What's the point? Ingo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 14:44 ` Ingo Molnar @ 2006-02-13 15:49 ` Roman Zippel 2006-02-13 19:55 ` Ingo Molnar 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-13 15:49 UTC (permalink / raw) To: Ingo Molnar; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz Hi, On Mon, 13 Feb 2006, Ingo Molnar wrote: > In other words: your patch re-introduces half of the bug on low-res > platforms. Users doing a series of one-shot itimer calls would be > exposed to the same kind of (incorrect and unnecessary) summing-up > errors. What's the point? I don't fully agree with the interval behaviour either, but here one could at least say it's correct on average. Since hrtimer is also used for nanosleep(), which I consider more important (as e.g. posix timer), this one should at least be correct and consistent with previous 2.6 releases. I don't mind fixing it properly, but just omitting the rounding here is simply not correct. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 15:49 ` Roman Zippel @ 2006-02-13 19:55 ` Ingo Molnar 2006-02-13 22:29 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: Ingo Molnar @ 2006-02-13 19:55 UTC (permalink / raw) To: Roman Zippel; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz * Roman Zippel <zippel@linux-m68k.org> wrote: > Hi, > > On Mon, 13 Feb 2006, Ingo Molnar wrote: > > > In other words: your patch re-introduces half of the bug on low-res > > platforms. Users doing a series of one-shot itimer calls would be > > exposed to the same kind of (incorrect and unnecessary) summing-up > > errors. What's the point? > > I don't fully agree with the interval behaviour either, [...] i.e. you'd want to reintroduce the comulative interval rounding bug that users noticed? Or do you have some other way to change it? I really dont see your point. > [...] but here one could at least say it's correct on average. [...] i'm not sure i understand. Are you implying by this that some current code is not "correct on average"? > Since hrtimer is also used for nanosleep(), which I consider more > important (as e.g. posix timer), this one should at least be correct > and consistent with previous 2.6 releases. [...] for me it's simple: i dont think we should reintroduce the same type of concept that was clearly causing regressions in previous 2.6 releases. Thomas, what do you think? Ingo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 19:55 ` Ingo Molnar @ 2006-02-13 22:29 ` Roman Zippel 0 siblings, 0 replies; 23+ messages in thread From: Roman Zippel @ 2006-02-13 22:29 UTC (permalink / raw) To: Ingo Molnar; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel, John Stultz Hi, On Mon, 13 Feb 2006, Ingo Molnar wrote: > > I don't fully agree with the interval behaviour either, [...] > > i.e. you'd want to reintroduce the comulative interval rounding bug that > users noticed? Or do you have some other way to change it? I really dont > see your point. And I don't want to expand on it, because otherwise this thread goes completely elsewhere again and I want to keep the focus on this patch. These are two different problems, which have have only in common that it's about rounding of time. > > Since hrtimer is also used for nanosleep(), which I consider more > > important (as e.g. posix timer), this one should at least be correct > > and consistent with previous 2.6 releases. [...] > > for me it's simple: i dont think we should reintroduce the same type of > concept that was clearly causing regressions in previous 2.6 releases. You have a weird definition of "regression", since when is a bug fix a regression? We can discuss whether it's the correct fix and I described earlier in this thread the basic problem, which the current 2.6 behaviour fixes. I'd really prefer if we could based on that discuss a proper fix, instead of just falling back to the wrong 2.4 behaviour. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-13 11:25 ` Roman Zippel 2006-02-13 13:01 ` Ingo Molnar @ 2006-02-14 7:41 ` Ingo Molnar 2006-02-14 10:18 ` Roman Zippel 2006-02-14 10:26 ` [PATCH 01/13] hrtimer: round up relative start time Thomas Gleixner 1 sibling, 2 replies; 23+ messages in thread From: Ingo Molnar @ 2006-02-14 7:41 UTC (permalink / raw) To: Roman Zippel; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel ok, lets go back to this one: * Roman Zippel <zippel@linux-m68k.org> wrote: > Let's assume a get_time() which simply returns xtime and so has a > resolution of around TICK_NSEC. This means the real time when one > calls get_time() is somewhere between xtime and xtime+TICK_NSEC. > Assuming the real time is xtime+TICK_NSEC-1, get_time() will return > xtime and a relative timer with TICK_NSEC-1 will expire immediately. i agree that on systems where get_time() has a TICK_NSEC resolution, such short timeouts are bad. i dont agree with the fix though: it penalizes platforms where ->get_time() resolution is sane. Ingo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-14 7:41 ` Ingo Molnar @ 2006-02-14 10:18 ` Roman Zippel 2006-02-14 12:20 ` [patch] hrtimer: round up relative start time on low-res arches Ingo Molnar 2006-02-14 10:26 ` [PATCH 01/13] hrtimer: round up relative start time Thomas Gleixner 1 sibling, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-14 10:18 UTC (permalink / raw) To: Ingo Molnar; +Cc: Thomas Gleixner, Andrew Morton, linux-kernel Hi, On Tue, 14 Feb 2006, Ingo Molnar wrote: > > Let's assume a get_time() which simply returns xtime and so has a > > resolution of around TICK_NSEC. This means the real time when one > > calls get_time() is somewhere between xtime and xtime+TICK_NSEC. > > Assuming the real time is xtime+TICK_NSEC-1, get_time() will return > > xtime and a relative timer with TICK_NSEC-1 will expire immediately. > > i agree that on systems where get_time() has a TICK_NSEC resolution, > such short timeouts are bad. > > i dont agree with the fix though: it penalizes platforms where > ->get_time() resolution is sane. How do you want to tell one from the other? Can we agree, that this is the behaviour 2.6 currently already has anyway? I fully agree, that this patch is not the best solution, but is it really such a problem that we can't postpone the behaviour change for a short while until we can fix it properly (i.e. via a proper clock framework)? bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* [patch] hrtimer: round up relative start time on low-res arches 2006-02-14 10:18 ` Roman Zippel @ 2006-02-14 12:20 ` Ingo Molnar 2006-02-14 21:51 ` Thomas Gleixner 2006-02-15 0:30 ` Roman Zippel 0 siblings, 2 replies; 23+ messages in thread From: Ingo Molnar @ 2006-02-14 12:20 UTC (permalink / raw) To: Andrew Morton; +Cc: Roman Zippel, Thomas Gleixner, linux-kernel find below a patch with less impact than blanket upwards rounding of relatime timeouts. This i think is better for v2.6.16 - it accurately documents the problem architectures that have low-res do_gettimeofday(), and doesnt impact other architectures. This will go away with John's GTOD patchset. I've reviewed every architecture for the (worst-case) resolution of their do_gettimeofday() implementations, and this is the result of that review. Ingo ----- CONFIG_TIME_LOW_RES is a temporary way for architectures to signal that they simply return xtime in do_gettimeoffset(). In this corner-case we want to round up by resolution when starting a relative timer, to avoid short timeouts. This will go away with the GTOD framework. Signed-off-by: Ingo Molnar <mingo@elte.hu> ---- arch/frv/Kconfig | 4 ++++ arch/h8300/Kconfig | 4 ++++ arch/m68k/Kconfig | 4 ++++ arch/m68knommu/Kconfig | 4 ++++ arch/parisc/Kconfig | 5 +++++ arch/v850/Kconfig | 4 ++++ kernel/hrtimer.c | 13 ++++++++++++- 7 files changed, 37 insertions(+), 1 deletion(-) Index: linux/arch/frv/Kconfig =================================================================== --- linux.orig/arch/frv/Kconfig +++ linux/arch/frv/Kconfig @@ -25,6 +25,10 @@ config GENERIC_HARDIRQS bool default n +config TIME_LOW_RES + bool + default y + mainmenu "Fujitsu FR-V Kernel Configuration" source "init/Kconfig" Index: linux/arch/h8300/Kconfig =================================================================== --- linux.orig/arch/h8300/Kconfig +++ linux/arch/h8300/Kconfig @@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + config ISA bool default y Index: linux/arch/m68k/Kconfig =================================================================== --- linux.orig/arch/m68k/Kconfig +++ linux/arch/m68k/Kconfig @@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + config ARCH_MAY_HAVE_PC_FDC bool depends on Q40 || (BROKEN && SUN3X) Index: linux/arch/m68knommu/Kconfig =================================================================== --- linux.orig/arch/m68knommu/Kconfig +++ linux/arch/m68knommu/Kconfig @@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + default y + source "init/Kconfig" menu "Processor type and features" Index: linux/arch/parisc/Kconfig =================================================================== --- linux.orig/arch/parisc/Kconfig +++ linux/arch/parisc/Kconfig @@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY bool default y +config TIME_LOW_RES + bool + depends on SMP + default y + config GENERIC_ISA_DMA bool Index: linux/arch/v850/Kconfig =================================================================== --- linux.orig/arch/v850/Kconfig +++ linux/arch/v850/Kconfig @@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE bool default y +config TIME_LOW_RES + bool + default y + # Turn off some random 386 crap that can affect device config config ISA bool Index: linux/kernel/hrtimer.c =================================================================== --- linux.orig/kernel/hrtimer.c +++ linux/kernel/hrtimer.c @@ -418,8 +418,19 @@ hrtimer_start(struct hrtimer *timer, kti /* Switch the timer base, if necessary: */ new_base = switch_hrtimer_base(timer, base); - if (mode == HRTIMER_REL) + if (mode == HRTIMER_REL) { tim = ktime_add(tim, new_base->get_time()); + /* + * CONFIG_TIME_LOW_RES is a temporary way for architectures + * to signal that they simply return xtime in + * do_gettimeoffset(). In this case we want to round up by + * resolution when starting a relative timer, to avoid short + * timeouts. This will go away with the GTOD framework. + */ +#ifdef CONFIG_TIME_LOW_RES + tim = ktime_add(tim, base->resolution); +#endif + } timer->expires = tim; enqueue_hrtimer(timer, new_base); ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-14 12:20 ` [patch] hrtimer: round up relative start time on low-res arches Ingo Molnar @ 2006-02-14 21:51 ` Thomas Gleixner 2006-02-15 0:30 ` Roman Zippel 1 sibling, 0 replies; 23+ messages in thread From: Thomas Gleixner @ 2006-02-14 21:51 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Roman Zippel, linux-kernel On Tue, 2006-02-14 at 13:20 +0100, Ingo Molnar wrote: > CONFIG_TIME_LOW_RES is a temporary way for architectures to signal that > they simply return xtime in do_gettimeoffset(). In this corner-case we > want to round up by resolution when starting a relative timer, to avoid > short timeouts. This will go away with the GTOD framework. > > Signed-off-by: Ingo Molnar <mingo@elte.hu> Acked-by: Thomas Gleixner <tglx@linutronix.de> ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-14 12:20 ` [patch] hrtimer: round up relative start time on low-res arches Ingo Molnar 2006-02-14 21:51 ` Thomas Gleixner @ 2006-02-15 0:30 ` Roman Zippel 2006-02-15 9:19 ` Ingo Molnar 1 sibling, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-15 0:30 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Thomas Gleixner, linux-kernel Hi, On Tue, 14 Feb 2006, Ingo Molnar wrote: > CONFIG_TIME_LOW_RES is a temporary way for architectures to signal that > they simply return xtime in do_gettimeoffset(). In this corner-case we > want to round up by resolution when starting a relative timer, to avoid > short timeouts. This will go away with the GTOD framework. This fixes the worst cases. Even the common case should somehow reflect that the relative start time should be rounded up in the same way (even if not by that much), e.g. due to rounding the current get_time() (at least for the non TIME_INTERPOLATION case) has a 1usec resolution, which should be added there. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-15 0:30 ` Roman Zippel @ 2006-02-15 9:19 ` Ingo Molnar 2006-02-15 12:26 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: Ingo Molnar @ 2006-02-15 9:19 UTC (permalink / raw) To: Roman Zippel; +Cc: Andrew Morton, Thomas Gleixner, linux-kernel, John Stultz * Roman Zippel <zippel@linux-m68k.org> wrote: > On Tue, 14 Feb 2006, Ingo Molnar wrote: > > > CONFIG_TIME_LOW_RES is a temporary way for architectures to signal that > > they simply return xtime in do_gettimeoffset(). In this corner-case we > > want to round up by resolution when starting a relative timer, to avoid > > short timeouts. This will go away with the GTOD framework. > > This fixes the worst cases. Even the common case should somehow > reflect that the relative start time should be rounded up in the same > way (even if not by that much), e.g. due to rounding the current > get_time() (at least for the non TIME_INTERPOLATION case) has a 1usec > resolution, which should be added there. yeah, agreed. That will be accurately fixed via GTOD's per-hwclock resolution values. It will have another advantage as well: e.g. the whole of m68k wont be penalized via CONFIG_TIME_LOW_RES for having a handful of sub-arches (Apollo, Sun3x, Q40) that dont have a higher resolution timer - every clock can define its own resolution. You could help that effort by porting m68k to use GTOD ;-) Ingo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-15 9:19 ` Ingo Molnar @ 2006-02-15 12:26 ` Roman Zippel 2006-02-15 20:43 ` john stultz 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-15 12:26 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Thomas Gleixner, linux-kernel, John Stultz Hi, On Wed, 15 Feb 2006, Ingo Molnar wrote: > yeah, agreed. That will be accurately fixed via GTOD's per-hwclock > resolution values. It will have another advantage as well: e.g. the > whole of m68k wont be penalized via CONFIG_TIME_LOW_RES for having a > handful of sub-arches (Apollo, Sun3x, Q40) that dont have a higher > resolution timer - every clock can define its own resolution. You could > help that effort by porting m68k to use GTOD ;-) I'll do that as soon as the perfomance is equal or better than what we have right now and expensive 64bit math in the fast path, where it's provably a waste, is not exactly encouraging. I already provided all the math and code to keep it cheap and (relatively) simple, but I don't have the time to work constantly on it, so if you'd help to integrate it into John's work it would go a lot faster. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-15 12:26 ` Roman Zippel @ 2006-02-15 20:43 ` john stultz 2006-02-16 14:10 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: john stultz @ 2006-02-15 20:43 UTC (permalink / raw) To: Roman Zippel; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel On Wed, 2006-02-15 at 13:26 +0100, Roman Zippel wrote: > Hi, > > On Wed, 15 Feb 2006, Ingo Molnar wrote: > > > yeah, agreed. That will be accurately fixed via GTOD's per-hwclock > > resolution values. It will have another advantage as well: e.g. the > > whole of m68k wont be penalized via CONFIG_TIME_LOW_RES for having a > > handful of sub-arches (Apollo, Sun3x, Q40) that dont have a higher > > resolution timer - every clock can define its own resolution. You could > > help that effort by porting m68k to use GTOD ;-) > > I'll do that as soon as the perfomance is equal or better than what we > have right now and expensive 64bit math in the fast path, where it's > provably a waste, is not exactly encouraging. I already provided all the > math and code to keep it cheap and (relatively) simple, but I don't have > the time to work constantly on it, so if you'd help to integrate it into > John's work it would go a lot faster. Hey Roman, I just wanted to make sure you know I'm not ignoring your suggestions. I do appreciate the time you have spent, and I have been continuing to work on implementing your idea. Unfortunately the code is not trivial and very much hurts the readability. I expect thats a sacrifice that will be necessary, but hopefully after some review cycles we'll be able to come to something we both like. I'm hoping to have a first pass patch I can mail this week. thanks -john ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-15 20:43 ` john stultz @ 2006-02-16 14:10 ` Roman Zippel 2006-02-16 19:06 ` john stultz 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-16 14:10 UTC (permalink / raw) To: john stultz; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel Hi, On Wed, 15 Feb 2006, john stultz wrote: > I just wanted to make sure you know I'm not ignoring your suggestions. > I do appreciate the time you have spent, and I have been continuing to > work on implementing your idea. Unfortunately the code is not trivial > and very much hurts the readability. I expect thats a sacrifice that > will be necessary, but hopefully after some review cycles we'll be able > to come to something we both like. The code could be cleaned up a little, but the main difference is that my code is much more compact, it lacks all the redundancy of your code, which makes it harder to read. My hope was here instead of putting back the code redundancy to add documentation instead, which would explain the subtleties. I actually think that the basic principle of my code is quite simple, the problem is that it's a little buried inbetween how the incremental updates are done in my prototype, so after a little cleaning and separating the special cases, I think my code would be a lot more readable. > I'm hoping to have a first pass patch I can mail this week. I'm looking forward to it. BTW What do you think how difficult it would be to rebase your patches on my NTP4 patches? In the end the simplification of my patches should also make your patches simpler, as it precalculates as much as possible and reduces the work done in the fast paths. It would avoid a lot of extra work, which you currently do. The main problem that I see is that you need to drop the ppm calculations, the new code provides a scaled nsec value per tick (tick_nsec + time_adj) and you basically only need "(update - 10^9/HZ) / cycles" to calculate the new multiplier adjustment. You also need to drop your ntp rework, the changes to the generic code should be quite simple now, basically just exporting second_overflow() and creating an alternative do_timer() entry point which doesn't call update_wall_time(). Besides some small cleanups I think my code is ready for some serious testing, but it conflicts with your NTP changes. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-16 14:10 ` Roman Zippel @ 2006-02-16 19:06 ` john stultz 2006-02-16 23:44 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: john stultz @ 2006-02-16 19:06 UTC (permalink / raw) To: Roman Zippel; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel On Thu, 2006-02-16 at 15:10 +0100, Roman Zippel wrote: > On Wed, 15 Feb 2006, john stultz wrote: > > > I just wanted to make sure you know I'm not ignoring your suggestions. > > I do appreciate the time you have spent, and I have been continuing to > > work on implementing your idea. Unfortunately the code is not trivial > > and very much hurts the readability. I expect thats a sacrifice that > > will be necessary, but hopefully after some review cycles we'll be able > > to come to something we both like. > > The code could be cleaned up a little, but the main difference is that my > code is much more compact, it lacks all the redundancy of your code, which > makes it harder to read. My hope was here instead of putting back the > code redundancy to add documentation instead, which would explain the > subtleties. > I actually think that the basic principle of my code is quite simple, the > problem is that it's a little buried inbetween how the incremental updates > are done in my prototype, so after a little cleaning and separating the > special cases, I think my code would be a lot more readable. I'll admit I'm slow, but since it has taken me a number of weeks to sort out exactly the details of what is being done in your implementation, and I *still* have bugs after re-implementing it, I'd not claim your code is simple. The potential to be very precise and efficient: yes, but not so trivial to follow. (This is why I cringe at the idea of trying to implement it for each clock like you're prototype suggested.) Maybe when I send out the patch you can suggest improvements to the comments or other ways to better clarify the code as you suggested above. > > I'm hoping to have a first pass patch I can mail this week. > > I'm looking forward to it. > BTW What do you think how difficult it would be to rebase your patches on > my NTP4 patches? I'd be very much open to it, although I haven't seen any further updates to the code since I mailed you some feedback on them. Have you had a chance to follow up on those? > In the end the simplification of my patches should also > make your patches simpler, as it precalculates as much as possible and > reduces the work done in the fast paths. It would avoid a lot of extra > work, which you currently do. Well, I'm still cautious, since it still has some dependencies on HZ (see equation below), which I'm trying to avoid. However I don't think your patches keep me from getting the info I need (or atleast, the info I think I need ;). They do seem to help close the gap between what I want and what you want, so I think they are a good step forward. > The main problem that I see is that you need to drop the ppm calculations, > the new code provides a scaled nsec value per tick (tick_nsec + time_adj) > and you basically only need "(update - 10^9/HZ) / cycles" to calculate the > new multiplier adjustment. My test patch does this already, although for now it calculates the ntp interval (something like "tick_nsec + time_adj" in your code) from the ppm value. That calculation would hopefully be replaced w/ some ntp_get_interval() call that would pull the equivalent from your code. > You also need to drop your ntp rework, the changes to the generic code > should be quite simple now, basically just exporting second_overflow() > and creating an alternative do_timer() entry point which doesn't call > update_wall_time(). > > Besides some small cleanups I think my code is ready for some serious > testing, but it conflicts with your NTP changes. If you think they're ready, mail them to the list and I'll look them over then take a swing at re-basing my work on top of them. thanks -john ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-16 19:06 ` john stultz @ 2006-02-16 23:44 ` Roman Zippel 2006-02-17 0:28 ` john stultz 0 siblings, 1 reply; 23+ messages in thread From: Roman Zippel @ 2006-02-16 23:44 UTC (permalink / raw) To: john stultz; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel Hi, On Thu, 16 Feb 2006, john stultz wrote: > I'll admit I'm slow, but since it has taken me a number of weeks to sort > out exactly the details of what is being done in your implementation, > and I *still* have bugs after re-implementing it, I'd not claim your > code is simple. The potential to be very precise and efficient: yes, but > not so trivial to follow. Wow, I didn't expect it to be that difficult, I'm sorry about that. :) Next time I'll split it apart into the basic parts, so it should be easier to read and follow. > (This is why I cringe at the idea of trying to implement it for each > clock like you're prototype suggested.) I didn't suggest that, the function itself is already quite generic and could be called like "clock_update(cycles);". What I'm suggesting is to make it a template function, so that one create a optimized version based on some parameters (e.g. it's possible to optimize some parts away by making them constant). That's not really necessary for the first version, only that a clock can call the "clock_update(cycles);" directly from it's interrupt handler, later it can be replaced with an optimized version. > Maybe when I send out the patch you can suggest improvements to the > comments or other ways to better clarify the code as you suggested > above. Now I'm really curious. :) > I'd be very much open to it, although I haven't seen any further updates > to the code since I mailed you some feedback on them. Have you had a > chance to follow up on those? Not yet, but it would only minor updates (mostly documenting it better and cleanups as you suggested), the basic stuff is still the same. > > In the end the simplification of my patches should also > > make your patches simpler, as it precalculates as much as possible and > > reduces the work done in the fast paths. It would avoid a lot of extra > > work, which you currently do. > > Well, I'm still cautious, since it still has some dependencies on HZ > (see equation below), which I'm trying to avoid. There is no real dependency on HZ, it's just that the synchronisations steps and incremental updates are done in fixed intervals. The interval could easily be independent of HZ. bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-16 23:44 ` Roman Zippel @ 2006-02-17 0:28 ` john stultz 2006-02-17 15:02 ` Roman Zippel 0 siblings, 1 reply; 23+ messages in thread From: john stultz @ 2006-02-17 0:28 UTC (permalink / raw) To: Roman Zippel; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel On Fri, 2006-02-17 at 00:44 +0100, Roman Zippel wrote: > On Thu, 16 Feb 2006, john stultz wrote: > > > In the end the simplification of my patches should also > > > make your patches simpler, as it precalculates as much as possible and > > > reduces the work done in the fast paths. It would avoid a lot of extra > > > work, which you currently do. > > > > Well, I'm still cautious, since it still has some dependencies on HZ > > (see equation below), which I'm trying to avoid. > > There is no real dependency on HZ, it's just that the synchronisations > steps and incremental updates are done in fixed intervals. The interval > could easily be independent of HZ. Ok, one concern was that in the cycle->interval conversion, some interval lengths are not possible due to the clock's resolution. In my mind, I'd like to provide a interval length to the NTP code and have the NTP code provide an adjusted interval which can be used in error accumulation and the resulting multiplier adjustment. Or, we just write off the cycle->interval error as part of the clock's natural error and let the NTP daemon compensate for it. Your thoughts? Regardless, the point is that I'd prefer if the timeofday code to be able to specify to the NTP code what the interval length is, rather then the other way around. Does that sound reasonable? thanks -john ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [patch] hrtimer: round up relative start time on low-res arches 2006-02-17 0:28 ` john stultz @ 2006-02-17 15:02 ` Roman Zippel 0 siblings, 0 replies; 23+ messages in thread From: Roman Zippel @ 2006-02-17 15:02 UTC (permalink / raw) To: john stultz; +Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, linux-kernel Hi, On Thu, 16 Feb 2006, john stultz wrote: > > There is no real dependency on HZ, it's just that the synchronisations > > steps and incremental updates are done in fixed intervals. The interval > > could easily be independent of HZ. > > Ok, one concern was that in the cycle->interval conversion, some > interval lengths are not possible due to the clock's resolution. > > In my mind, I'd like to provide a interval length to the NTP code and > have the NTP code provide an adjusted interval which can be used in > error accumulation and the resulting multiplier adjustment. > > Or, we just write off the cycle->interval error as part of the clock's > natural error and let the NTP daemon compensate for it. Your thoughts? Here my example does correct for this error, it accumulates the difference between the clock update and the desired ntp update and once it's large enough, it's corrected by a multiplier change. > Regardless, the point is that I'd prefer if the timeofday code to be > able to specify to the NTP code what the interval length is, rather then > the other way around. Does that sound reasonable? I don't understand what the advantage would be, the NTP code needs both and the time interval is actually the variable part, so AFAICT it would make the NTP code only more complex. (NTP changes the amount of time to be passed per tick to adjust clock speed and not the other way around.) bye, Roman ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 01/13] hrtimer: round up relative start time 2006-02-14 7:41 ` Ingo Molnar 2006-02-14 10:18 ` Roman Zippel @ 2006-02-14 10:26 ` Thomas Gleixner 1 sibling, 0 replies; 23+ messages in thread From: Thomas Gleixner @ 2006-02-14 10:26 UTC (permalink / raw) To: Ingo Molnar; +Cc: Roman Zippel, Andrew Morton, linux-kernel On Tue, 2006-02-14 at 08:41 +0100, Ingo Molnar wrote: > ok, lets go back to this one: > > * Roman Zippel <zippel@linux-m68k.org> wrote: > > > Let's assume a get_time() which simply returns xtime and so has a > > resolution of around TICK_NSEC. This means the real time when one > > calls get_time() is somewhere between xtime and xtime+TICK_NSEC. > > Assuming the real time is xtime+TICK_NSEC-1, get_time() will return > > xtime and a relative timer with TICK_NSEC-1 will expire immediately. > > i agree that on systems where get_time() has a TICK_NSEC resolution, > such short timeouts are bad. > > i dont agree with the fix though: it penalizes platforms where > ->get_time() resolution is sane. Thats true, but we have no information about get_time() resolution at all. So the only way to work around that for now is Romans fix even if we add the penalty to _all_ platforms. tglx ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2006-02-17 15:02 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-02-13 1:09 [PATCH 01/13] hrtimer: round up relative start time Roman Zippel 2006-02-13 10:52 ` Thomas Gleixner 2006-02-13 11:25 ` Roman Zippel 2006-02-13 13:01 ` Ingo Molnar 2006-02-13 13:42 ` Roman Zippel 2006-02-13 14:44 ` Ingo Molnar 2006-02-13 15:49 ` Roman Zippel 2006-02-13 19:55 ` Ingo Molnar 2006-02-13 22:29 ` Roman Zippel 2006-02-14 7:41 ` Ingo Molnar 2006-02-14 10:18 ` Roman Zippel 2006-02-14 12:20 ` [patch] hrtimer: round up relative start time on low-res arches Ingo Molnar 2006-02-14 21:51 ` Thomas Gleixner 2006-02-15 0:30 ` Roman Zippel 2006-02-15 9:19 ` Ingo Molnar 2006-02-15 12:26 ` Roman Zippel 2006-02-15 20:43 ` john stultz 2006-02-16 14:10 ` Roman Zippel 2006-02-16 19:06 ` john stultz 2006-02-16 23:44 ` Roman Zippel 2006-02-17 0:28 ` john stultz 2006-02-17 15:02 ` Roman Zippel 2006-02-14 10:26 ` [PATCH 01/13] hrtimer: round up relative start time Thomas Gleixner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox