Вопрос или проблема
Я пытаюсь синхронизировать время с помощью PTP; я настроил устройство Trimble для работы с PTP. Однако, когда я использую LinuxPTP с приведенной ниже конфигурацией, локальные часы всегда выбираются как лучшие мастер-часы.
ptp4l[892.103]: локальные часы 00032d.fffe.55bd3b выбраны как лучшие мастер-часы
Мне интересно, почему Trimble устройство не выбирается в качестве мастер-часов.
Устройства подключены через SFP/оптоволоконные кабели.
- Файл конфигурации PTP –
/etc/linuxptp/ptpv2.conf
[global] verbose 1 domainNumber 24 clockClass 6 priority1 128 priority2 128 [enp11s0]
- Запуск с
sudo
следующим образом и вывод в консоль.$ sudo ptp4l -f /etc/linuxptp/ptpv2.conf ptp4l[886.038]: выбран /dev/ptp7 как PTP часы ptp4l[886.039]: порт 1 (enp11s0): ИНИЦИАЛИЗАЦИЯ к СЛУШАНИЮ на INIT_COMPLETE ptp4l[886.039]: порт 0 (/var/run/ptp4l): ИНИЦИАЛИЗАЦИЯ к СЛУШАНИЮ на INIT_COMPLETE ptp4l[886.039]: порт 0 (/var/run/ptp4lro): ИНИЦИАЛИЗАЦИЯ к СЛУШАНИЮ на INIT_COMPLETE ptp4l[892.103]: порт 1 (enp11s0): СЛУШАНИЕ к МАСТЕРУ на ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[892.103]: локальные часы 00032d.fffe.55bd3b выбраны как лучшие мастер-часы ptp4l[892.103]: порт 1 (enp11s0): принимаю роль главного мастера
- Я также захватил сообщение Announce с помощью Wireshark, чтобы посмотреть, поможет ли это в отладке.
Frame 9466: 78 байт по проводу (624 бита), 78 байт захвачено (624 бита) на интерфейсе enp11s0, id 0 Ethernet II, Src: Trimble_70:07:6a (00:17:47:70:07:6a), Dst: IEEEI&MS_00:00:00 (01:1b:19:00:00) Precision Time Protocol (IEEE1588) 0000 .... = majorSdoId: Unknown (0x0) .... 1011 = messageType: Announce Message (0xb) 0000 .... = minorVersionPTP: 0 .... 0010 = versionPTP: 2 messageLength: 64 domainNumber: 24 minorSdoId: 0 flags: 0x003c 0... .... .... .... = PTP_SECURITY: Ложь .0.. .... .... .... = PTP profile Specific 2: Ложь ..0. .... .... .... = PTP profile Specific 1: Ложь .... .0.. .... .... = PTP_UNICAST: Ложь .... ..0. .... .... = PTP_TWO_STEP: Ложь .... ...0 .... .... = PTP_ALTERNATE_MASTER: Ложь .... .... .0.. .... = SYNCHRONIZATION_UNCERTAIN: Ложь .... .... ..1. .... = FREQUENCY_TRACEABLE: Истина .... .... ...1 .... = TIME_TRACEABLE: Истина .... .... .... 1... = PTP_TIMESCALE: Истина .... .... .... .1.. = PTP_UTC_REASONABLE: Истина .... .... .... ..0. = PTP_LI_59: Ложь .... .... .... ...0 = PTP_LI_61: Ложь correctionField: 0.000000 наносекунд correction: Ns: 0 наносекунд correctionSubNs: 0 наносекунд messageTypeSpecific: 0 ClockIdentity: 0x001747fffe70076a MAC Vendor: Trimble SourcePortID: 1 sequenceId: 28828 controlField: Другое сообщение (5) logMessagePeriod: -3 originTimestamp (seconds): 0 originTimestamp (nanoseconds): 0 originCurrentUTCOffset: 37 priority1: 128 grandmasterClockClass: 6 grandmasterClockAccuracy: Время точно в пределах 100 нс (0x21) grandmasterClockVariance: 20061 priority2: 128 grandmasterClockIdentity: 0x001747fffe70076a localStepsRemoved: 0 TimeSource: GPS (0x20)
- Команда синхронизации
phc2sys -w -m -s enp11s0 -c CLOCK_REALTIME
Когда я проверяю некоторые другие конфигурации в Интернете, их журналы показывают правильный выбор часов, но мои всегда выбирают лучшие мастер-часы как локальные часы, и они не синхронизируют время с мастер/граничными часами (в данный момент я использую устройство Trimble 1570001820 с GPS).
Другие заметки:
- NTP отключен
- Оборудование способно обрабатывать PTP, и установлены последние драйвера.
Алгоритм выбора лучших мастер-часов (BMCA) работает следующим образом:
- Приоритет 1
- Класс часов
- Точность часов
- Варьирование смещения часов
- Приоритет 2
- Идентичность часов
- Удаленные шаги
В вашем случае приоритет 1 у двух часов одинаковый (128), и класс часов тоже одинаковый (6). Я не вижу точности и вариации ваших локальных часов в предоставленных вами данных, но предполагаю, что они тоже должны быть одинаковыми (или лучше) (0x21 и 20061). Приоритет 2 такой же (128).
Таким образом, все значения, которые можно видеть в вашем вопросе, идентичны, что означает, что оба часа считаются «одинаково хорошими», и ни один из них не является «лучшим» мастером.
Таким образом, идентичность часов (которая представляет собой EUI-64, сформированное из EUI-48 MAC-адреса интерфейса часов) используется в качестве средства разрешения споров. Идентификатор часов Trimble 001747.fffe.70076a, в то время как идентичность ваших локальных часов 00032d.fffe.55bd3b, что меньше 001747.fffe.70076a.
Таким образом, ваши локальные часы «выигрывают» BMCA.
Общий совет – дать предстоящему главному мастеру наименьший приоритет 1 (например, 0). Если у вас несколько главных часов, у всех должен быть одинаковый приоритет 1, чтобы то, кто станет главным мастером, решалось исключительно по качеству часов. Обычно также стоит давать им разные приоритеты 2, чтобы, если все имеют одинаковое качество часов, вы могли контролировать, кто станет мастером, а не позволять этому решаться более или менее «случайно» по MAC-адресу.
Если у вас есть цепочка синхронизации часов, обычно рекомендуется давать каждому часу в цепочке немного больший приоритет 1 (что делает его ниже приоритета), чем предшествующему часу.
Я работаю в среде медиастаринфраструктуры, где наша цепочка синхронизации обычно выглядит следующим образом:
- 2 резервных генератора часов с приоритетом 1 = 0.
- Каждый генератор часов подключен к как минимум одному “PTP Follower” коммутатору.
- 2 резервных “PTP Follower” коммутатора с приоритетом 1 = 10.
- Два PTP Follower взаимосвязаны, желательно с более чем 1 резервным соединением.
- Разные поставщики коммутаторов дают разные советы относительно того, следует ли внедрять PTP на Spine или на Leaves. В зависимости от поставщика коммутаторов, либо каждый PTP Follower подключен ко всем Spine, либо ко всем Leaves. Если подключен к Spine, Spine получает приоритет 20, а Leaves – 30; если подключен к Leaves, все наоборот.
- Если имеются коммутаторы агрегации, подключенные к Leaves, они получают приоритет 1 = 40.
- И так далее …
И, наконец, как правило, хорошая практика – полностью отключить функциональность мастер-часов на всех устройствах, которые вы не хотите сделать мастером с самого начала. Таким образом, все устройства, которые должны быть подчинены мастер-часам, должны быть сконфигурированы в режим «только слейв».
Ответ или решение
Когда вы настраиваете синхронизацию времени через PTP (Precision Time Protocol) и наблюдаете, что локальные часы всегда выбираются как лучший мастер, это говорит о том, что устройства рассматриваются как равнозначные с точки зрения алгоритма выбора лучшего мастер-часа (BMCA). В данном случае важно рассмотреть параметры конфигурации и присвоенные значения приоритетов часов.
-
Приоритет 1 и 2: В вашей конфигурации вы установили
priority1
иpriority2
обоих устройств (локального и Trimble) на 128. Согласно алгоритму BMCA, если приоритеты равны, система будет рассматривать другие характеристики часов. Следует выдавать более низкие значения приоритета для часов, которые вы хотите видеть в роли мастера. Рекомендуем установитьpriority1
для Trimble на значение ниже 128, например, на 0 или 10, чтобы он был выбран как лучший мастер. -
Класс часов: У вас
clockClass
установлен на 6 для обоих устройств. Это значит, что их класс не дает преимущества одному из них. Рассмотрите возможность изменения класса часов у менее приоритетного устройства. -
Точность и дисперсия: Если точность и дисперсия локальных часов лучше или равны значениям, передаваемым Trimble, это приведет к тому, что локальные часы будут отбираться. Убедитесь, что
grandmasterClockAccuracy
иgrandmasterClockVariance
у Trimble лучше, чем у локального устройства. Если вы не можете получить эти параметры локальных часов, стоит обратиться к документации или команде поддержки вашего оборудования. -
Идентификаторы часов: Как Вы уже заметили, идентификаторы (Clock Identity) обеих систем различаются. При использовании BMCA, когда все остальные параметры совпадают, выбор делается на основании идентификаторов: меньший идентификатор победит. Убедитесь, что идентификаторы ваших устройств настроены таким образом, чтобы разрешать правильный выбор мастера.
-
Режим "только ведомый": Если некоторые устройства не должны становиться мастерами, следует отключить их возможность выступать в этой роли. Для этого в конфигурации нужно явно указать режим "только ведомый" для этих устройств.
-
Отладка с помощью Wireshark: Вы уже начали использовать Wireshark для анализа сообщений PTP. Если вы продолжаете не видеть сообщений от Trimble, тоже стоит проверить, действительно ли устройство активно и правильно отвечает на запросы.
Таким образом, ваше решение об изменении приоритетов и конфигурации часов позволит системе правильно выбрать мастер-час. Попробуйте следующие действия:
- Установите
priority1
для Trimble на 0. - Убедитесь, что класс, точность и дисперсия ваших локальных часов меньше (или хуже) своих значений.
- Настройте остальные устройства в режиме "только ведомый", чтобы избежать нежелательных выборов мастер-часа.
После внесения изменений, перезапустите ptp4l
и проверьте, будет ли теперь Trimble выбрана как лучший мастер.