Have you tried disabling CPU power-saving states and setting it to run at a constant frequency? I’m not sure how that can be done on FreeBSD. On Linux there is the idle=poll kernel option and the cpupower utility.
Here is the latest config:
changed from SOCK to SHM
PowerD remains disabled
dev.hwpstate_intel.0.epp=0 (as opposed to 50, for maximum performance, resulting in CPU clock being set to 2.4 ghz instead of 800 mhz)
Offsets had to be updated per below:
#2026-01-15
# 95% CI: ±0.023µs (n=90134)
# 95% CI: ±0.011µs (n=90181)
# 95% CI: ±0.012µs (n=90174)
# 95% CI: ±0.097µs (n=90147)
refclock SHM 1 refid GPS1 offset +0.000063339
refclock SHM 3 refid GPS2 offset -0.000000149
refclock SHM 5 refid GPS3 offset +0.000000154
refclock SHM 7 refid GPS4 offset +0.000044180
Interrupt rate is down to 12 interrupts per second per COM port
Sending only NAV-PVT and NAV-TIMELS
Interesting that the error margin on COM 4 degraded, COM 1 seems to be the same, and COMs 2 and 3 improved
Since you are using a U-blox chip and GPSd and trying to reduce serial data packet size, if all you need is time and have no need for location, you can disable all message and only enable the GxZDA (Time & Date) message. All GPSd needs is the current time and date to combine with the PPS pulse to output to Chrony.








