Date: Tue, 12 Nov 2002 12:13:58 -0500 (EST) From: Andrew Gallatin <gallatin@cs.duke.edu> To: "Dr. Michael Mackey" <mackey@engineering.uiowa.edu> Cc: John Baldwin <jhb@FreeBSD.ORG>, freebsd-alpha@FreeBSD.ORG Subject: Re: Extreme time drift in SMP mode Message-ID: <15825.14038.294916.650698@grasshopper.cs.duke.edu> In-Reply-To: <15825.12436.199011.915697@grasshopper.cs.duke.edu> References: <XFMail.20021112104816.jhb@FreeBSD.org> <3DD12AA2.8D84B3E2@engineering.uiowa.edu> <3DD12CE7.10103@spock.cl> <15825.12436.199011.915697@grasshopper.cs.duke.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Andrew Gallatin writes: > > Roberto de Iriarte writes: > > > Hmmm. my dmesg reads differently > > BTW, my system has only one CPU, and the clock has never drifted. > > > > That's the thing. The 2100 is unlike all other alphas, and handles > clocks differently in MP mode. To elaborate on the above, I think most MP alphas tie the clock interrupt to the boot cpu, and it ticks at hz. I think the 2100 round-robins the clock interrupt to all running cpus, therefore the boot cpu only ticks at hz/mp_ncpus. Currently, we pay attention only to the boot CPU. From alpha_clock_interrupt() in sys/alpha/alpha/interrupt.c <...> critical_enter(); #ifdef SMP /* * Only one processor drives the actual timer. */ if (PCPU_GET(cpuid) == boot_cpu_id) { #endif (*platform.clockintr)(framep); /* divide hz (1024) by 8 to get stathz (128) */ if ((++schedclk2 & 0x7) == 0) statclock((struct clockframe *)framep); #ifdef SMP } else { mtx_lock_spin(&sched_lock); hardclock_process(curthread, TRAPF_USERMODE(framep)); if ((schedclk2 & 0x7) == 0) statclock_process(curkse, TRAPF_PC(framep), TRAPF_USERMODE(framep)); mtx_unlock_spin(&sched_lock); } #endif critical_exit(); <...> Given that I know zippo about how timekeeping works, I don't know what a good fix might be. If I had a machine in front of me, I'd be tempted to try dividing the a frequency by 2 in sys/alpha/alpha/clock.c, but I'm not sure which one, or if it can be adjusted as additional processors are found and started. (which would be slightly less wrong..). Drew To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15825.14038.294916.650698>