TSNの環境構築して、PTPの通信テストを行いました。
そしてテストしたPTPの設定が、TSNの規格に適応しているのか確認してみました。
設定・ログを見直しながら、PTPとTSNの違いを確認した内容を紹介します。
TSNとPTPの違いは?通信テストの設定・ログから確認してみた
TSNとPTPの違いについて、Wikipediaの情報をそのまま使うと下記になります。
TSN…Time Sensitive Networking
→オーディオ/ビデオ ストリーミングや自動車または産業用制御設備で使用される
リアルタイム制御を備えた統合ネットワーク
PTP…Precision Time Protocol
→コンピュータネットワーク全体でクロックを同期させるために使用される通信プロトコル
TSNにはPTPが使われています。ただ文章だけだと(筆者含めて)イメージしにくいです。
個人の趣味レベルですが、実際の通信テストの設定・ログを見直して確認してみました。
- TSNでPTPのどの機能・設定で使われているか
- テストしたPTP通信が、本当にTSNの規格に対応しているのか
TSNの通信テストと環境
TSNの通信テストと環境構築に関しては下記記事で実施・紹介しています。
TSN Ethernetの実装をFPGA(KR260)で試してみた
テスト環境は「PTP対応のLANカード(NIC)」と「TSNに対応のFPGAボード」です。
PTP対応のLANカード(NIC)の詳細については下記記事で紹介しています。
IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
またTSNに対応のFPGAボード(KR260)に関しては下記記事で紹介しています。
TSN(IEEE 802.1AS)について
TSN(Time Sensitive Networking)は対応した規格があります。IEEE 802.1ASです。
※別記事になりますが、TSNの時刻同期に関連するIEEE 802.1QBVも調査しています。
TSNの時刻同期の仕組み。IEEE 802.1QBVを試してみた
TSNの規格書は有料
本来は正式な規格を確認していくのが良いのですが…規格書は有料です。
一応、IEEEの正式なサイトから購入できます。(リンク先はこちら)
今回は個人の趣味の確認レベルですので、既にネットにある情報を頼ります。
ITmedia様の下記記事によりTSNの規格の特徴が記載されていました。
https://monoist.itmedia.co.jp/mn/articles/2203/28/news007.html
- 1マイクロ秒(100万分の1秒)以下の時刻同期精度
- レイヤー2のPTPメッセージの使用
- Peer-to-peerメカニズムの使用
- 2ステップクロック(FOLLOW_UPメッセージ)の使用
- gPTPドメインの使用は1つのみ
- BMCA(Best Master Clock Algorithm)の使用
上記6つのTSNの特徴を、テストしたPTP通信が満たせているかの観点で確認します。
実際のテストの内容・詳細に関しては下記記事をご確認下さい。
TSN Ethernetの実装をFPGA(KR260)で試してみた
通信テストに使ったconfig(設定)ファイル
PTP通信テストで使ったマスター側のconfig(設定)ファイルが下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[global] transportSpecific 1 priority1 248 priority2 249 ptp_dst_mac 01:80:C2:00:00:0E p2p_dst_mac 01:80:C2:00:00:0E logAnnounceInterval 1 logSyncInterval -3 follow_up_info 1 announceReceiptTimeout 3 syncReceiptTimeout 3 neighborPropDelayThresh 800 min_neighbor_prop_delay -20000000 network_transport L2 delay_mechanism P2P tx_timestamp_timeout 10 |
スレーブ側のconfig(設定)ファイルが下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[global] transportSpecific 1 priority1 250 priority2 251 ptp_dst_mac 01:80:C2:00:00:0E p2p_dst_mac 01:80:C2:00:00:0E logAnnounceInterval 1 logSyncInterval -3 follow_up_info 1 announceReceiptTimeout 3 syncReceiptTimeout 3 neighborPropDelayThresh 800 min_neighbor_prop_delay -20000000 network_transport L2 delay_mechanism P2P tx_timestamp_timeout 10 |
1us秒以下の時刻同期精度
通信テストの結果、時刻同期精度は1us以下の「n(ナノ)s秒単位」でした。→OK
PTP通信開始始めはオフセット値が莫大な値となっていますが、徐々に収束しています。
一桁のn(ナノ)秒単位で時刻同期の精度が取れていることが分かります。
- ptp4l[478.059]: rms 6 max 11 freq -4173 +/- 8 delay 182 +/- 0
PTP通信のスレーブのログではマスタークロックと同期オフセットの各値も出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ubuntu@kria:~$ tail -f ~/.local/log/ptplog ptp4l[465.055]: rms 1267 max 1579 freq -3390 +/- 74 delay 179 +/- 0 ptp4l[466.055]: rms 509 max 780 freq -3565 +/- 117 delay 181 +/- 0 ptp4l[467.055]: rms 76 max 154 freq -3964 +/- 95 delay 182 +/- 0 ptp4l[468.055]: rms 96 max 108 freq -4181 +/- 39 delay 182 +/- 0 ptp4l[469.056]: rms 75 max 93 freq -4246 +/- 13 delay 183 +/- 0 ptp4l[470.056]: rms 43 max 55 freq -4262 +/- 6 delay 183 +/- 0 ptp4l[471.057]: rms 13 max 23 freq -4242 +/- 12 delay 183 +/- 0 ptp4l[472.057]: rms 26 max 35 freq -4184 +/- 14 delay 182 +/- 0 ptp4l[473.057]: rms 17 max 26 freq -4175 +/- 8 delay 182 +/- 0 ptp4l[474.058]: rms 10 max 17 freq -4179 +/- 12 delay 182 +/- 0 ptp4l[475.058]: rms 6 max 8 freq -4179 +/- 7 delay 183 +/- 0 ptp4l[476.058]: rms 5 max 7 freq -4175 +/- 6 delay 183 +/- 0 ptp4l[477.058]: rms 7 max 18 freq -4172 +/- 9 delay 183 +/- 0 ptp4l[478.059]: rms 6 max 11 freq -4173 +/- 8 delay 182 +/- 0 |
レイヤー2のPTPメッセージの使用
PTP通信で使用したconfigファイルの設定から確認できます。
L2、もしくはUDPv4, UDPv6が使われると思います。
マスター・スレーブ共にL2(レイヤー2)のネットワーク層を使用していました。→OK
- network_transport L2
P2Pメカニズムの使用
P2Pメカニズムの設定もconfigファイルから確認できます。
P2P、もしくはE2Eが選択できます。
マスター・スレーブ共にP2Pメカニズムを使用していました。→OK
- delay_mechanism P2P
2ステップクロック(FOLLOW_UPメッセージ)の使用
FOLLOW_UPメッセージの設定もconfigファイルから確認できます。
0(disabled)か1(enabled)が選択できます。
マスター・スレーブ共に1(enabled)で、FOLLOW_UPメッセージ使用していました。→OK
- follow_up_info 1
gPTPドメインの使用は1つのみ
最初にgPTPを使用しているかを確認します。
今回linuxptpというパッケージのptp4lを利用してPTP通信していました。
linuxptpのデフォルトのgPTPのconfigファイルが下記になります。
https://github.com/richardcochran/linuxptp/blob/master/configs/gPTP.cfg
上記を確認すると今回のコンフィグ設定とほぼ同じであることが分かります。→OK
(というかXilinxの公式もこのgPTP.cfgファイルをベースに作ったと思われます)
またマスター1台とスレーブ1台の2台構成なので当然になりますが、ドメインも一つです。
マスターのクロックを基準に動作しています。
BMCA(Best Master Clock Algorithm)の使用
BMCAが動作していることは、ログ・設定ファイルから分かります。
コンフィグファイルは下記設定となっており、マスター側が小さい値を持っています。
- マスター(ptp4l_master.conf)…priority1 248 priority2 249
- スレーブ(ptp4l_slave.conf)…priority1 250 priority2 251
BMCAが使用されると、priorityの値が小さい方がマスタークロックとなります。
スレーブのptp4lのログを見ると、BMCAを使用してbest master clockを使っています。→OK
port 1: new foreign master 6cb311.fffe.529d82-1
selected best master clock 6cb311.fffe.529d82
1 2 3 4 5 |
ptp4l[437.028]: selected /dev/ptp2 as PTP clock ptp4l[437.068]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[437.069]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[440.545]: port 1: new foreign master 6cb311.fffe.529d82-1 ptp4l[444.545]: selected best master clock 6cb311.fffe.529d82 |
まとめ
PTP通信テストをした設定が、TSN規格の特徴を満たしていることが分かりました。
(規格書でのレベルではありませんが、個人の趣味レベルでは確認できました。)
TSNでPTPのどの機能・設定で使われているか、参考にしてもらえれば幸いです。
次の記事でKR260のTSNスイッチとしての設定、マスターとして通信を確認しました。
是非一緒にご覧ください。(リンク先はこちら)
TSNスイッチとして使えるFPGAの評価ボード(KR260)
コメント