[ntp:questions] NTP SHM reference clock: system clock not being updated

Rohan Khaleel rohankhaleel at gmail.com
Mon Nov 9 15:07:45 UTC 2009


Summary:
As far as I can tell, the SHM driver I wrote seems to be working, and NTP
has selected the SHM source as a reference clock. However, the system time
does not reflect the time provided by the SHM reference. It seems that the
system time is not being corrected by the NTP server.

As the logs below will show, the system clock does not get updated. For
example, the following log entry illustrates the point:
Nov  5 13:30:56 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:31:09
UTC
The system time is 13:30:56 local (18:30:56 UTC) and the time from the
refernce clock is 18:31:09 UTC, or 13 seconds different.

I have left the system for days, and the two clocks drift apart.

I suspect that I do not understand the fundamentals of NTP well enough to
adjust the required parameters.

Clearly I am doing something wrong.  Equally clearly, something in the
information provided by ntpq is telling me
what is wrong; but what parameter is telling me what is wrong?

What I am hoping for is some help in diagnosing the problem...I will gladly
provide more details...



##############################
##########################
########################################################

Details:
I am running ntpd-4.2.2p1 on a CentOS 5.1 system:

ntp-4.2.2p1-7.el5
Linux 2.6.18-53.1.4.el5PAE #1 SMP Fri Nov 30 01:21:20 EST 2007 i686 i686
i386 GNU/Linux

The larger problem I am trying to solve is this:
Keeping decent time on an isolated computer: no network/gps/phone access.

I have implemented a SHM clock driver to serve as a reference clock. The
driver's hardware reference
source is a MAXIM DS3231 Timer chip, which is more accurate than the BIOS HW
clock. The connection to
the time data is via a /proc file that provides data at a rate of 1 sample
per second in Meinberg format.

MAXIM/Dallas Semiconductor DS3231 Timer chip.
• Accuracy ±2ppm from 0°C to +40°C
• Accuracy ±3.5ppm from -40°C to +85°C
• Operating Temp Range: 0°C to +70°C
At the typical operating frequency of 32.768 Khz, the 3.5 ppm specification
implies a drift no greater than 9.07 Seconds per month or 1.81 minutes
per year (00:01:49 year)

NOTE: The reference clock is referred to as NOVA in this document.

###############################
The ntp.conf file:
###############################
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
server 127.127.28.2 minpoll 4 maxpoll 7
fudge  127.127.28.2 stratum 8 refid NOVA


########################################################
########################################################
The NTP daemon is running as follows:

 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g



