Meinberg NTP configuration

Here is a basic setup for Meinberg NTP which is suitable for Windows 7 onwards. The download link for the latest version is at

When you install it, you will be asked about creating a specific user to run the service. Up to a point this is a good idea, as it reduces the risk of security compromise, but you must ensure that the password you create for it will never expire. If you are not concerned about the small risk of compromise, you can use the SYSTEM account. Don’t user your own account though.

It will ask about which servers to use. A really simple solution is just to pick the UK pool from the drop-down list. You need to select four or more servers to ensure that the system will ignore any insane outliers.

When you complete the config, it will ask if you want to view the configuration file. Do that and it should contain things similar to this:

restrict default noquery nopeer nomodify notrap
restrict -6 default noquery nopeer nomodify notrap
restrict -6 ::1
driftfile "C:\Program Files (x86)\NTP\etc\ntp.drift"
server iburst minpoll 6 maxpoll 7
server iburst minpoll 6 maxpoll 7
server iburst minpoll 6 maxpoll 7
server iburst minpoll 6 maxpoll 7
server iburst minpoll 6 maxpoll 7

# these are default settings, it does no harm to put them in the config file anyway

maxpoll 10
minpoll 6

The NTP recommendations say this:

Forcing a poll interval that is more frequent than what NTP would normally select on its own, hurts accuracy and stability of time on the local system.

NTP polling does not directly synchronize the local system clock to the server clock; rather, a complex algorithm calculates an adjustment value for each tick of the local system clock

Shorter polling intervals cause NTP to make large but less accurate calculations that never stabilize, causing the local system clock to wander. They are also useful if you want to make sure that your NTP daemon will detect an outage of the NTP peers in less time.

Longer polling intervals allow NTP to calculate smaller tick adjustments that stabilizes to a more accurate value, reducing wander in the local system clock.

If you do make any changes to the config file, you need to restart the ntpd service, either using the services.msc GUI, or go via control panel/admin tools to services, or if you are command-line oriented, just type:

sc stop ntpd
sc start ntpd

You can monitor status using

> peers

You can also run w32tm /stripchart to check against another NTP server:

w32tm /stripchart /

Press control-c to stop the stripchart.

There is a neat GUI program on the Meinberg site at

Note that it is fairly old and says it is for ancient Windows versions, but it works fine on W10

RSGB Convention Talk 2019

I presented this talk at the 2019 RSGB convention on 13th October 2019 at Milton Keynes. It is more of a polemic and call-to-arms to work on ways to push the limits of VHF/UHF/SHF weak-signal communications in the way the LF enthusiasts have, working with Eb/N0 very VERY close the the theoretical limit, but we are up against stochastic processes which spread troposcatter and other DX propagation modes on the sub-metre wavelengths and make the LF approaches less than useful.

I am calling for the implementation of an adaptive feedback channel using perhaps 146 or 71MHz datacomms, perhaps New Packet Radio or something dedicated, to give us a way to close the loop and modify transmit parameters on the fly. This is not going to be easy, but it could be a nice challenge. It also might fit the Ofcom criterion of “Not just more of the same” on the new allocations.

This is a Microsoft Powerpoint pptx file. Please don’t copy it to other websites, just create a link pointing the this page.

122GHz Feedhorn machining

Time to turn the CAD design into something physical. Brass rod and my ancient Colchester 1800 and Bridgeport have come up with this as a first try. The barrel adjuster permits positioning the back of the waveguide flush with the inner end of the 8mm cavity, and up to about 6mm inside the reamed 4mm tube. Normal setting will probably be around 1.6mm

Complete horn assembly
Fusion360 model
Small, isn’t it!
Horn and 2mm waveguide with threaded barrel
Mounting detail

Experimental 122GHz feedhorn

Based on the excellent work being done in Australia with the boards using the SiliconRadar 122GHz chips, I decided to have a go at making a version of their diplexer with a thread and locknut instead of a sliding piston and grubscrew. Also I am using brass. No particular reason other than the fun of making things. I did some initial sketches in Fusion360, and made a few of the locknuts last night, now making some horns to see how they look in real life.

See here for the first machining attempt.

