My wild guess is that most people get a small Linux computer, like the Raspberry Pi, BeagleBone, Banana Pi or Orange Pi for a specific task. Unfortunately, most distributions are chock-full of software, with everything installed per default. But if you want to set up a lean single board computer for a specific task, you’re out of luck. Thankfully there is a Linux distribution, DietPi, that aims to fix that problem.[Read more…]
When you make your own NTP server, you probably spend a lot of time trying to get it as accurate and stable as possible. To get good results, you need to connect your server to a good time reference, like an atomic clock, GPS or a GPSDO to get the PPS (Pulse Per Second) to sync your server with the reference clock.
In both Linux and BSD, there is kernel support to slave the very inaccurate CPU clock crystal to the PPS signal, continually adjusting the frequency, because the crystals of computers continuously drift due to temperature and barometric pressure differences. So most of the work is to get a crappy crystal to behave. What if you just jumped over that step, so the CPU clock gets synchronized with the same lab reference that the PPS signal uses, using a SI5351C Clock Generator?
Read on to see a simple way of doing it and get an extremely accurate NTP server for under $200.
After becoming a full-fledged time-nut (I’m compiling a new Linux kernel on my second NTP server as we speak), I have started to use the statistics that I usually install on a server just to keep a check on it. Sure, when installing something like MRTG, it’s great to see if something is clogging the system, but mostly, it’s unused. But when working with an NTP server a lot of factors start to make a difference. The temperature of the processor (the whole computer actually, mostly due to crystal drift), the load of the CPU’s, etc.
Warning: as of yet, there is no official support for overclocking the Raspberry Pi 3, so you could damage your small computer. Just a reminder.
The new version of Raspberry Pi 3 was released yesterday, so I naturally had to get two. I’m using two as Stratum-1 NTP servers, and with the old Raspberry Pi 2, I had hit the roof when it came down to getting better time resolution. So when I read that a new 50% faster version had been released, I raced to the nearest store and got a couple. I have one experimental NTP server that isn’t handing out time on the internet and another one that is the primary server, connected to the NTP Pool Project.
I installed the experimental Raspberry Pi 3 first, so I could test performance and try to overclock it. And it went very well.
Update: You can download the Eagle PCB files for the PPS Pulse Width Extender here.
The PCB is made to fit the Hammond 1455C802BK enclosure.
I have two Stratum-1 NTP servers using Raspberry Pi 2’s as servers. But the two setups are entirely different.
My primary NTP Stratum-1 server is available at ntp.jacken.se, but it is also in the .se pool of ntp.org.
It’s a Raspberry Pi 2 I use a Raspberry Pi 3 that I have connected a U-Blox Neo-7 GPS receiver. But I’m not using the 1 PPS signal coming out of the U-Blox. I have a Trimble GPSDO that I bought from eBay. The unit has two 10 MHz lab reference outputs and one 1 PPS output. But after measuring the signal coming out from the GPSDO, I realized that the timing speed for the seconds “Tick” was only 10 µsec which is way to fast for the Raspberry Pi to pick up as an interrupt on one of the GPIO pins. So I built a pulse extender, making the pulse around 250 milliseconds instead. And now the Raspberry Pi picks up the pulse without problems. Some GPSDO units can set the pulse width by programming the unit via a serial port, but I can’t find that feature on this unit (which is poorly documented and was OEM made for some other manufacturer), so I had to do it with hardware. So how does it look when crunching the numbers on it?