Вести отсчет времени с абсолютной точностью на обычном компьютере попросту невозможно, но для тех, кто готов платить, ее можно увеличить до определенной степени.
«Чтобы приблизить точность отсчета времени к приемлемой, нужно решить слишком много задач», — посетовал Джордж Невилл-Нил на конференции Applicative, проведенной Ассоциацией вычислительной техники (ACM). Невилл-Нил разрабатывает программное обеспечение, помогающее финансовым учреждениям и другим организациям измерять время точнее. Он принимает участие в работе над стандартом IEEE Precision Time Protocol (PTP), который позволит синхронизировать время по сети с большей точностью, чем нынешний отраслевой стандарт Network Time Protocol (NTP).
Компьютерные часы могут сбиваться вследствие множества причин, в том числе из-за нестабильности пропускной способности сети, программного обеспечения и условий окружающей среды.
Для отсчета времени в компьютерах обычно используется кварцевый резонатор, который генерирует электрические импульсы, синхронизирующие работу процессора, памяти, шин и других компонентов. Но производители компьютеров обычно применяют недорогие резонаторы, точность которых оставляет желать лучшего. «Если вы покупаете стандартный сервер, вы, скорее всего, получите недорогой тактовый генератор, частота которого будет плавать под влиянием различных факторов», — пояснил Невилл-Нил.
По мере старения кристалла генерируемая им частота меняется. Может влиять и рабочая нагрузка на систему — из-за нагревания компонентов частота возрастает. По сути, кварцевые резонаторы не лучше механических часов: новенький iPhone показывает время не точнее, чем механические наручные часы многолетней давности, утверждает Невилл-Нил.
Протестировав свой ноутбук с помощью дорогостоящих точных часов, он выяснил, что время на компьютере за два часа сбилось на 15 миллисекунд. «Это абсолютно типично для ПК», — подчеркивает он.
Для многих конечных пользователей подобные расхождения несущественны, но некоторым автоматизированным системам все же нужно больше точности.
В частности, синхронизация требуется распределенным системам, выполняющим одну задачу с помощью множества серверов: при отладке подобных сред необходимо знать очередность событий, происходящих на различных узлах.
Точный отсчет времени нужен и роботизированным системам — для согласования действий движущихся частей. А энергетические компании с помощью точного времени контролируют частоту переменного тока, доставляемого абонентам: она должна составлять 60 Гц. Базовым станциям LTE необходима синхронизация действий с расхождением не больше 1100 наносекунд. Высочайшая точность измерения времени нужна при высокочастотных финансовых торгах, осуществляемых автоматизированными трейдерами, которым необходимо проводить операции за считанные миллисекунды.
Разумеется, большинство серверов могут синхронизировать часы по Интернету с каким-либо из официальных сервисов хронометража, например Национальным институтом стандартов и технологий (NIST). Но синхронизация по Интернету имеет свои недостатки. Пакет точного времени, транслируемый NIST, приходит на запрашивающий сервер с задержкой. Серверное ПО может оценить, сколько занимает доставка сообщения, но время передачи варьируется в зависимости от загруженности сети.
По умолчанию NTP, используемый на большинстве серверов для синхронизации времени, опрашивает главные часы один раз в 64 секунды; этот параметр можно уменьшить только до 15 секунд — этим ограничиваются возможности протокола.
Кроме того, при использовании NTP бывает сложно обеспечивать точность времени в виртуализованных облачных средах, причем выяснить причину удается не всегда. «Над задачей отсчета точного времени для виртуальных машин бьются все облачные провайдеры», — отмечает Невилл-Нил. В VMware пытаются решить проблему, но операторы облаков общего назначения, такие как Amazon, по-прежнему испытывают затруднения.
Даже при синхронизации с внешними главными часами работающие на компьютере программы будут вносить искажения. Операционная система обычно принимает сразу по несколько сетевых пакетов, поэтому информация о точном времени может поступать с задержкой. К тому же, драйверу, управляющему временем, может быть назначен более низкий приоритет, чем остальным задачам.
Стандарт PTP был разработан с целью повысить точность отсчета времени на серверах. Он используется в финансовой индустрии, в энергетике и телекоммуникациях.
Никаких «волшебных» средств, делающих PTP точнее NTP, нет — помимо того, что новый протокол просто чаще опрашивает главные часы, признает Невилл-Нейл. PTP может сверяться с источником точного времени ежесекундно, но подобную частоту обращений к серверу могут позволить себе только организации, имеющие резерв пропускной способности. Благодаря многоадресной рассылке при использовании PTP все серверы в сети получают один и тот же пакет синхронизации часов в одно и то же время.
«Можно было бы создать и более точную систему отсчета времени, но, скорее всего, она вам обойдется на порядок дороже нынешних», — отметил Невилл-Нил.