Hardware - разное

       

Компьютерное моделирование времени и анализ ошибок


Большинство компьютеров содержат в составе аппаратной части кварцевый генератор с резонансной стабилизацией и аппаратный счетчик, генерирующий процессорные прерывания через интервалы, равные нескольким миллисекундам. При каждом прерывании к переменной, представляющей собой текущее локальное внутрикомпьютерное время, добавляется величина, на компьютерном сленге называемая "тик" (или "миг"). Переменная-время может быть прочитана операционной системой и приложениями, а также изменена (установлена) под влиянием внешнего программного или аппаратного воздействия. Однажды установленное, компьютерное время получает постоянное приращение с номинальным темпом, зависящим от величины тика. Ядра некоторых наиболее распространенных операционных систем имеют программные механизмы увеличения или уменьшения величины тика на небольшое фиксированное значение, для того чтобы произвести заданную корректировку компьютерного времени не скачкообразно, а плавно, в течение нескольких последующих тиков - время как бы искуственно замедляется или ускоряется.

Напомним, что часы операционной системы и аппаратные часы CMOS вовсе не одно и то же, протоколы коррекции времени работают в основном с операционной системой, а ОС либо самостоятельно, либо с помощью каких-то утилит вмешивается в работу часов CMOS. Неточность компьютерного времени проявляется вследствие множества факторов - это могут быть сетевые транспортные задержки, латентность аппаратного и программного обеспечения, а также банальная нестабильность кварцевого генератора. Время клиента относительно времени сервера может быть вычислено как следующая функция:

T(t) = T(t0) + R(t - t0) + ½D(t - t0)2

Здесь t - текущее время; T - смещение времени в момент последней коррекции t0; R - смещение тактовой частоты генератора; D - дрейф вследствие "старения" резонатора. Все три слагаемых функции содержат как систематические смещения, подлежащие коррекции, так и случайные величины, которые принципиально не могут быть подправлены.
Некоторые протоколы коррекции, например DTSS, работают лишь с первым из трех слагаемых, а, например, NTP - вычисляют первые два слагаемых. Ошибки, вызванные пренебрежением третьим слагаемым (безусловно, играющим роль при различных прецизионных применениях вычислительной техники), незначительны и в большинстве случаев перекрываются погрешностями первых двух слагаемых.

Протокол NTP оценивает T(t0) (и R, где необходимо) в постоянные промежутки времени и производит корректировку часов с целью уменьшения T(t) в будущем. В общем случае R может иметь систематические смещения, равные несколько сот герц на миллион в ту или иную сторону, вызванные в первую очередь изменениями температуры окружающей среды. Если периодически не производить коррекцию, суммарная суточная погрешность может достичь нескольких секунд в сутки. Для того чтобы результирующие ошибки не превышали номинальных значений, алгоритмы протокола NTP периодически вычисляют T и R - с целью компенсировать такие ошибки и через определенные интервалы скорректировать системное время. На практике это означает, что, например, для достижения номинальной точности в десять миллисекунд требуется синхронизация клиента с сервером с интервалом в десять минут.

Анализ кварцевых генераторов с резонансной стабилизацией показывает: ошибки являются функцией времени, а это автоматически подтверждает необходимость выдерживать интервал между "сверкой часов". Установлено, что, если интервал между синхронизациями превышает несколько сотен секунд, погрешность протокола доминирует над аппаратным "поползновением" времени, если же интервал менее нескольких сотен секунд, то в значительно большей степени проявляются программные "сдвиги".

Ошибки протокола накапливаются на всех уровнях стратума, начиная с наивысшего, затем распространяются по более низким уровням и в конце-концов достигают клиентов. Это выглядит угрожающе, но есть возможность предусмотреть подобные ошибки, например, статистическими методами, как в реализации протокола NTP.


Содержание раздела