Using Go for NTPsec

Dan Drown dan-ntp at drown.org
Sun Jul 4 04:56:54 UTC 2021


Quoting Achim Gratz via devel <devel at ntpsec.org>:
:
> I tend to organize timer triggered code in a way that any computations
> that take a long or indeterminate time happen after the time-critical
> section that uses either very short computations or precomputed values
> from the last period.  That assumes that the resulting lag until the
> next timer invocation can be taken into account (which should usually be
> possible).  So if things get organized like that, as long as whatever GC
> does is done until the next trigger would not matter at all.

Let's talk a bit about what time critical sections are currently in  
the code.  I think that will help drive the decision about the impact  
of garbage collection.

I haven't looked at ntpsec's codebase lately, so some of this might be  
out of date.  Please feel free to correct any mistakes or omissions.

Time critical code:

1. packet tx happening right after tx timestamp for server response
2. serial NMEA data timestamps

Non time critical code:

1. packet rx timestamp (assumption: SO_TIMESTAMPNS or alike is being used)
2. packet tx happening right after tx timestamp for client request  
(assumption: SO_TIMESTAMPNS or alike is being used)
3. receiving SHM data
4. receiving PPS data
5. calculating/updating local clock offset/frequency

The time critical code can tolerate some level of delay (~hundreds of  
microseconds), as things like packet tx can be delayed for a multitude  
of kernel and hardware reasons.  The good news is both of the time  
critical code paths are somewhat predictable and if we can manually  
schedule GC, we can avoid scheduling it during those times.

The non timing critical code can be delayed tens of milliseconds  
without an impact to timing quality.


More information about the devel mailing list