Source-Changes-D archive

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

Re: CVS commit: src/sys/arch



On Thu, May 21, 2020 at 11:19:49PM +0200, Joerg Sonnenberger wrote:
> On Thu, May 21, 2020 at 09:12:31PM +0000, Andrew Doran wrote:
> > Module Name:	src
> > Committed By:	ad
> > Date:		Thu May 21 21:12:31 UTC 2020
> > 
> > Modified Files:
> > 	src/sys/arch/x86/acpi: acpi_wakeup.c
> > 	src/sys/arch/x86/include: i82489var.h
> > 	src/sys/arch/x86/x86: cpu.c lapic.c x86_machdep.c
> > 	src/sys/arch/xen/x86: cpu.c
> > 	src/sys/arch/xen/xen: hypervisor.c xen_clock.c
> > 
> > Log Message:
> > - Recalibrate the APIC timer using the TSC, once the TSC has in turn been
> >   recalibrated using the HPET.  This gets the clock interrupt firing more
> >   closely to HZ.
> 
> Why using the TSC and not the HPET directly? For systems with HPET, same
> question with the ACPI / PCI timer.

The idea I'm going with is:

The TSC is precise and very quick to read, far more so than the other timers
where it's at least 0.5-1us to pull a value from the counter register.  To
get around slowness of the other timers the TSC is calibrated with respect
to the HPET over a long span (seconds).  I have no objection to revisiting
it if we can do better, but this is at least much better than where we were
before.

kern.timecounter.choice = TSC(q=3000, f=1000000000 Hz) lapic(q=-100, f=200000000 Hz) clockinterrupt(q=0, f=100 Hz) hpet0(q=2000, f=14318180 Hz) ACPI-Fast(q=1000, f=3579545 Hz) i8254(q=100, f=1193182 Hz) dummy(q=-1000000, f=1000000 Hz)
kern.timecounter.choice = TSC(q=3000, f=2500000000 Hz) lapic(q=-100, f=100000000 Hz) clockinterrupt(q=0, f=100 Hz) ichlpcib0(q=1000, f=3579545 Hz) hpet0(q=2000, f=14318180 Hz) ACPI-Fast(q=1000, f=3579545 Hz) i8254(q=100, f=1193182 Hz) dummy(q=-1000000, f=1000000 Hz)

Andrew


Home | Main Index | Thread Index | Old Index