Re: [RFC 13/13] m68k: mac: convert to generic clockevent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 15 Oct 2020, Arnd Bergmann wrote:

On Thu, Oct 15, 2020 at 3:19 AM Finn Thain <fthain@xxxxxxxxxxxxxxxxxxx> wrote:

On Sat, 10 Oct 2020, Arnd Bergmann wrote:

Perhaps patch 13 does not belong in this series (?).

All m68k platforms will need conversion before the TODO can be removed
from Documentation/features/time/clockevents/arch-support.txt.

Yes, correct. I marked this patch as RFC instead of PATCH, as I'm just
trying to find out where it should be headed. I would hope the other
patches can just get merged.


I wonder whether we can improve support for your proposed configuration
i.e. a system with no oneshot clockevent device.

The 16 platforms you identified are not all in that category but I suspect
that there are others which are (though they don't appear in this series
because they already use GENERIC_CLOCKEVENTS).

One useful optimization would be some way to elide oneshot clockevent
support (perhaps with the help of Link Time Optimization).

I think this already happens if one picks CONFIG_HZ_PERIODIC while
disabling HIGH_RES_TIMERS. In that case, CONFIG_TICK_ONESHOT
remains disabled.


That configuration still produces the same 5 KiB of bloat. I see that 
kernel/time/Kconfig has this --

# Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is
# only related to the tick functionality. Oneshot clockevent devices
# are supported independent of this.
config TICK_ONESHOT
        bool

But my question was really about both kinds of dead code (oneshot device 
support and oneshot tick support). Anyway, after playing with the code for 
a bit I don't see any easy way to reduce the growth in text size.

...
After looking at the chip documentation I don't think it's viable to 
use the hardware timers in the way I proposed. A VIA register access 
requires at least one full VIA clock cycle (about 1.3 us) which means 
register accesses themselves cause timing delays. They also make 
clocksource reads expensive.

I think this rules out oneshot clockevent devices because if the 
system offered such a device it would preferentially get used as a 
tick device.

So I think your approach (periodic clockevent device driven by the 
existing periodic tick interrupt) is best for this platform due to 
simplicity (not much code) and performance (good accuracy, no 
additional overhead).

Yes, makes sense. I think the one remaining problem with the periodic 
mode in this driver is that it can drop timer ticks when interrupts are 
disabled for too long, while in oneshot mode there may be a way to know 
how much time has passed since the last tick as long as the counter does 
not overflow.

Is there any benefit from adopting a oneshot tick (rather than periodic) 
if no clocksource is consulted when calculating the next interval? (I'm 
assuming NO_HZ is not in use, for reasons discussed below.)

I would agree that despite this oneshot mode is probably worse overall 
for timekeeping if the register accesses introduce systematic errors.


It probably has to be tried. But consulting a VIA clocksource on every 
tick would be expensive on this platform, so if that was the only way to 
avoid cumulative errors, I'd probably just stick with the periodic tick.

...
The arm/rpc timer seems to be roughly in the same category as most of 
the m68k ones or the i8253 counter on a PC. It's possible that some of 
them could use the same logic as drivers/clocksource/i8253.o as long as 
there is any hardware oneshot mode.


There appear to be 15 platforms in that category. 4 have no clocksource 
besides the jiffies clocksource, meaning there's no practical alternative 
to using a periodic tick, like you did in your RFC patch:

arch/m68k/apollo/config.c
arch/m68k/q40/q40ints.c
arch/m68k/sun3/sun3ints.c
arch/m68k/sun3x/time.c

The other 11 platforms in that category also have 'synthetic' clocksources 
derived from a timer reload interrupt. In 3 cases, the clocksource read 
method does not (or can not) check for a pending counter reload interrupt. 
For these also, I see no practical alternative to the approach you've 
taken in your RFC patch:

arch/m68k/68000/timers.c
arch/m68k/atari/time.c
arch/m68k/coldfire/timers.c

That leaves 8 platforms that have reliable clocksource devices which 
should be able to provide an accurate reading even in the presence of a 
dropped tick (due to drivers disabling interrupts for too long):

arch/arm/mach-rpc/time.c
arch/m68k/amiga/config.c
arch/m68k/bvme6000/config.c
arch/m68k/coldfire/sltimers.c
arch/m68k/hp300/time.c
arch/m68k/mac/via.c
arch/m68k/mvme147/config.c
arch/m68k/mvme16x/config.c

But is there any reason to adopt a oneshot tick on any of these platforms, 
if NO_HZ won't eliminate the timer interrupt that's needed to run a 
'synthetic' clocksource?



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux