2

Утилита adjtimex имеет режим --adjust который можно использовать для сравнения системных часов с часами CMOS, расчета рекомендуемых значений для переменных времени ядра с тиковым и частотным смещениями и автоматической установки этих предлагаемых значений.

По умолчанию выполняется 8 сравнений (count) с 10-секундным интервалом между сравнениями (interval). Предлагаемые значения автоматически устанавливаются после каждого третьего сравнения, не считая первых двух.

Вот пример выходных данных adjtimex --adjust . Весь процесс (со значениями по умолчанию для count и interval) занимает 70 секунд:

                                      --- current ---   -- suggested --
cmos time     system-cmos  error_ppm   tick      freq    tick      freq
1391731712      -3.877457
1391731722      -3.879791     -233.4  10000         0
1391731732      -3.882372     -258.1  10000         0   10002   3806862
1391731742      -3.884677     -230.5  10000         0   10002   1999050
1391731752      -3.887348     -267.1  10000         0   10002   4397487
1391731762      -3.887226       12.2  10002   4397487   10002   3599050
1391731772      -3.886892       33.4  10002   4397487   10002   2208425
1391731782      -3.886588       30.4  10002   4397487   10002   2405300

Мой вопрос: кто-нибудь знает, почему были выбраны эти значения по умолчанию (count=8 , interval=10)?

Я думаю, что чем длиннее интервал между сравнениями, тем точнее вы оцените дрейф между системой и часами CMOS. Таким образом, предполагая, что мы хотим, чтобы tio придерживался 70-секундной длительности для всего процесса, я бы подумал, что count=3 , interval=35 был бы очевидным выбором (обратите внимание, что для того, чтобы быть предложенным, требуется минимум 3 сравнения значения тиков и частот).

Может кто-нибудь пролить некоторый свет на это?

1 ответ1

2

David L. Mills (Создатель утилиты Adjtimex) написал немало статей на эту тему, доступные (со ссылками) здесь ответы , которые вы ищете , можно найти в статье: улучшенные алгоритмы для синхронизации компьютерных сетей Clocks (1995)

Ваш вопрос, в частности, ставит вопрос, почему выполняется более 3-х отсчетов (в данном случае 8) в течение 70 секунд. Хотя необходимы только 3 сравнения (выборки), можно использовать большее количество выборок для установления 95% доверительного интервала значения, которое оценивает систематический сдвиг тактовой частоты.

Рассчитанные предлагаемые значения тиков устанавливаются после каждого 3-го сравнения, чтобы дополнительно уточнить точность расчетного дрейфа.

По статистике, чем больше выборок вы берете в течение более длительного интервала, тем ближе вы будете к фактическому значению дрейфа.

Немного забавной истории из статей доктора Милля: в оригинальной конструкции Unix аппаратный таймер прерывает ядро с фиксированной частотой: 100 Гц в ядре SunOS, 256 Гц в ядре Ultrix и 1024 Гц в ядре OSF/1. Поскольку интервал таймера Ultrix (обратный к скорости) не делится равномерно на одну секунду в микросекундах, ядро добавляет 64 микросекунды каждую секунду, поэтому временная шкала состоит из 255 шагов вперед 3906 мкс плюс одно из 3970 мкс

Для тактовой модели Unix 4.3bsd требуется периодическое аппаратное прерывание таймера, генерируемое генератором, работающим в диапазоне 100-1000 Гц. Каждое прерывание вызывает добавление тика инкремента к переменной времени ядра. Значение приращения выбирается так, чтобы счетчик плюс начальное смещение, установленное вызовом settimeofday(), были равны времени суток в секундах и микросекундах. Когда тик не делит секунду равномерно на микросекунды, дополнительный фиксированный инкремент добавляется к времени ядра раз в секунду, чтобы компенсировать разницу.

«Стабильность часов - это то, насколько хорошо они могут поддерживать постоянную частоту, точность - это то, насколько хорошо их время сравнивается с системными часами, а точность - в какой степени время может быть разрешено». Все эти факторы должны быть объединены с

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .