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)を動かしてみた
またTSNに対応のFPGAボード(KR260)に関しては下記記事で紹介しています。
Wiresharkをインストール・起動する
通信テストをする前にパケット解析するソフトをインストールします。
「Wireshark」です。TSN通信のマスターであるLinuxのPCに入れました。
1 |
sudo apt install wireshark |
インストール時にスーパユーザー以外でも使えるかはYesとしておきました。
インストール後にはアプリケーションの欄からWiresharkを選択できます。
初期状態だと、インターフェース(増設したLANカード(NIC))が選択できませんでした。
下記記事を参考にさせていただき、使えるようになりました。この場を借りてお礼申し上げます。
WiresharkのInterface ListにNICが表示されない場合
1 2 |
sudo dpkg-reconfigure wireshark-common sudo usermod -a -G wireshark <username> |
筆者の環境では、TSNのマスターになるLANカードが「enp4s0」です。
インターフェースを選択すれば、あとはサメの尾ひれ(開始)を押すだけで通信解析が可能です。
TSNのPTP通信を解析してみる
TSNの最初の通信テストであるPTPのメッセージを確認してみます。
通信テストの内容は下記記事で紹介した内容です。下記テスト実施時に解析しました。
TSN Ethernetの実装をFPGA(KR260)で試してみた
マスターのLANカードが「Shenzhen_52:9d:82」、スレーブのKR260が「Xilinx_00:01:2e」です。
下記PTPV2のメッセージにより、遅延時間・オフセットを計算して時刻同期がとれています。
- マスター側からSync Message
- スレーブ側からDELAY_REQ Message
- マスター側からDelay_Resp Message
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
No. Time Source Destination Protocol Length Info 1 0.000000000 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 78 Announce Message 2 0.051688055 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 3 0.051732768 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 4 0.176882752 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 5 0.176921665 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 6 0.302044930 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 7 0.302107473 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 8 0.427316528 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 9 0.427362502 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 10 0.552548720 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 11 0.552623854 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 12 0.595690650 Xilinx_00:01:2e LLDP_Multicast PTPv2 68 Peer_Delay_Req Message 13 0.595835718 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 68 Peer_Delay_Resp Message 14 0.595898969 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 68 Peer_Delay_Resp_Follow_Up Message 15 0.677817497 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 16 0.677892100 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 17 0.802900149 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 18 0.802960149 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 19 0.820467155 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 68 Peer_Delay_Req Message 20 0.820789475 Xilinx_00:01:2e LLDP_Multicast PTPv2 68 Peer_Delay_Resp Message 21 0.820789686 Xilinx_00:01:2e LLDP_Multicast PTPv2 68 Peer_Delay_Resp_Follow_Up Message 22 0.928175213 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 23 0.928242152 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message 24 1.053348708 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 58 Sync Message 25 1.053424713 Shenzhen_52:9d:82 LLDP_Multicast PTPv2 90 Follow_Up Message |
実際にWiresharkでキャプチャした写真です。下記のようにTSNの通信解析できます。
今回のテストで試したTSNの通信設定に関しては下記記事で紹介しています。
TSNとPTPの違いは?通信テストの設定・ログから確認してみた
IEEE 802.1QBVのトラフィックのスケジューリング
次はIEEE 802.1QBVのトラフィックのスケジューリングを入れたパターンでテストします。
この箇所の内容は下記XilinxのKR260の公式サンプル手順の内容です。
テスト内容
前の通信テストに連続する形で、下記スクリプトを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
ubuntu@kria:~$ source /opt/xilinx/tsn-examples/bin/start_qbv_test.sh -tx Please enter the password for sudo access Deleting CAM entry Dest mac- e0:e0:e0:e0:e0:e0, vlanid- 10 [2]+ Killed tail -f ~/.local/log/ptplog Adding CAM entry Dest mac- e0:e0:e0:e0:e0:e0, vlanid- 10, port- swp1 Deleting CAM entry Dest mac- e0:e0:e0:e0:e0:e0, vlanid- 20 Adding CAM entry Dest mac- e0:e0:e0:e0:e0:e0, vlanid- 20, port- swp1 Setting: ep : cycle_time: 1000000 list 0: gate_state: 0x4 gate_time: 700000 nS list 1: gate_state: 0x1 gate_time: 300000 nS selected /dev/ptp2 as PTP clock Setting: ep : cycle_time: 1000000 list 0: gate_state: 0x4 gate_time: 700000 nS list 1: gate_state: 0x1 gate_time: 300000 nS selected /dev/ptp2 as PTP clock tsn_talker: no process found ST PCP:4 Two instances of talker configured, one to generate Scheduled traffic with Vlan 10 packet length 900 at full rate continuously and another to generate BE traffic with Vlan ID 20, packet length 800 at full rate continuously. Using following arguments: Interface: ep Ethertype: 0x8100 Dest Mac: E0:E0:E0:E0:E0:E0 Src Mac: A0:A0:A0:A0:A0:A0 VLAN: 10 PCP: 4 txlen: 900 seq off: 0 pkt_limit: -1 duration: 0 ratelimit: 0 Trigger Enabled: true Trigger Type: Publisher Trigger Mode: HW Using UIO device for Test PMOD controller: /sys/class/uio/uio4 PysicalBase = 0x80030000 Map Size = 0x1000 TPMod Cntrl Virt Addr: 0xffffa75df000 Using following arguments: Interface: ep Ethertype: 0x8100 Dest Mac: E0:E0:E0:E0:E0:E0 Src Mac: A0:A0:A0:A0:A0:A0 VLAN: 20 PCP: 1 txlen: 800 seq off: 0 pkt_limit: -1 duration: 0 ratelimit: 0 Trigger Enabled: false Starting traffic with dest_mac: e0:e0:e0:e0:e0:e0 vlan: 20 pcp: 1 pkt_size: 800 Starting traffic with dest_mac: e0:e0:e0:e0:e0:e0 vlan: 10 pcp: 4 pkt_size: 900 talker start time: sec: 0 ns: 0 ***** Running Talker for 30 seconds ****** ubuntu@kria:~$ talker start time: sec: 0 ns: 0 [2]- Terminated $SUDO tsn_talker -n $PKT -l $ST_LEN -v $ST_VLAN -p $ST_PCP -T hw [3]+ Terminated $SUDO tsn_talker -n $PKT -l $BE_LEN -v $BE_VLAN -p $BE_PCP ubuntu@kria:~$ |
テスト内容としては簡単に記載すると、通信を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箇所
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
No. Time Source Destination Protocol Length Info 6435 4.560152151 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x0992 900 PRI: 0 DEI: 0 ID: 0 6436 4.560152189 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x0993 900 PRI: 0 DEI: 0 ID: 0 6437 4.560152230 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4d4c 800 PRI: 0 DEI: 0 ID: 0 6438 4.560230797 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4d4d 800 PRI: 0 DEI: 0 ID: 0 ~ 6479 4.560447789 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4e27 800 PRI: 0 DEI: 0 ID: 0 6480 4.560447832 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4e28 800 PRI: 0 DEI: 0 ID: 0 6481 4.560453893 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4e29 800 PRI: 0 DEI: 0 ID: 0 6482 4.560513717 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x0994 900 PRI: 0 DEI: 0 ID: 0 6483 4.560513758 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x0995 900 PRI: 0 DEI: 0 ID: 0 ~~ 6507 4.561105676 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x09ad 900 PRI: 0 DEI: 0 ID: 0 6508 4.561184901 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x09ae 900 PRI: 0 DEI: 0 ID: 0 6509 4.561184952 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x09af 900 PRI: 0 DEI: 0 ID: 0 6510 4.561184996 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x09b0 900 PRI: 0 DEI: 0 ID: 0 6511 4.561185045 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4e2a 800 PRI: 0 DEI: 0 ID: 0 6512 4.561185091 a0:a0:a0:a0:a0:a0 e0:e0:e0:e0:e0:e0 0x4e2b 800 PRI: 0 DEI: 0 ID: 0 |
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
1 2 3 4 5 |
802.1Q Virtual LAN, PRI: 1, DEI: 0, ID: 20 001. .... .... .... = Priority: Background (1) ...0 .... .... .... = DEI: Ineligible .... 0000 0001 0100 = ID: 20 Type: 802.1Q Virtual LAN (0x8100) |
Scheduled Traffic (ST)は設定・ログ共にPCPが4となっていました。→OK
優先順位が高く、比較的重要な通信トラフィックとなっています。(7が一番優先順位が高い)
- 設定…vlan: 10 pcp: 4 pkt_size: 900 ※優先順位の高いパケット
- ログ…802.1Q Virtual LAN, PRI: 4, DEI: 0, ID: 10
1 2 3 4 5 |
802.1Q Virtual LAN, PRI: 4, DEI: 0, ID: 10 100. .... .... .... = Priority: Video, < 100ms latency and jitter (4) ...0 .... .... .... = DEI: Ineligible .... 0000 0000 1010 = ID: 10 Type: 802.1Q Virtual LAN (0x8100) |
tsnのトラフィックを作るスクリプトの中身
今回Xilinxが用意したスクリプトを基にTSNのトラフィックを制御しました。
スクリプトの中身を見ると、tsn_talkerというものが働いていました。
--helpを見ると下記形でした。スクリプトや引数など弄れば色々なTSN通信が試せそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
tsn_talker --help Usage: tsn_talker [OPTION...] Generate tsn traffic on the specified interface Ethernet config: -d, --dmac=DST_MAC Destination MAC Address Default: e0:e0:e0:e0:e0:e0 -e, --etype=ETH_TYPE Ethertype. e.g 0x86dd, 0x8100 Default: 0x8100 -i, --iface=ETH_I/F Interface name. e.g. eth0, eth1, eth2 Default: ep -l, --len=PKT_LEN Data length for each packet in bytes. Default: 900 -n, --count=PKT_CNT Number of packets to be transmitted Default: 1 -o, --seq_off=SEQ_OFF Sequence offset. Default: 0 -p, --pcp=PCP_VAL Priority Code Point value. Default: 4 -r, --ratelimit=RATE_LIMIT Rate Limit. Default : 0 -s, --smac=SRC_MAC Source MAC Address Default: a0:a0:a0:a0:a0:a0 -t, --duration=DURATION Duration. Default: 0 -v, --vlan=VLAN_ID VLAN ID. Default: 10 Oscilloscope trigger setup: -O, --trigger-oneshot=y/n y : Trigger only for first frame (Default) n : Trigger for all the frames Applicable only for sw trigger -T, --trigger=MODE Set Subscriber Trigger MODE from: hw : Hardware mode (trigger by hw) sw_1 : Software trigger on subscriber id 1 sw_2 : Software trigger on subscriber id 2 sw_3 : Software trigger on subscriber id 3 n : Do not configure trigger (default) Misc: -?, --help Give this help list --usage Give a short usage message Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Following table explain the effect of options in combination: RATE_LIMIT PKT_CNT Meaning 0 N (>0) N packets are sent and stoped. 0 -1 Unlimited packets are sent. 1 N (>0) N packets are sent in DURATION repeatedly 1 -1 Illegal |
まとめ
TSNの時刻同期の仕組みの重要なポイントである、IEEE 802.1QBVを試してみました。
時刻同期の仕組みとして、通信トラフィックのスケジューリング・時分割がされています。
(単純にPTP通信で時刻精度が良いということだけでは無し)
是非皆さまもTSNに興味ありましたら、ぜひ同様にテストしてみて下さい。
下記記事にて、筆者個人でTSN通信テストした内容をまとめています。
よろしければ一緒にご覧ください。(リンク先はこちら)
コメント