The Limits of NTP Accuracy on Linux
Краткое резюме: пределы точности NTP в Linux
- Цель – синхронизировать часы Linux-систем с погрешностью < 1 мкс (желательно < 10 мкс) для корректных распределённых трассировок.
- Результат – большинство узлов держатся в пределах ~500 нс; улучшить без точной инженерии сложно.
Основные ограничения
-
GPS не идеален
- 3 GPS-приёмника на столе расходятся до ±200 нс; даже топовые модули дают ~5 нс джиттера.
- Чтобы уложиться в 50 нс, нужны одинаковые длины антенных кабелей и пр.
-
Сеть
- Любой «умный» коммутатор или маршрутизатор легко добавляет 200–300 нс систематической ошибки.
- RTT в моей сети 20–30 мкс, поэтому цель < 1 RTT.
-
NIC и драйверы
- Intel E810 – отлично, X710 – хорошо, Mellanox ConnectX-5 – сойдёт, ConnectX-3/4 – на грани, Realtek – не надо.
- Разница в драйверах и аппаратных метках времени (timestamps) доходит до сотен наносекунд.
-
Системные задержки
- Случайные «затыки» из-за SMBIOS/PM: 100–1000 мкс без предупреждения.
- Дешёвые mini-PC показали 1300–2000 нс дрейфа, но два других – всего 20–50 нс. Серверное «железо» стабильнее.
Практические цифры
- Типовая синхронизация по локальному GPS-источнику через Chrony: ~500 нс.
- В лабораторных условиях Chrony демонстрирует < 100 нс, но это исключение.
Вывод
Без специализированного оборудования, калибровки кабелей и тщательного выбора NIC/драйверов 200 нс – реалистичный потолок для обычной сети.