###############################
The shared memory driver code:
###############################

 // ntp_shm_base_id = 0x4e545030 /* SEE refclock_shm.c */
 // ntp_unit_number = 2

  //
  // Wait for the shared memory segment to be created and then map it
  //
  rollover = 0;
  do {
    shmid = shmget(ntp_shm_base_id + ntp_unit_number,sizeof(struct
shmTime),0);
    if (shmid == -1) {
      if (rollover == 0) { // log every 5 minute
           syslog(LOG_INFO,"Error getting shared memory segment: 0x%x:
%s\n",
               ntp_shm_base_id+ntp_unit_number, strerror(errno));
       if (!is_daemon) { syslog(LOG_INFO,"(Retrying...)\n"); }

      rollover = (rollover + 1) % 20;
      usleep(15000000); // 15 seconds
    }
  } while (shmid ==-1 && !is_cancelled);
  if (is_cancelled) { return 1; }


  struct shmTime *p=(struct shmTime *)shmat (shmid, 0, 0);
  if (p == (void*)-1) {
    syslog(LOG_INFO,"Error mapping shared memory segment: 0x%x: %s\n",
       ntp_shm_base_id+ntp_unit_number, strerror(errno));
    return 1;
  }

  p->mode = 0;  // shared memory uses mode '0' semantics

   ...

  //////////////////////////////////////////////////////////////////////
  // Update loop
  //////////////////////////////////////////////////////////////////////

  int rollover3 = 0;
  int rollover4 = 0;
  while (!is_cancelled) {

    //
    // wait for the communications channel to be ready
    //
    int rollover2 = 0;
    while (p->valid != 0 && !is_cancelled) {
      if (debug_level > 1) {
    if (rollover2 == 0) { // log every minute
      syslog(LOG_INFO,"Waiting for valid to clear\n");
    }
    rollover2 = (rollover2 + 1) % (4 * 60);
      }
      usleep(250000); // 1/4 second
    }


    //
    // get updated time information from the nova clock
    //
    if (nova_fd != -1) {
      if (debug_level > 3) {
    syslog(LOG_INFO,"Closing %s\n",nova_clock_path);
      }
      if (close(nova_fd) != 0)
    syslog(LOG_INFO,"Error closing (%d): %s: %s\n",
           nova_fd, nova_clock_path, strerror(errno));
    return 1;
      }
      if (debug_level > 3) {
    syslog(LOG_INFO,"Closed %s\n",nova_clock_path);
      }
      nova_fd = -1;
    }

    if (debug_level > 3) {
      syslog(LOG_INFO,"Opening %s\n",nova_clock_path);
    }

    nova_fd = open(nova_clock_path, O_RDONLY);

    if (nova_fd == -1) {
      syslog(LOG_INFO, "Failed to open clock source: %s: %s\n",
         nova_clock_path, strerror(errno));
      usleep(60000000); // sleep 1 minute
      continue;
    }
    if (debug_level > 3) {
      syslog(LOG_INFO,"Opened %s\n",nova_clock_path);
    }

    int nread = read(nova_fd, ntpbuf, sizeof(ntpbuf));
    if (debug_level > 3) {
      syslog(LOG_INFO,"Read %d bytes\n",nread);
    }

    // close the file as quickly as possible to avoid the kernel
    // waiting in the event of a module unload (happens during
    // firmware updates).

    if (nova_fd != -1) {
      if (debug_level > 3) {
          syslog(LOG_INFO,"Closing %s\n",nova_clock_path);
      }
      if (close(nova_fd) != 0) {
           syslog(LOG_INFO,"Error closing (%d): %s: %s\n",
              nova_fd, nova_clock_path, strerror(errno));
    return 1;
      }
      if (debug_level > 3) {
          syslog(LOG_INFO,"Closed %s\n",nova_clock_path);
      }
      nova_fd = -1;
    }

    if (debug_level > 1) {
      int j = 0;
      for (int i = 0; i < nread; i++) {
    if (ntpbuf[i] == '\003' || ntpbuf[i] == '\002') {
      tbuf[j++] = '<';
      tbuf[j++] = (ntpbuf[i] == '\003' ? 'E' : 'S');
      tbuf[j++] = 'T';
      tbuf[j++] = 'X';
      tbuf[j++] = '>';
    } else {
      tbuf[j++] = ntpbuf[i];
    }
      }
      tbuf[j] = '\0';

      if (debug_level > 2) {
    // log every second
    syslog(LOG_INFO,"Buffer: %s\n",tbuf);
      } else {
    // log 10 seconds every 15 minutes
    if (rollover < 10) {
      syslog(LOG_INFO,"Buffer: %s\n",tbuf);
    }
    rollover = (rollover + 1) % 900;
      }

    }

    //
    // Update the NTP communications channel with the new value
    //
    if (nread == -1) {
      if (debug_level > 3) {
    if (rollover4 == 0) { // log every 1 minute
      syslog(LOG_INFO,"Read -1 bytes. Sleeping 5 seconds\n");
    }
    rollover4 = (rollover4 + 1) % 12;
      }
      usleep(5000000); // 5 seconds
      continue;
    } else if (nread == 0) {
      if (debug_level > 3) {
    if (rollover3 == 0) { // log every 1 minute
      syslog(LOG_INFO,"Read 0 bytes. Sleeping 60 seconds\n");
    }
    rollover3 = (rollover3 + 1) % (4 * 60);
      }
      usleep(250000); // 1/4 sec
      continue;
    } else if (nread != 32) {
      syslog(LOG_INFO,
         "Unexpected short read. Expected 32 bytes, read %d bytes\n",
         nread);
      usleep(750000); // 3/4 sec
      continue;
    } else {
      rollover3 = 0; rollover4 = 0;
      // Update NTP data
      int cmday, cmon, cyear, chour, cmin, csec;
      sscanf(ntpbuf,"%*[^0-9]%d.%d.%d;T:%*d;U:%d.%d.%d;",
         &cmday,&cmon,&cyear,&chour,&cmin,&csec);
      cmon -= 1;    // SEE Meinberg format above
      cyear += 100; // SEE Meinberg format above

      struct tm tmnow;
      memset((void*)&tmnow, 0, sizeof(struct tm));
      tmnow.tm_mday = cmday;  // 1 to 31
      tmnow.tm_mon = cmon;    // 0 to 11
      tmnow.tm_year = cyear;  // years since 1900
      tmnow.tm_hour = chour;  // 0 to 23
      tmnow.tm_min = cmin;    // 0 to 59
      tmnow.tm_sec = csec;    // 0 to 59, 60 for leap seconds

      char* local_timezone = getenv("TZ");
      setenv ("TZ", "UTC", 1);
      time_t epoch = mktime(&tmnow);
      if (local_timezone == NULL) {
    unsetenv("TZ");
      } else {
    setenv("TZ",local_timezone,1);
      }
      tzset();

      p->count = (p->count + 1) % 1000;
      p->clockTimeStampSec = epoch;
      p->clockTimeStampUSec = 0;
      p->receiveTimeStampSec = epoch;
      p->receiveTimeStampUSec = 0;
      p->precision = precision;
      p->leap = 0;
      p->valid = 1; // this is the communication trigger

      if (debug_level > 0) {
    syslog(LOG_INFO,
           "Update Datum: %2.2d/%2.2d/%d %2.2d:%2.2d:%2.2d UTC\n",
           cmon + 1,cmday,cyear+1900,chour,cmin,csec);
      }

      if (debug_level > 3) {
    syslog(LOG_INFO,"Updated NTP time reference\n");
    syslog(LOG_INFO,
           "Data: epoch:%d usec:%d count:%d precision:%d nsamples:%d\n",
           (int)p->clockTimeStampSec, p->clockTimeStampUSec,
           p->count,p->precision, p->nsamples);
      }


    }
  }

