Исследование и модификация алгоритма синхронизации времени от источника сигнала эталонной частоты в ядре Linux

Выполнил: Шпилевой Владислав Дмитриевич, 420

Научный руководитель: Герасев Александр Витальевич

Актуальность

  • Требуется синхронизация с источником эталонной частоты
  • NTP - дает точность миллисекунд, так как сетевой
  • Pulse per second сигнал от внешнего устройства
  • hardpps - использует PPS-сигналы для повышения точности до наносекунд

Время в Linux - аппаратный счетчик

Постановка задачи

  • Реализовать профилировщик подсистемы hardpps, позволяющий,
    • сохранять последовательность входных данных алгоритма и состояние его внутренних переменных,
    • воспроизводить работу алгоритма по сохраненной трассе
  • Исследовать работу алгоритма на аномальных входных данных
  • Предложить модификации алгоритма, позволяющие:

    • исправить ошибки,

    • улучшить точность синхронизации

  • Реализовать данные модификации и провести апробацию модифицированного алгоритма на реальной вычислительной системе реального времени

Существующий алгоритм

PPS-сигнал

PPS-сигнал

Аппаратный счетчик += 10^9 единиц

Системное время += 10^9 наносекунд

PPS-сигналы - эталон → с прошлого сигнала системное время должно увеличиться на 1 секунду

Ошибка частоты - отклонение счетчика

Ошибка фазы - отклонение системного времени

hardpps: коррекция фазы

  • Выполняется каждую секунду
  • Величина корректировки берется на основе предыдущих ошибок фазы
  • Существуют разные алгоритмы выбора корректировки

Важно: ошибки фазы - хороший показатель точности синхронизации, ведь на них так же отражаются ошибки частоты

hardpps: коррекция частоты

  • Независимо от ошибок фазы
  • Выполняется раз в некоторый интервал времени

Длина интервала меняется в некотором диапазоне по мере работы алгоритма

Если частота считается стабильной - длина возрастает, иначе уменьшается

Разные цвета - разные интервалы.

Видно, что часы возрастают не строго линейно.

Недостатки такого алгоритма

Нечетко определена стабильность частоты → длина интервала иногда меняется неверно

Если частота стала нестабильна внутри интервала, его результаты полностью отброшены

Частота

Время

Варианты улучшения алгоритма

Мной предложено три модификации

  • Анализ стабильности частоты по ее последним значениям
  • Анализ общей стабильности часов по ошибкам фазы
  • Фильтрация Калмана для входных данных hardpps

Исследование на стабильной частоте

Оригинальный алгоритм

Анализ последних частот

Анализ ошибок фазы

Фильтр Калмана

  • Фильтрация Калмана ухудшила сходимость
  • Анализ последних частот и ошибок фазы ее не изменили

Исследование на нестабильной частоте

Анализ ошибок фазы

Анализ последних частот

Фильтр Калмана

Математическое ожидание:

Среднее отклонение:

x ~6.5

x ~3.5

-900 ns

-140 ns

1930 ns

550 ns

x ~4.7

x ~3.6

-1700 ns

-140 ns

3360 ns

12100 ns

x ~25

x ~1.4

-500 ns

-20 ns

530 ns

390 ns

Программная реализация

Ядро Linux

NTP

hardpps

Профилировщик

Исправление частоты

Исправление фазы

Фильтры ошибок фазы

Оригинальный алгоритм

Анализ последних частот

Анализ ошибок фазы

Фильтр Калмана

Полученные результаты

  • Реализован профилировщик подсистемы hardpps

  • Проведено исследование работы алгоритма на аномальных входных данных

  • Предложено и реализовано три модификации алгоритма синхронизации времени

  • Проведено исследование модификаций на различных данных на реальной системе, и проведен анализ эффективности каждой модификации

Мною проделана следующая работа:

Время в ядре Linux

  • Представлено постоянно возрастающим аппаратным счетчиком.
  • Существует несколько механизмов для увеличения счетчика:
    • Аппаратные прерывания
    • Time stamp counter
    • High precision event timer

Получение PPS-сигнала

  • Ожидание сигнала еще до его возникновения
  • Активное ожидание изменения электрического сигнала

Проблемы коррекции частоты

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

Длины интервалов возрастают вместо убывания. Результаты некоторых интервалов просто не применяются.

Анализ последних значений частоты

  • Хранить значения частоты за некоторый интервал времени
  • Если текущая коррекция частоты отстает от них, то частота меняется слишком редко - принимаются меры

Анализ последних ошибок фазы

  • Оригинальный алгоритм использует последние ошибки фазы для ее коррекции
  • Идея модификации: использовать эти ошибки для мониторинга стабильности частоты
  • Если ошибки убывают по модулю - частота корректируется верно, иначе принимаются меры

Стрелки - инверсии в последовательности ошибок

Фильтр Калмана

  • Фильтр использует модель "предсказание-коррекция"
  • Идея предполагала, что поможет сгладить резкие скачки времени
  • По факту: ухудшение точности синхронизации

Причина ухудшения точности - коррекции частоты и фазы производились не по оригинальным меткам и не соответствовали действительности.

Исследование и модификация алгоритма синхронизации времени от и

By Vladislav Shpilevoy

Исследование и модификация алгоритма синхронизации времени от и

  • 1,669