TSNの時刻同期の仕組み。IEEE 802.1QBVを試してみた

FPGA

TSNの時刻同期の仕組みの重要なポイントである、IEEE 802.1QBVを試してみました。

通信トラフィックをスケジューリングする仕様を確認しています。

実際の通信テストから、解析方法まで紹介します。

 

スポンサーリンク

TSNの時刻同期の仕組み。IEEE 802.1QBVを試してみた

TSN(Time Sensitive Networking)の時刻同期の仕組みを調べてみました。

IEEE 802.1QBVには通信トラフィックをスケジューリング・時分割する仕様があります。

実際にTSN通信のパケットまで解析して確認しています。

 

TSNの中にある(優先順位が高い)パケットのリアルタイム性を確保できていました。

実際に行った通信テストから解析方法まで紹介します。

 

TSNの通信環境

今回のテスト環境は「PTP対応のLANカード(NIC)」と「TSNに対応のFPGAボード」です。

PTP対応のLANカード(NIC)の詳細については下記記事で紹介しています。

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。 実際にPCにカードを取り付けて、PTPの動作確認まで実施しています LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

またTSNに対応のFPGAボード(KR260)に関しては下記記事で紹介しています。

KR260を購入してUbuntuを動かすまでのメモ

KR260を購入してUbuntuを動かすまでのメモ
XilinxのKria KR260のロボティクス スターター キットを買ってみました。 Digi-Keyから個人で購入しています。 Ubuntuを動かすまでの流れを紹介します。

 

Wiresharkをインストール・起動する

通信テストをする前にパケット解析するソフトをインストールします。

「Wireshark」です。TSN通信のマスターであるLinuxのPCに入れました。

 

インストール時にスーパユーザー以外でも使えるかはYesとしておきました。

 

インストール後にはアプリケーションの欄からWiresharkを選択できます。

 

初期状態だと、インターフェース(増設したLANカード(NIC))が選択できませんでした。

下記記事を参考にさせていただき、使えるようになりました。この場を借りてお礼申し上げます。

WiresharkのInterface ListにNICが表示されない場合

 

筆者の環境では、TSNのマスターになるLANカードが「enp4s0」です。

インターフェースを選択すれば、あとはサメの尾ひれ(開始)を押すだけで通信解析が可能です。

 

TSNのPTP通信を解析してみる

TSNの最初の通信テストであるPTPのメッセージを確認してみます。

通信テストの内容は下記記事で紹介した内容です。下記テスト実施時に解析しました。

TSN Ethernetの実装をFPGA(KR260)で試してみた

TSN Ethernetの実装をFPGA(KR260)で試してみた
TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。 KR260というTSN対応のFPGAボードを使ってテストしています。 TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

 

マスターのLANカードが「Shenzhen_52:9d:82」、スレーブのKR260が「Xilinx_00:01:2e」です。

下記PTPV2のメッセージにより、遅延時間・オフセットを計算して時刻同期がとれています。

  • マスター側からSync Message
  • スレーブ側からDELAY_REQ Message
  • マスター側からDelay_Resp Message

 

実際にWiresharkでキャプチャした写真です。下記のようにTSNの通信解析できます。

 

今回のテストで試したTSNの通信設定に関しては下記記事で紹介しています。

TSNとPTPの違いは?通信テストの設定・ログから確認してみた

TSNとPTPの違いは?通信テストの設定・ログから確認してみた
TSNの環境構築して、PTPの通信テストを行いました。 そしてテストしたPTPの設定が、TSNの規格に適応しているのか確認してみました。 設定・ログを見直しながら、PTPとTSNの違いを確認した内容を紹介します。

 

IEEE 802.1QBVのトラフィックのスケジューリング

次はIEEE 802.1QBVのトラフィックのスケジューリングを入れたパターンでテストします。

この箇所の内容は下記XilinxのKR260の公式サンプル手順の内容です。

 https://xilinx.github.io/kria-apps-docs/kr260/build/html/docs/ros2_multinode_communication_via_tsn/docs/app_deployment.html#id3

 

テスト内容

前の通信テストに連続する形で、下記スクリプトを実行します。

 

テスト内容としては簡単に記載すると、通信を2つにスケジューリング・時分割します。

BE_300us+ST_700usとして分割して、サイクルタイム1000us周期で繰り返します。

  • Best Effort (BE)…vlan: 20 pcp: 1 pkt_size: 800    ※優先順位の低い通信
  • Scheduled Traffic (ST)…vlan: 10 pcp: 4 pkt_size: 900   ※優先順位の高い通信

 

PCP(優先順位)をつけることで、リアルタイム性を確保しています。

VLANの値を変えることで、仮想的にネットワークも分割している形となっています。

(パケットサイズ変えているのは、テスト結果を分かりやすくするため?かと思います)

 

Wiresharkの解析結果

テスト通信中にWiresharkを開始して、通信解析をします。

とあるサイクルタイム1回分の周期のログを切り取っています。

設定したBE_300us+ST_700usとなっていました。 →スケジューリング・時分割OKです。

  • Best Effort (BE)…4.560453893-4.560152230 ≒300us    ※Length_800箇所
  • Scheduled Traffic (ST)…4.561184996-4.560513717 ≒700us ※Length_900箇所

 

PCP(Priority Code Point)の確認

Wiresharkで解析すると通信パケットの中身まで分かります。

PCP(Priority Code Point)の優先順位が設定どおりになっているか確認します。

本来は0~7まで設定できるようですが、今回は1と4を設定していました。

 

Best Effort (BE)は設定・ログ共にPCPが1となっていました。→OKです。

優先順位が低く、遅延が許容される通信トラフィックとなっています。

  • 設定…vlan: 20 pcp: 1 pkt_size: 800  ※優先順位の低いパケット
  • ログ…802.1Q Virtual LAN, PRI: 1, DEI: 0, ID: 20

 

Scheduled Traffic (ST)は設定・ログ共にPCPが4となっていました。→OK

優先順位が高く、比較的重要な通信トラフィックとなっています。(7が一番優先順位が高い)

  • 設定…vlan: 10 pcp: 4 pkt_size: 900   ※優先順位の高いパケット
  • ログ…802.1Q Virtual LAN, PRI: 4, DEI: 0, ID: 10

 

tsnのトラフィックを作るスクリプトの中身

今回Xilinxが用意したスクリプトを基にTSNのトラフィックを制御しました。

スクリプトの中身を見ると、tsn_talkerというものが働いていました。

--helpを見ると下記形でした。スクリプトや引数など弄れば色々なTSN通信が試せそうです。

 

まとめ

TSNの時刻同期の仕組みの重要なポイントである、IEEE 802.1QBVを試してみました。

時刻同期の仕組みとして、通信トラフィックのスケジューリング・時分割がされています。

(単純にPTP通信で時刻精度が良いということだけでは無し)

 

是非皆さまもTSNに興味ありましたら、ぜひ同様にテストしてみて下さい。

コメント