########################################################
########################################################

When this is driver is run with a debug level of 3, the messages log output
is as follows:

Nov  5 13:29:49 ekfp7 ntpd[2814]: ntpd 4.2.2p1 at 1.1570-o Sat Nov 10 12:33:50
UTC 2007 (1)
Nov  5 13:29:49 ekfp7 ntpd[2815]: precision = 1.000 usec
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface wildcard,
0.0.0.0#123 Disabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface wildcard, ::#123
Disabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface lo, ::1#123 Enabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: bind() fd 19, family 10, port 123, scope
3, addr fe80::21b:21ff:fe21:7eda, in6_is_addr_multicast=0 flags=1 fails:
Cannot assign requested address
Nov  5 13:29:49 ekfp7 ntpd[2815]: bind() fd 19, family 10, port 123, scope
2, addr fe80::21a:64ff:fe22:45af, in6_is_addr_multicast=0 flags=1 fails:
Cannot assign requested address
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface lo, 127.0.0.1#123
Enabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface eth0,
192.168.30.157#123 Enabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: Listening on interface eth1,
192.168.31.150#123 Enabled
Nov  5 13:29:49 ekfp7 ntpd[2815]: kernel time sync status 0040
Nov  5 13:29:49 ekfp7 ntpd[2815]: frequency initialized 0.000 PPM from
/var/lib/ntp/drift
Nov  5 13:29:49 ekfp7 ek_ntp_shm_conduit: Starting up
Nov  5 13:29:49 ekfp7 ek_ntp_shm_conduit: Using memory segment id:
0x4e545032
Nov  5 13:29:49 ekfp7 ek_ntp_shm_conduit: Could not open Nova reference
clock: /proc/driver/nova/sm_time: No such file or directory
Nov  5 13:30:04 ekfp7 ek_ntp_shm_conduit: Using NOVA clock source:
/proc/driver/nova/sm_time
Nov  5 13:30:04 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.30.17; *U <ETX>
Nov  5 13:30:04 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:30:17
UTC
Nov  5 13:30:04 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:30:05 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.30.18; *U <ETX>
Nov  5 13:30:05 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:30:18
UTC
Nov  5 13:30:05 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:30:23 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.30.36; *U <ETX>
Nov  5 13:30:23 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:30:36
UTC
Nov  5 13:30:23 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:30:41 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.30.54; *U <ETX>
Nov  5 13:30:41 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:30:54
UTC
Nov  5 13:30:41 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:30:56 ekfp7 ntpd[2815]: synchronized to SHM(2), stratum 8
Nov  5 13:30:56 ekfp7 ntpd[2815]: kernel time sync enabled 0001
Nov  5 13:30:56 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.31.09; *U <ETX>
Nov  5 13:30:56 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:31:09
UTC
Nov  5 13:30:56 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:31:12 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.31.25; *U <ETX>
Nov  5 13:31:12 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:31:25
UTC
Nov  5 13:31:12 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:31:27 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.31.40; *U <ETX>
Nov  5 13:31:27 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:31:40
UTC
Nov  5 13:31:27 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:31:43 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.31.56; *U <ETX>
Nov  5 13:31:43 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:31:56
UTC
Nov  5 13:31:43 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:32:00 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.32.13; *U <ETX>
Nov  5 13:32:00 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:32:13
UTC
Nov  5 13:32:00 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 13:32:16 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:18.32.29; *U <ETX>
Nov  5 13:32:16 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 18:32:29
UTC
Nov  5 13:32:16 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear

