@Mpegger , for you I have been playing with my J1900 CPU, that my timeserver (str1) use.
It’s about the same as an RPi4 or better.
I noticed a lot of swings. However the crystal is hopless, just like the Pi.
So I wondered, how can we improve?
See what happened after 13:30…I changed a lot:
What I did is exchange the normal kernel for the RT-kernel.
Step 1: apt-get install linux-image-rt-amd64 install the Realtime kernel and reboot.
Step 2: change Chrony params, works for 4.6.x or newer…
# This directive specify the file into which chronyd will store the rate information.
maxdrift 50
driftfile /var/lib/chrony/chrony.drift
# Hardware timestamping on NIC, either hwtimestamp eth0 or * for all
hwtimestamp *
# Make scheduler change
sched_priority 40
# Run only in RAM
lock_all
That will help a lot.
Step 3: Alter systemd for GPSD nano /etc/systemd/system/gpsd.service
Change this:
[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=40
IOSchedulingClass=realtime
Nice=-10
EnvironmentFile=-/etc/default/gpsd
#EnvironmentFile=-/etc/sysconfig/gpsd
ExecStart=/usr/sbin/gpsd $GPSD_OPTIONS $DEVICES
When you check ‘top’ you will see it’s using PR -41, meaning it’s near realtime.
That is what I did to make the CPU more stable. Beware, I also removed CPU-speed-changing…it’s running at max-performance 24/7.
I have not tested this for long, but the graph is very good after several hours.
Beware, a RT-Kernel gives real-time software more time to process.
Chrony gets enough time to work it out, and GPSD enough time to pass data from source to processing via Chrony.
I do not know if this works good, but the graph look good after 3 hours.
The system in question is an Intel J1900…not the fastest CPU you can get.
Enjoy. Let me know if it works for you…or if it doesn’t. ![]()




