/contrib/ntp/html/build/hints/solaris.html
https://bitbucket.org/freebsd/freebsd-head/ · HTML · 144 lines · 141 code · 3 blank · 0 comment · 0 complexity · 262d1c0b69d7666cd66c89ddf7b18f1f MD5 · raw file
- <HTML>
- <HEAD>
- <TITLE>Solaris hints and kinks</title><link href="scripts/style.css" type="text/css" rel="stylesheet">
- </HEAD>
- <BODY>
- Information on compiling and executing ntpd under Solaris.
- <BR>
- Last Updated: Sun Jun 21 01:32:18 EDT 1998,
- John Hawkinson,
- <! -- This is deliberately not a mailto -- > <jhawk@MIT.EDU>
- <P>
- If you're not running Solaris 2.5.1 or later, it is likely
- that you will have problems; upgrading would be a really good plan.
- <P>
- <H3>All Solaris versions</H3>
- <P>
- We have a report that says starting with Solaris 2.6 we should leave
- <I>dosynctodr</I> alone.
- <A HREF="solaris-dosynctodr.html">Here is the report</A>.
- <P>
- Proper operation of ntp under Solaris may require setting the kernel
- variable <I>dosynctodr</I> to zero (meaning "do not synchronize the clock
- to the hardware time-of-day clock"). This can be done with the
- tickadj utility:
- <BLOCKQUOTE><TT>
- tickadj -s
- </TT></BLOCKQUOTE>
- If you prefer, it can also be done with the native Solaris kernel debugger:
- <BLOCKQUOTE><TT>
- echo dosynctodr/W0 | adb -k -w /dev/ksyms /dev/mem
- </BLOCKQUOTE></TT>
- <P>
- Or, it can also be set by adding a line to /etc/system:
- <BLOCKQUOTE><TT>
- set dosynctodr = 0
- </BLOCKQUOTE></TT>
- <P>
- Instead of the <I>tick</I> kernel variable, which many operating
- systems use to control microseconds added to the system time every
- clock tick (c.f. <A HREF="../../notes.html#frequency_tolerance">Dealing
- with Frequency Tolerance Violations</A>), Solaris has the variables
- <I>nsec_per_tick</I> and <I>usec_per_tick</I>.
- <P>
- <I>nsec_per_tick</I> and <I>usec_per_tick</I> control the number of
- nanoseconds and microseconds, respectively, added to the system clock
- each clock interrupt. Enterprising souls may set these based on
- information collected by ntpd in the <CODE>/etc/ntp.drift</CODE> file
- to correct for individual hardware variations.
- <P>
- On UltraSPARC systems, <I>nsec_per_tick</I> and <I>usec_per_tick</I>
- are ignored in favor of the <I>cpu_tick_freq</I> variable, which
- should be automatically be determined by the PROM in an accurate
- fashion.
- <P>
- In general, the same ntp binaries should not be used across multiple
- operating system releases. There is enough variation in the core operating
- system support for timekeeping that a rebuild of ntpd for the idiosyncracies
- of your specific operating system version is advisable.
- <P>
- It is recommended that ntp be started via a script like <A
- HREF="solaris.xtra.S99ntpd">this one</A>, installed in
- <CODE>/etc/init.d/ntpd</CODE> with a symbol link from
- <CODE>/etc/rc2.d/S99ntpd</CODE>.
- <H3>Solaris 2.6</H3>
- <P>
- Solaris 2.6 adds support for kernel PLL timekeeping, but breaks this
- support in such a fashion that using it worse than not. This is <A
- HREF="solaris.xtra.4095849"> SUN Bug ID 4095849</A>, and it is not yet
- fixed as of June 1998.
- <P>
- <H3>Solaris 2.5 and 2.5.1</H3>
- <P>
- On UltraSPARC systems, calculation of <I>cpu_tick_freq</I> is broken
- such that values that are off by significant amounts may be used
- instead. This unfortunately means that ntpd may have severe problems
- keeping synchronization. This is <A HREF="solaris.xtra.4023118"> SUN Bug ID
- 4023118</A>. Bryan Cantrill <! -- <bmc@eng.sun.com> --> of Sun
- posted <A HREF="solaris.xtra.patchfreq">patchfreq</A>, a workaround script,
- to comp.protocols.time.ntp in March of 1997.
- <P>
- <HR>
- <H2>OLD DATA</H2>
- <STRONG>I can't vouch for the accuracy the information below this
- rule. It may be significantly dated or incorrect.</STRONG>
- <P>
- <P>
- <H3>Solaris 2.2</H3>
- <P>
- Solaris 2.2 and later contain completely re-written clock code to
- provide high resolution microsecond timers. A benefit of the
- re-written clock code is that adjtime does not round off its
- adjustments, so ntp does not have to compensate for this
- rounding. Under Solaris 2.2 and later, ntp #define's
- <CODE>ADJTIME_IS_ACCURATE</CODE>, and does not look for the <I>tickadj</I>
- kernel variable.
- <P>
- <H3>Solaris 2.1</H3>
- (This originally written by William L. Jones <jones@chpc.utexas.edu>)
- <P>
- Solaris 2.1 contains fairly traditional clock code, with <I>tick</I>
- and <I>tickadj</I>.
- <P>
- Since settimeofday under Solaris 2.1 only sets the seconds part of timeval
- care must be used in starting xntpd. I suggest the following start
- up script:
- <BLOCKQUOTE><TT>
- tickadj -s -a 1000
- <BR>ntpdate -v server1 server2
- <BR>sleep 20
- <BR>ntpdate -v server1 server2
- <BR>sleep 20
- <BR>tickadj -a 200
- <BR>xntpd
- </TT></BLOCKQUOTE>
- The first tickadj turns of the time of day clock and sets the tick
- adjust value to 1 millisecond. This will insure that an adjtime value
- of at most 2 seconds will complete in 20 seconds.
- <P>
- The first ntpdate will set the time to within two seconds
- using settimeofday or it will adjust time using adjtime.
- <P>
- The first sleep insures the adjtime has completed for the first ntpdate.
- <P>
- The second ntpdate will use adjtime to set the time of day since the
- clock should be within 2 seconds of the correct time.
- <P>
- The second tickadj set the tick adjust system value to 5 microseconds.
- <P>
- The second sleeps insure that adjtime will complete before starting
- the next xntpd.
- <P>
- I tried running with a tickadj of 5 microseconds with out much success.
- 200 microseconds seems to work well.
- <P>
- <HR>
- Prior versions of this file had major text contributed by:
- <MENU>
- <LI>Denny Gentry <denny@eng.sun.com>
- </MENU>
- <BODY>
- </HTML>