По работе как-то мне нужно было сделать так, что б у обычного x64-сервера были часы, работающие с точностью семи с половиной порядков. Ни часы в биосе, ни высокочастотный генератор, доступные в ПО, такой точностью не обладают. Так вот - иногда (все-таки попадались совсем пьяные машины) проблему удавалось решить эмпирическим путем - точной юстировкой часов и внесением поправочного коэффициента на уровне софта.
Хм, интересно. По идее именно это делает и ntpd и даже обычная w32time, только они ещё пытаются определить этот самый коэффициент поправки по данным внешнего источника времени. Как в w32time задать один конкретный фиксированный коэффициент ухода времени я так и не нашёл (не поделитесь если знаете?).
Но на самом деле интересно совсем другое: обычные высокочастотные (типа 14-18МГц) кварцы имеют температурный дрейф порядка 50ppm в диапазоне -20°..+70°, или порядка 10ppm в диапазоне +25±10°, т.е. фактически 1ppm/°C, а значит для достижения точности 7,5 порядков (это на секундочку 0,03ppm) надо стабилизировать или контролировать температуру кварца с точностью 0,03°C - так вот интересно как это реализовано? Если кварц сидит на материнской плате, греется совершенно "от фонаря" (и от нагрузки на комп), термометра с такой точностью около кварца нет даже близко. Даже если Вы таки воспользовались встроенным мониторингом температуры материнской платы, то он имеет точность порядка градуса (с неизвестной характеристикой погрешности от него до кварца) и получить точность лучше 6-ти порядков на
серийном кварце нереально. Даже для TCXO (термокомпенсированных) дают погрешность менее 6,3 порядка (0,5ppm),
вот тут есть график. Погрешность примерно 7,5 порядков дают только хорошие
MCXO или
OCXO (термостатированные). Но вроде бы ни OCXO, ни MCXO, ни даже TCXO в серийные материнские платы не ставят.
Второй вопрос: кварцы стареют, порядка 2ppm/год, ну пусть вам попался один из десятка хороший, с вшестеро меньшим старением (это в общем вполне реально), пусть, но всё равно, с 0,33ppm/год ошибка 0,03ppm набегает всего за месяц! Её Вы тоже скомпенсировали программно? Если нет, то на протяжении года стабильность в любом случае не превысит 6-6,5 порядка, но никак не 7,5!
ИМХО, вы могли получить реальную точность 5,5-6 порядков (причём ещё надо было неслабо заморочиться с температурой), но никак не 7,5. Если конечно вам не попался уникальный (один из десятков тысяч) кварц с дрейфом на ДВА ПОРЯДКА меньше ... Тогда да, можно и чуточку хуже 7 порядков (ограничено неизвестным старением) точность получить. Но отбирать столько материнских плат, да ещё тестировать в течении месяцев на малое старение ... Простите не верю, на порядки дешевле запаять термостатированный кварц на любую мать или подключить рубидиевый генератор. Может Вы ошиблись с цифиркой и
реальная (а не кратковременная за несколько минут в стабильных внешних условиях) точность была не 7,5 порядков, а
5,5? Это более реально без заморочек со старением и температурой. Ну или мне правда интересно как вы превысили точность в 6 порядков в реальных условиях на серийной плате?