信頼性の高いデータ転送 | 第4回 - PCI Expressについて 入門編
........
- 更新日
- 2024.11.29
- 公開日
- 2022.02.15
第4回はPCI Expressの信頼性の高いデータ転送方式についての説明ですが、まずは前回のおさらいから。
PCI Expressデバイスは、接続のリンク状態を管理するためにLTSSMを備えており、通信の状態管理や問題の解消などにトレーニング・シーケンスを使用して、信頼性の高い接続を維持しております。今回は更に一歩踏み込み、信頼性の高い転送を実現する仕組みについて説明します。
1. フローコントロール
PCI Expressが「信頼性の高いデータ転送方式」と言われる理由の1つに、フローコントロールが挙げられます。送信側デバイスは、データを送信する際に対向デバイスの受信バッファの空き状況を確認し、データ送信の開始/待機を選択します。受信バッファに十分な空きがある場合のみデータを送信しますので、対向デバイスのバッファが溢れる(オーバーフローする)ことによるデータ消失を予防出来ます(= ロスレス)。フローコントロールを機能させるには、接続デバイス同士がお互いの受信バッファの空き状況を把握する必要があります。第1回記事の図1-7のように、PCI Expressではデータをパケット形式で送信するので、フローコントロールもパケット単位で行われます(図4-1 参照)。
またフローコントロールを初期化したり、バッファの空き情報を更新することで、対向デバイスの最新の状況を把握することが出来ます(図4-2、図4-3、図4-4 参照)。
PCI Expressには、対向デバイスへの通知を目的とした、4種類のパケットがあります。
・InitFC(Initialize Flow Control)パケット
フローコントロール初期化時に、お互いの受信バッファサイズを通知
・UpdateFC(Update Flow Control)パケット
通常動作時に、受信バッファの空サイズを一定間隔で通知
・ACK(Acknowledge)パケット
パケットを正常受信したことを通知
・NACK(Negative Acknowledge)パケット
パケットにエラー(ビットエラーなど)があり、廃棄したことを通知
2. データ転送失敗時のリカバリ機能
第1回記事の図1-7で示したように、PCI Expressではデータをパケットの形で送信します。従って、データ転送失敗時のリカバリ動作も、パケット単位で行われます。送信側(デバイス①)から送られたパケットを受信側(デバイス②)が
正常に受信出来た場合、
受信側(デバイス②)から送信側(デバイス①)へ、正常受信出来たことを示すレスポンス(ACK)を返します。
送信側(デバイス①)はレスポンス(ACK)を受けてから、次のパケットを送信します。
正常に受信出来なかった場合、
以下のいずれかの要因が考えられます。
a)送信パケットが受信側(デバイス②)へ到達していない
b)送信パケットにビットエラーなどの問題があり、受信側(デバイス②)で破棄された
上記a)の場合、送信側(デバイス①)はレスポンス(ACK)を受信しないため、一定時間経過後にタイムアウトして(※)、再送動作を開始します。
上記b)の場合、送信側(デバイス①)はパケットを正常に受信出来なかった旨を示すレスポンス(NACK)を受け取り、再送動作を開始します。このリカバリ動作により、データ転送の成功確率が高くなります。
(※ 規格書「PCI Express Base Specification Revision 3.0」に推奨時間の記述があります)
3. 全ての動作まとめ
これまで説明した以下の動作全てについて、1つのアニメーションにまとめてみました。
1~3. パケットAを正常受信
4~7. パケットBが未達のため再送
8~9. パケットBでビットエラー検出のため再々送
10. パケットBを正常受信
4.まとめと次回の内容
第4回の今回は、PCI Expressの信頼性の高いデータ転送について説明致しました。 PCI Expressでは、デバイス間でフローコントロールを行うことで、受信バッファの空き不足を要因とするデータロスが無くなります。また、データ転送失敗時のリカバリ機能により、データ転送が成功する確率が高くなります。
次回の第5回は、PCI Expressのその他の機能について説明します。