PCI Express デザイン・ガイド ――LSI開発者のための設計Tips
パケットのフロー制御には,バーチャル・チャネルという新しい概念が導入されています(図9).バーチャル・チャネルとは,同一のリンクを共用する複数の独立したデータ・フロー・バッファを使用するメカニズムです.規格では最大八つのバーチャル・チャネルを規定しています.最低一つのバーチャル・チャネルを使用することが必須で,いくつまでのバーチャル・チャネルを使用するかは自由に選択できます.
PCI Expressのフロー制御は,エンド・ツー・エンドのクレジット・ベースで行われます(データ転送を始める前に,受け取り側のバッファの空き状況を確認し,オーバフロー,アンダフローが発生しないメカニズムになっている).このメカニズムを実現しているのがバーチャル・チャネルで,物理的には一つのリンクに,クレジット(空き状況を確認する問い合わせ)を別のデータ・フローとして送信することができます.
各バーチャル・チャネルには,それぞれのバッファを用意し,各バーチャル・チャネルごとにフロー制御を行います.これにより,一つのバーチャル・チャネルのバッファが満ぱいの状態(full)になっても,ほかのバーチャル・チャネルの転送を行うことができます.物理的には一つのリンクを仮想的な複数のチャネルに分けることで,有効に使用することができるのです.
バーチャル・チャネルに優先度をつけるため,トラフィック・クラスというラベルが用意されています(バーチャル・チャネルをトラフィック・クラスでラベル化する).一つのバーチャル・チャネルに対し,複数のトラフィック・クラスを割り当てることもできます.
トラフィック・クラスには八つの優先度があります.そのうち,上位四つのトラフィック・クラスは同期転送に使用することを想定しています.
バーチャル・チャネルとトラフィック・クラスの割り当てはソフトウェアで行います.ソフトウェアは必要なトラフィック・クラスを利用することで,トランザクションの優先度を制御することが可能です.
例えば,一つのリンクの先に複数のデバイスが接続されている場合,ソフトウェアで特定デバイスの(特定のバーチャル・チャネルの)優先度を上げることができます.また,フロー制御はバーチャル・チャネルごとに行われるため,一つのデバイスのバッファが満ぱい(full)になっても,空いているほかのデバイスのトラフィックを転送することができます.例えば,サーバでバックアップを行っているときに,ネットワークI/OよりもディスクI/Oの優先度を上げることができます.
同じトラフィック・クラスのオーダは保証しなければなりませんが,異なるトラフィック・クラスで制御されるストリームはオーダリング・ルールから解放されます.
〔図9〕バーチャル・チャネルの概念図(n個のバーチャル・チャネルが一つのリンクを共有する例)
スイッチを経由してルートのリンクが複数のデバイスに分かれる場合,各デバイスとのトラフィックの優先度を制御することができる.