Current Path : /usr/src/contrib/ntp/html/build/hints/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/src/contrib/ntp/html/build/hints/solaris.html |
<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>