With thanks to the pointers from dr01 I found the answer in a mailing list response here. The key difference was the terms I was using. ntp uses "step" over "jump" and "slew" over "smear".
Stepping: Time changes in large units, quickly With "Step" method
(settimeofday), time is gradually changed with higher rate or time is
changes immediately to correct time.
step == reset the clock to the correct time in one instantaneous
step.
A stepped clock can "move backwards".
slew == adjust the clock by speeding it up or slowing it down. A
slewed
clock never "moves backwards"
In summary ntp will slew the time if the difference is below a threshold (128ms) and step the time if the difference is above that threshold.
In the ntpd documentation it details the -x
option which allows you to force ntp to always slew corrections even if the difference is above the default threshold:
-x
Normally, the time is slewed if the offset is less than the step threshold, which is 128 ms by default, and stepped if above the threshold. This option forces the time to be slewed in all cases. If the step threshold is set to zero, all offsets are stepped, regardless of value and regardless of the -x option. In general, this is not a good idea, as it bypasses the clock state machine which is designed to cope with large time and frequency errors Note: Since the slew rate is limited to 0.5 ms/s, each second of adjustment requires an amortization interval of 2000 s. Thus, an adjustment of many seconds can take hours or days to amortize. This option can be used with the -q option.
But with a maximum slew rate of 500ppm (parts-per-million) this means correcting a difference of 5 minutes would take about 7 days.