...
(one hour later)

Nov  5 14:30:21 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.30.34; *U <ETX>
Nov  5 14:30:21 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:30:34
UTC
Nov  5 14:30:21 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:30:36 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.30.49; *U <ETX>
Nov  5 14:30:36 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:30:49
UTC
Nov  5 14:30:36 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:30:54 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.31.07; *U <ETX>
Nov  5 14:30:54 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:31:07
UTC
Nov  5 14:30:54 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:31:10 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.31.23; *U <ETX>
Nov  5 14:31:10 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:31:23
UTC
Nov  5 14:31:10 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:31:27 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.31.40; *U <ETX>
Nov  5 14:31:27 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:31:40
UTC
Nov  5 14:31:27 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:31:43 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.31.56; *U <ETX>
Nov  5 14:31:43 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:31:56
UTC
Nov  5 14:31:43 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:32:01 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.32.14; *U <ETX>
Nov  5 14:32:01 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:32:14
UTC
Nov  5 14:32:01 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:32:16 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.32.29; *U <ETX>
Nov  5 14:32:16 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:32:29
UTC
Nov  5 14:32:16 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:32:31 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.32.45; *U <ETX>
Nov  5 14:32:31 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:32:45
UTC
Nov  5 14:32:31 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:32:49 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.33.02; *U <ETX>
Nov  5 14:32:49 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:33:02
UTC
Nov  5 14:32:49 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:33:04 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.33.17; *U <ETX>
Nov  5 14:33:04 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:33:17
UTC
Nov  5 14:33:04 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:33:19 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.33.33; *U <ETX>
Nov  5 14:33:19 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:33:33
UTC
Nov  5 14:33:19 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:33:36 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.33.49; *U <ETX>
Nov  5 14:33:36 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:33:49
UTC
Nov  5 14:33:36 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:33:54 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.34.07; *U <ETX>
Nov  5 14:33:54 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:34:07
UTC
Nov  5 14:33:54 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:34:11 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.34.24; *U <ETX>
Nov  5 14:34:11 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:34:24
UTC
Nov  5 14:34:11 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear
Nov  5 14:34:26 ekfp7 ek_ntp_shm_conduit: Buffer:
<STX>D:05.11.09;T:4;U:19.34.39; *U <ETX>
Nov  5 14:34:26 ekfp7 ek_ntp_shm_conduit: Update Datum: 11/05/2009 19:34:39
UTC
Nov  5 14:34:26 ekfp7 ek_ntp_shm_conduit: Waiting for valid to clear



