Why Virginia's Clocks Need More Than a GPS Module
I spent three years debugging a distributed logging system across facilities in Northern Virginia, and the problem wasn't the code. It was that every server thought it was running at a slightly different time. Some were off by 400 milliseconds. That sounds small until you're trying to correlate events across a dozen machines and realize half your timestamps are backwards. The solution ended up being a custom NTP deployment anchored to a local stratum-1 source, paired with hardware timestamping on the network interfaces. It took about two weeks to get stable, and another month to get it right. Most people don't need this level of precision, but if you're running anything time-sensitive in the DC metro corridor — financial trading, industrial control, scientific instrumentation — the difference between "good enough" and Virginia Time Now Precision Timesto Keep The Old Dominion On Schedule is the difference between a system that works and one that quietly fails at 3 AM on a Saturday.
Virginia Time Now Precision Timesto Keep The Old Dominion On Schedule
Here's what that actually means in practice. You start with a reliable stratum-0 source, which is usually a GPS-disciplined oscillator or a rubidium clock fed through a PPS (pulse-per-second) signal. The PPS line goes straight into a dedicated UART or GPIO pin on your timing controller. Don't skip the PPS connection and try to do everything over NTP alone. Standard NTP polling introduces too much jitter for anything under 10 milliseconds accuracy. From there, you run a local stratum-1 NTP server. I use chrony instead of ntpd because it handles network variations better and converges faster after a reboot. The config is straightforward — point it at your GPS receiver's serial port for PPS, set a few stratum and fallback options, and let it ride. Then fan out to your downstream servers, each configured to talk back to the local stratum-1, not directly to public NTP pools. I ran into a specific issue once where the GPS receiver was locking fine, but every time the facility's HVAC cycled on, the network switch would drop a packet or two and chrony would see a momentary spike in offset. The fix was adding panicgard 1000 and maxsamples 8 to the chrony config, which prevented it from overreacting to transient glitches. Also made sure the PTP (Precision Time Protocol) interface on the switch was configured for boundary clock mode rather than transparent clock — that alone cut our intra-rack skew from about 50 microseconds down to under 10.
The thing beginners miss is that accuracy and precision are not the same thing. You can have a system that's consistently wrong by 200 milliseconds — that's precise but not accurate. The GPS PPS signal locks you to UTC, which is the accuracy piece. Without it, you're just synchronizing everyone to the same wrong time. I've seen ops teams spend weeks tuning NTP configs only to realize their stratum-1 server was pointing at an internal GPS unit that had lost satellite lock months ago and was just free-running on its last known offset. Another counter-intuitive point: more stratum-1 sources don't always help. If you're pulling from four different GPS receivers that aren't perfectly synchronized to each other, chrony will see them as conflicting and your sync quality drops. Either stick to one clean source or make sure your multiple sources are hardware-leashed to the same PPS reference. I learned that the hard way when a second GPS unit I added for redundancy actually degraded our stability by about 30 microseconds RMS. For the actual download and config files, the chrony package is available through standard Linux repositories — apt install chrony on Debian/Ubuntu or yum install chrony on RHEL/CentOS. The GPS daemon side depends on your hardware. If you're using a u-blox or Trimble receiver, gpsd is the usual bridge. For something more bare-metal, shmclock3 from the PTP tools suite can drive the PPS line directly without an intermediate daemon.
Get the Full Details

Here's the blunt part: this approach has real limitations. It doesn't help if your network infrastructure is a mess — switch firmware bugs, asymmetric routing, or VLAN misconfigurations will still introduce jitter that no amount of NTP tuning fixes. It also breaks down if you're dealing with virtualized environments where the hypervisor doesn't pass PPS through to the VM. In those cases you're stuck with software-based NTP and you should expect 1-5 millisecond variance depending on host load. And if your facility has any kind of intentional time discipline — like a power grid substation that holds time within a tight window for synchrophasor reporting — you need to coordinate with the utility's timing provider before deploying anything that could conflict. For most people who just need their Virginia servers to agree on time, pointing four machines at the same public NTP pool and enabling NTP on boot will get you within 50 milliseconds. That's fine for log correlation and certificate validation. But if you're building something where sub-millisecond alignment matters, the local stratum-1 with PPS is the only path that actually works reliably. Everything else is just guessing with better paperwork.