Как осуществлять синхронизацию времени, основанную исключительно на программном обеспечении, с использованием PTP?

Вопрос или проблема

Мои две машины не поддерживают аппаратную отметку времени:

ethtool -T eno1
Параметры отметки времени для eno1:
Возможности:
    программная передача
    программный прием
    программные системные часы
Аппаратные часы PTP: отсутствуют
Режимы передачи аппаратной отметки времени: отсутствуют
Режимы фильтрации аппаратного приема: отсутствуют

Как мне добиться программной синхронизации времени между этими двумя машинами, используя linuxptp?

Я пытался следовать https://tsn.readthedocs.io/timesync.html – этому руководству, но оно предполагает наличие аппаратной отметки времени.

Я пробовал использовать опцию ptp4l -S, но phc2sys не работает, потому что не может найти действующий источник.

Ответ или решение

Для обеспечения синхронизации времени между двумя машинам, которые не поддерживают аппаратное временное маркирование, вы можете использовать программный подход на основе Precision Time Protocol (PTP) с помощью инструмента linuxptp. Давайте рассмотрим подробно, как это реализовать.

Шаг 1. Установка необходимых пакетов

Первым шагом будет установка linuxptp. На большинстве дистрибутивов Linux это можно сделать с помощью пакетного менеджера. Например, на системах на базе Debian/Ubuntu используйте:

sudo apt update
sudo apt install linuxptp

На системах на базе RedHat/CentOS:

sudo yum install linuxptp

Шаг 2. Конфигурация ptp4l

Поскольку ваши машины не поддерживают аппаратное временное маркирование, вам необходимо настроить ptp4l для работы в программном режиме. Вам следует создать конфигурационный файл, если таковой еще не существует, и настроить его для программной синхронизации.

Создайте файл конфигурации, например, ptp4l.conf:

[global]
# Выбор режима -- master или slave
# Для одной машины укажите master, для другой slave
role=master

# Используйте программные метки времени
time_stamping=software

# Вывод информации в консоль
verbose=1

На slave-устройстве

Измените роль на slave для второй машины:

[global]
role=slave
time_stamping=software
verbose=1

Шаг 3. Запуск ptp4l

На каждой из машин запустите соответствующую версию ptp4l. Выполните следующие команды:

На главной (master) машине:

sudo ptp4l -f ./ptp4l.conf -i eno1

На ведомой (slave) машине:

sudo ptp4l -f ./ptp4l.conf -i eno1

Шаг 4. Синхронизация системного времени

Часто ptp4l используется в сочетании с phc2sys, который синхронизирует системное время с временем PTP. В вашем случае вы можете столкнуться с проблемами отсутствия источника. Для обхода этой проблемы используйте -S опцию в ptp4l, чтобы указать использование системного времени.

Запустите следующую команду на ведомой машине после запуска ptp4l:

sudo phc2sys -s CLOCK_REALTIME -w -c PHC

Эта команда синхронизирует системное время с временной меткой програмного PTP Clock (PHC).

Шаг 5. Проверка состояния

Чтобы проверить статус и уровень синхронизации, вы можете использовать следующий подход:

  • Запустите команду sudo phc2sys -s CLOCK_REALTIME -w -c PHC, чтобы обеспечить мониторинг состояния PTP.
  • Просматривайте вывод для мониторинга внутренней синхронизации и возможных расхождений.

Завершение

Вы успешно настроили программную синхронизацию времени между двумя машинами, которые не поддерживают аппаратное временное маркирование. Применение linuxptp в высококачественной синхронизации позволит вам добиться необходимых результатов. Если вы столкнетесь с проблемами, убедитесь, что у вас правильные разрешения и параметры сети, и проверьте логи для диагностики.

Оцените материал
Добавить комментарий

Капча загружается...