########################################################
########################################################

The following ntp status information is as follows:


 % ntpq
ntpq> pe
     remote           refid      st t when poll reach   delay   offset
jitter
==============================================================================
*SHM(2)          .NOVA.           8 l   13   16  377    0.000    0.000
0.001

ntpq> as

ind assID status  conf reach auth condition  last_event cnt
===========================================================
  1 55826  9644   yes   yes  none  sys.peer   reachable  4

ntpq> rv 55826
assID=55826 status=9644 reach, conf, sel_sys.peer, 4 events, event_reach,
srcadr=SHM(2), srcport=123, dstadr=127.0.0.1, dstport=123, leap=00,
stratum=8, precision=-1, rootdelay=0.000, rootdispersion=0.000,
refid=NOVA, reach=377, unreach=0, hmode=3, pmode=4, hpoll=4, ppoll=7,
flash=00 ok, keyid=0, ttl=0, offset=0.000, delay=0.000,
dispersion=0.228, jitter=0.001,
reftime=ce9d9c33.00000000  Thu, Nov  5 2009 13:47:15.000,
org=ce9d9c33.00000000  Thu, Nov  5 2009 13:47:15.000,
rec=ce9d9c35.29951f69  Thu, Nov  5 2009 13:47:17.162,
xmt=ce9d9c35.2994ba8b  Thu, Nov  5 2009 13:47:17.162,
filtdelay=     0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00,
filtoffset=    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00,
filtdisp=      0.00    0.23    0.47    0.71    0.98    1.23    1.50    1.76


(and almost an hour later)

% ntpq
ntpq> pe
     remote           refid      st t when poll reach   delay   offset
jitter
==============================================================================
*SHM(2)          .NOVA.           8 l    7   16  377    0.000    0.000
0.001
ntpq> as

ind assID status  conf reach auth condition  last_event cnt
===========================================================
  1 55826  9644   yes   yes  none  sys.peer   reachable  4
ntpq> rv 55826
assID=55826 status=9644 reach, conf, sel_sys.peer, 4 events, event_reach,
srcadr=SHM(2), srcport=123, dstadr=127.0.0.1, dstport=123, leap=00,
stratum=8, precision=-1, rootdelay=0.000, rootdispersion=0.000,
refid=NOVA, reach=377, unreach=0, hmode=3, pmode=4, hpoll=4, ppoll=7,
flash=00 ok, keyid=0, ttl=0, offset=0.000, delay=0.000,
dispersion=0.247, jitter=0.001,
reftime=ce9da791.00000000  Thu, Nov  5 2009 14:35:45.000,
org=ce9da791.00000000  Thu, Nov  5 2009 14:35:45.000,
rec=ce9da796.29bc1bdc  Thu, Nov  5 2009 14:35:50.163,
xmt=ce9da796.29bbb83a  Thu, Nov  5 2009 14:35:50.163,
filtdelay=     0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00,
filtoffset=    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00,
filtdisp=      0.00    0.27    0.50    0.75    1.02    1.26    1.49    1.74



More information about the questions mailing list