View of whole assembly
Rear view showing mating face of the PCB diplexer cavity
Semi-transparent view
Horn body with M8 x 0.5 thread and Chaparral style horn choke
Coupler body with internal thread
Rear of coupler body
Locknut 12mm diameter, M8 x 0.5 thread

Notes on Windows 10 Time Service

There are some very useful changes to the available registry entries to control Windows Time Service in recent W10 versions:

  • Slewing during leap-second events
  • Maximum slew rates for corrections
  • Spike detection thresholds
  • Max/min polling intervals
  • Configurable update interval during slews
  • Verbose logging.

I have configured it pretty much the same as I had configured the NTP from Meinberg, with a set of UK-based servers, and a minimum poll of 64s and max poll of 1024s.

At initialisation, it does a DNS lookup for the hostnames of configured time servers, returning multiple addresses as expected when I use the address (or the 1., 2. or 3. of course).

It then sends a single NTP request to the first address in each of the pools, using NTP version 3.

and gets back a response:

It then polls again after 64 seconds.  Once the dispersion and offset are within limits, it backs off to 128s, then 256s and finally to 1024s between polls.  Only a single request each time.

Initially, the HostPoll value is 64s.

After 20 minutes, it has backed off to 256s between polls

Checking sync with other ntp servers out in the internet, it looks like we are within 10ms, but again that is probably closer than you could verify using a simple request as the network latency is at least twice that.

The slewing controls need some serious verification, as does the spike detection.  For an SNTP server, this isn’t too bad.  It does look as though there isn’t quite the equivalent of the drift file in NTP, but there is a record in the registry showing the current clock rate, which can be offset from the default 156250 and may offer the same drift-control facility (mine is at 156249 at the moment).

In HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config I have:

I have enabled verbose logging, checked the HoldPeriod is set to the default 5 attempts and set the Max and Min poll intervals to 2^10 (1024s) and 2^6 (64s) respectively.

The UpdateInterval only applies where you have configured a Type 1 NTP server, and there is a special update interval setting to match that.  I am using only Type 3 server entries (the default) which says “Dear Server, please feel free to configure my time, but I won’t try to mess with yours”.

In the HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient registry section I have:

SpecialPollInterval isn’t used except with a type 1 server entry.

The key

Blocking the replies from the currently-selected source results in the ValidDataCounter for that source decrementing by one after each update interval.  Despite the update interval being dropped to 16s, the W32Time client process only appears to poll at the rate of the overall application, and it is now 256s, so I have a long wait for it to time out.  It has decremented the reachability to zero and the same for the ValidDataCounter and puit the server intp “Pending” status after about 1000s.  No sign of any DNS lookups since the client first started.  Also (weirdly) no sign of a DNS TTL in the DNS returned by my broadband router, and neither is there any entry in ipconfig /displaydns for the time servers.

After 2400 seconds, the client decided that the server was dead, and it did another DNS lookup for the missing host, and started sending single ntp queries to the new IP address.

I’ll keep an eye on it to see if it remains at this sort of offset. 10 to 20ms is fine for all the hobby digimode stuff I’m doing, but it would be pants for forensics or trading. After a few hours is it running at 5ms ahead of a range of other ntp servers, climbing slowly.  It hit 8ms and the clock value changed and now it is ramping slowly downwards.

So at the moment, this up to date Win10 1903 desktop is running a slightly-more-configurable SNTP with decent audit logging, but not “proper” NTP.  Is there a trick to make it do “proper” NTP like Meinberg does?  I tried making the servers type 0x1, that had no effect.

Also, when a normal human being is asked to make a load of registry changes just to get a useable time facility, the response is usually a bit less positive than “Oooh, great, no problems”.

Can’t say I’m over-keen on putting the necessary keys into a .reg file for distribution, but I guess that is the only way except for reg-hacking geeks.

Meinberg beats this hands-down for simplicity and performance at the moment, and the Meinberg monitoring tool and CLI tools are better. OK, I could run a load of CLI things in Powershell or the Windows Linux subsystem, but it still feels like the usual MS way of reinventing the wheel, late and poorly.

We shall see if the stability and handling of spiked or drifty sources is better or worse than “proper” NTP.