PTP сервер дома. Часть 1
Семён сохраняет полезное_)Как-то вечером я решил что развлечения с PTP мне не хватает на работе и я хочу его дома в своей домашней стойке. На самом деле это нужно для работы базовой станции дома. Прежде чем строить PTP я решил провести A Proof of Concept (POC) где будет один Grand Master и один потребитель.
С чего же начать? Конечно же с выбора сетевых карт. Из доступных есть карты на базе I210 и I226 от Intel. Позже я нашел статью где описан способ подключения GNSS приёмника к карте напрямую. Статья здесь - https://www.erp5.com/rapidspace-Document.Blog.ORS.PPS.Experiment
Найти карту где выведен SDP не то чтобы просто, обычно это официальные карты от Intel. Стоят они дороже, но это того стоит. Далее заказал GNSS приёмник и NTP сервер в одном корпусе: https://www.ozon.ru/product/v-m-z-d-setevoy-server-vremeni-ntp-dlya-gps-beidou-glonass-eu-plug-1861656135/ это https://fc-ntp-100.toimii.fi/
Далее выведем из него через SMA PPS. Также выводим из карты на SMA разъем SDP1 пин.
И соединяем их sma-sma патчкордом.
Сам же NTP сервер подключаю в домашную сеть.
На первой машине что будет выступать у нас GM введем следующие команды:
Здесь не будет подробно всех команд, лишь те что дадут общее понимание
sudo ip addr add 192.168.100.1/24 dev enp6s0s
sudo ip link set dev enp6s0 up
sudo ts2phc -c enp6s0 -m -s generic --ts2phc.extts_correction 1 --ts2phc.extts_polarity "both" --ts2phc.pin_index 2 --ts2phc.pulsewidth 100000000 -l 6 &
sudo ptp4l -i enp6s0 -H -m
на второй выполните
sudo ip addr add 192.168.100.2/24 dev enp6s0s
sudo ip link set dev enp6s0 up
ptp_dev=`ethtool -T enp6s0 | awk '/PTP Hardware Clock:/ {print $4}'`
sudo ./testptp -d /dev/ptp$ptp_dev -L 1,2
sudo ./testptp -d /dev/ptp$ptp_dev -l
sudo ./testptp -d /dev/ptp$ptp_dev -p 1000000000
sudo ptp4l -i enp6s0 -s -H -m
На первой машине мы видим
ptp4l[1287.265]: selected /dev/ptp2 as PTP clock
ptp4l[1287.266]: port 1 (enp6s0): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1287.266]: port 0 (/var/run/ptp/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1287.266]: port 0 (/var/run/ptp/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1294.637]: port 1 (enp6s0): LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[1294.637]: selected local clock 6805ca.fffe.517c3e as best master
ptp4l[1294.637]: port 1 (enp6s0): assuming the grand master role
На второй видим
ptp4l[1267.470]: selected /dev/ptp2 as PTP clock
ptp4l[1267.471]: port 1 (enp6s0): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1267.471]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1267.471]: port 0 (/var/run/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1271.637]: port 1 (enp6s0): new foreign master 6805ca.fffe.517c3e-1
ptp4l[1273.766]: selected local clock c46237.fffe.03168a as best master
ptp4l[1275.637]: selected best master clock 6805ca.fffe.517c3e
ptp4l[1275.637]: port 1 (enp6s0): LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[1277.637]: master offset -452930968 s0 freq +25567 path delay -5465
ptp4l[1278.636]: master offset -452906105 s1 freq +50429 path delay -5465
ptp4l[1279.637]: master offset -5720 s2 freq +44709 path delay -5465
ptp4l[1279.637]: port 1 (enp6s0): UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[1280.637]: master offset -1 s2 freq +48712 path delay -5465
ptp4l[1281.637]: master offset -39 s2 freq +48674 path delay -3706
ptp4l[1282.637]: master offset 1721 s2 freq +50422 path delay -3706
ptp4l[1283.637]: master offset -70 s2 freq +49147 path delay -1912
ptp4l[1284.637]: master offset 540 s2 freq +49736 path delay -1234
ptp4l[1285.637]: master offset 532 s2 freq +49890 path delay -537
Строчки ниже о данных "master offset" говорят о успехе. Сделаем запись логов.



Хорошие результаты что не вышли за ± 50 nS
Какие проблемы обнаружил в ходе работ?
Пока о стабильности более 2 часов говорить нельзя. Есть проблемы и их природу я пока выясняю и планирую побороть, а также планирую дальше улучшать стабильность.