High-performance NTP server written in Rust
Switch branches/tags
Nothing to show
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src add options to drop root privileges and change root directory Dec 9, 2018
.gitignore import Jun 20, 2017
Cargo.toml add options to drop root privileges and change root directory Dec 9, 2018
Makefile import Jun 20, 2017
README.adoc update benchmark results Jun 21, 2018

README.adoc

rsntp

rsntp is an experimental high-performance NTP server written in Rust. It does not implement a full NTP client and relies on another NTP client and server to be running on the system instead. It periodically updates its state to mirror the real NTP client/server and uses multiple threads to serve the current system time.

By default, rsntp uses one thread for IPv4 and another for IPv6. In order to get the best performance, it’s necessary to increase the number of threads using the --ipv4-threads and --ipv6-threads options to correspond to the number of CPU cores available on the system.

The real NTP client/server needs to be configured to listen on 127.0.0.1 on port 11123 (or another port if specified with the --server-addr option). For instance, the following configuration should work with chronyd:

allow 127.0.0.1
port 11123
bindaddress 127.0.0.1

The following table shows the maximum number of NTP requests handled per second measured on a Linux (4.16) machine with an Intel E5-1220 CPU (4 cores) and an Intel I350 network card (1 Gb/s).

1 thread

430 kpps

2 threads

750 kpps

3 threads

1030 kpps

4 threads

1100 kpps (maximum for 1 Gb/s)