Timeserver with ntp
WORK IN PROGRESS
Interesting Links
Hardware timestamping
Special Hardware (FPGA-Based)
Commodity Hardware
- Intel 82580 -- The NIC I'm most familiar with that supports general hw timestamping is the Intel 82580 Gigabit Ethernet Controller. It can timestamp all RX packets in hardware, but only PTP TX packets.
- Intel i340
- Neterion X3110/X3120
The current Intel controllers supporting IEEE 1588 are the Intel® 82574, 82576, and 82580 Gigabit Ethernet Controllers, the Intel® 82599 10 Gigabit Ethernet Controller, and Intel® Ethernet Controller I350
Two other things that I have changed were the cpu_scaling and the serial latency:
- echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
- setserial /dev/ttyAMA0 low_latency
It appears that the Ethernet latency on the Pi is fairly large, but it can be reduced at a slight cost in performance. To do this, edit your:
/boot/cmdline.txt
and add:
smsc95xx.turbo_mode=0 (or smsc95xx.turbo_mode=N ??)
along with all the other parameters that are being set.
This disables a feature of the Ethernet controller that tries to pack multiple received frames into a single USB transfer. In order to do this, the controller waits after receiving a frame (in the hope of receiving another frame) before passing any data back to the host. Setting turbo_mode to 0 reduced a ping RTT (Round Trip Time) from 500-600 µs down to 300-350 µs.
befor
root@raspberrypi:/boot# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 1 16 377 0.000 140.392 29.463
PPS(0) .PPS. 0 l - 16 377 0.000 -1.375 0.049
*ntp1.ntp.servic .PPS. 1 u 510 1024 377 0.775 -2.563 1.636
+ntp1.bff.iv.bfi .PPS. 1 u 827 1024 377 8.559 -2.145 1.633
+ntp3.ntp.servic .PPS. 1 u 227 1024 377 1.449 -1.314 1.630
+ntp3.mgm.zivit. .GPS. 1 u 105 1024 377 7.959 -2.168 1.510
after
root@raspberrypi:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 3 16 377 0.000 94.814 106.070
PPS(0) .PPS. 0 l 3 16 377 0.000 0.085 0.004
*ntp1.ntp.servic .PPS. 1 u 19 64 377 0.708 0.110 0.026
-ntp1.bff.iv.bfi .PPS. 1 u 40 64 377 8.244 0.018 0.195
+ntp3.ntp.servic .PPS. 1 u 37 64 377 1.318 0.250 0.272
+ntp3.mgm.zivit. .GPS. 1 u 30 64 377 7.461 0.033 0.068
root@raspberrypi:/var/tmp# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 7 16 377 0.000 385.235 24.709
PPS(0) .PPS. 0 l 7 16 377 0.000 0.006 0.004
*ntp1.ntp.servic .PPS. 1 u 49 128 377 0.731 0.022 0.087
-ntp1.bff.iv.bfi .PPS. 1 u 108 128 377 8.208 -0.065 0.845
+ntp3.ntp.servic .PPS. 1 u 64 128 377 1.281 0.231 0.224
+ntp3.mgm.zivit. .GPS. 1 u 118 128 377 7.740 0.067 0.059
root@raspberrypi:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
GPS_NMEA(0) .GPS. 0 l 3 16 377 0.000 219.705 68.095
PPS(0) .PPS. 0 l 3 16 377 0.000 0.220 0.019
*ntp1.ntp.servic .PPS. 1 u 414 1024 377 0.760 0.125 1.953
+ntp1.bff.iv.bfi .PPS. 1 u 467 1024 377 8.515 -0.458 2.012
+ntp3.ntp.servic .PPS. 1 u 393 1024 377 1.443 -0.105 1.482
+ntp3.mgm.zivit. .GPS. 1 u 247 1024 377 7.778 -0.257 1.565
- watch -n1 "cat /proc/interrupts"
cat peerstats.201410 | awk 'function abs(x){return ((x < 0.0) ? -x : x)} {if ($6 < 0.2 && abs($5) < 0.04) print}' > peerstats.201410.2
plot "peerstats.201410.2" using 6:5 with dots
What does .RATE. mean?
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
-ntp1.ntp.servic .RATE. 16 u 956 1024 212 0.534 -0.329 0.014
+ntp1.bff.iv.bfi .PPS. 1 u 587 1024 377 6.340 -0.235 0.016
*ntp3.ntp.servic .RATE. 16 u 696 1024 376 1.010 -0.243 0.073
+ntp3.mgm.zivit. .GPS. 1 u 148 1024 377 6.631 0.094 0.029
Sometimes the ntp-client asks too often the peer time server and answers with a "slow-down"-packet.
In this case you can try to disable
iburst
and set a
maxpoll
option
or you can disable the
limited
and
kod
flags in the restrict command.
Howto setup a time server with ntpd
WORK IN PROGRESS
Minimal setup
Use a minimal
ntp.conf
driftfile /var/lib/ntp/ntp.drift
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
Tuning your time server
Calibrate your fudge time1
On Sat, 24 Apr 2004 01:57:25 +0200, Wes Irish wrote:
> 1) How bet to determine the correct time1 fudge value to properly adjust
> my local reference clock for the various hardware and software delays of
> my particular configuration.
First, fudge the GPS to a high stratum. At least higher than the servers
you sunc you time against to make sure you will not sync the time with
the GPS. Then, in ntpdc type in "enable calibrate". This command will try
to change the time1 value so the offset will be minimal. Leave it for at
least an hour for things to stabilize. Note the number of time1 (check in
ntpq with the cv command). and enter it in the ntp.conf.
Links