PageRenderTime 10ms CodeModel.GetById 7ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

#! | 74 lines | 61 code | 13 blank | 0 comment | 0 complexity | aa983c11fbde65ee0261e2f3cf4c6e95 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, LGPL-2.0, LGPL-2.1, BSD-2-Clause, 0BSD, JSON, AGPL-1.0, GPL-2.0
 1adjtime, tick and tickadj:
 4The SGI value for HZ is 100 under Irix 4, with the system clock running
 5in nominal mode (ftimer off), so the value for tick is 10000 usec.
 6Tickadj is a bit more tricky because of the behaviour of adjtime(),
 7which seems to try to perform the correction over 100-200 seconds, with
 8a rate limit of 0.04 secs/sec for large corrections.  Corrections of
 9less than 0.017 seconds generally complete in less than a second,
12Some measured rates are as follows:
14	Delta       Rate (sec/sec)
16	> 1		0.04
17	0.75		0.04
18	0.6		0.004
19	0.5		0.004
20	0.4		0.0026
21	0.3		0.0026
22	0.2		0.0013
23	0.1		0.0015
24	0.05		0.0015
25	0.02		0.0003
26	0.01		0.015
27Strange.  Anyway, since adjtime will complete adjustments of less than
2817msec in less than a second, whether the fast clock is on or off, I
29have used a value of 150usec/tick for the tickadj value.
31Fast clock:
34I get smoother timekeeping if I turn on the fast clock, thereby making
35the clock tick at 1kHz rather than 100Hz.  With the fast clock off, I
36see a sawtooth clock offset with an amplitude of 5msec.  With it on,
37the amplitude drops to 0.5msec (surprise!).  This may be a consequence
38of having a local reference clock which spits out the time at exactly
39one-second intervals - I am probably seeing sampling aliasing between
40that and the machine clock.  This may all be irrelevant for machines
41without a local reference clock.  Fiddling with the fast clock doesn't
42seem to compromise the above choices for tick and tickadj.
44I use the "ftimer" program to switch the fast clock on when the system
45goes into multiuser mode, but you can set the "fastclock" flag in
46/usr/sysgen/master.d/kernel to have it on by default.  See ftimer(1).
51Irix has a kernel variable called timetrim which adjusts the system
52time increment, effectively trimming the clock frequency.  Xntpd could
53use this rather than adjtime() to do it's frequency trimming, but I
54haven't the time to explore this.  There is a utility program,
55"timetrim", in the util directory which allows manipulation of the
56timetrim value in both SGI and xntpd native units.  You can fiddle with
57default timetrim value in /usr/sysgen/master.d/kernel, but I think
58that's ugly.  I just use xntpd to figure out the right value for
59timetrim for a particular CPU and then set it using "timetrim" when
60going to multiuser mode.
62Serial I/O latency:
65If you use a local clock on an RS-232 line, look into the kernel
66configuration stuff with regard to improving the input latency (check
67out /usr/sysgen/master.d/[sduart|cdsio]).  I have a Kinemetrics OM-DC
68hooked onto /dev/ttyd2 (the second CPU board RS-232 port) on an SGI
69Crimson, and setting the duart_rsrv_duration flag to 0 improves things
70a bit.
7312 Jan 93
74Steve Clift, CSIRO Marine Labs, Hobart, Australia (