NECは2012年5月24日、コンピュータ内で拡張カードなどを接続するために使われているシリアルバス規格であるPCI Express(PCIe)を、Ethernet(イーサネット)を利用して延長できる技術「ExpEther」(エクスプレスイーサ)に対応した製品群を発表した(写真1、関連記事:NEC、PCIe機器をイーサ経由で外付けできる「ExpEther」商用化、阪大に600台先行納入)。

写真1●NECが今回発表した、パソコンに搭載する「ExpEtherボード」
[画像のクリックで拡大表示]

 ExpEtherを使うことで、拡張スロットの数が少ないスモールファクタ(小型)のサーバー機などでも、必要な数だけPCIe対応拡張カードを追加利用できるようになる。だが、実用性はどうなのかどうしても疑問も沸く。

 例えば、パケットベースでデータをやり取りする点は同じとはいえ、コンピュータ内部でのデバイス接続のように高速性や低遅延性が必要な領域の技術であるPCIeを、イーサネットLANのような(PCIeに比べれば)低速かつ遅延が大きい通信方式で問題なく拡張可能なのかなど、気になる点がいくつもある。

 そこで、発表会直後にNECの担当者に直接疑問をぶつけて解説を聞いた。以下、その内容を一問一答形式で紹介しよう。

イーサネットを使うということだが、通信ケーブル上にはどういったフレーム(パケット)が流れるのか。

 イーサネットのMACフレームにPCIeのパケット(コマンドやデータ)をそのまま格納してやり取りする。一般にイーサネットLANで使われている通信プロトコルであるTCP/IPは使わず、ExpEther対応機器間でダイレクトにデータをやり取りする。

 つまり、パソコン(CPU)から見るとExpEtherの存在は見えず、CPUパワーを必要とする通信処理も一切発生しない。ちなみに、ExpEtherの拡張カード自体にもCPUは搭載しておらず、すべてロジックLSIで組んでいる。

このデモ環境では途中にLANスイッチが1台挟まっているが(写真2)、遅延などは大丈夫なのか。

写真2●デモ環境ではLANスイッチを介してグラフィックスボードの映像などを伝送していた
[画像のクリックで拡大表示]

 このデモ環境では、LANスイッチを経由すると約1.5マイクロ秒(マイクロは100万分の1)程度の遅延(レイテンシ)が加わる。これに、LANケーブルを伝送する際の遅延(距離によって変わる)などを加えた2~3マイクロ秒程度が合計の遅延となる。PCIeをコンピュータ内部で使うときのCPUとPCIeデバイス間の接続遅延は最短ナノ秒(ナノは10億分1)オーダーの世界であり、この数字だけを見ると圧倒的な差がある。

 しかし、実際はPCIeデバイスに対してコマンドを送り、応答が返ってくるまでの時間(RTT、Round Trip Time)としてはもっとずっと大きな値が認められており、複数台のLANスイッチを介してケーブル長が合計1kmといった工場などのネットワーク環境でも問題なく利用できる。我々の検証結果では、ケーブル長が10km程度でも利用できている。

 専用のLSI「ExpEtherエンジン」はいわゆる「PCIeスイッチ」(PCIeデバイスをバスにぶら下げて増やすための機構)の機能を備えており、この内部ファブリックの部分に関しては遅延に関する規定がない。これをうまく利用することでイーサネットLAN部分の遅延を吸収できるしくみになっている。もちろん、あまりに遅延が大きい環境で使う場合、PCIe規格上はエラーにならなくても、パフォーマンスの面で問題が出る可能性はある。

LANスイッチを経由する際にバッファ溢れなどでパケットロスが起こったらどうなるのか。

 バッファ溢れなどのエラーに関しては、TCPのようなシーケンス(パケットの到達順序)管理や再送制御、輻輳(ふくそう)制御などの仕組みをExpEther側で自前で実装している。パソコンとして通信はしていなくても、ExpEtherエンジンから先はイーサネットとExpEtherが備える通信制御の仕組みをそれぞれ使って通信しているわけだ。

 なお、今回発売したパソコン搭載用のExpEtherボードは2系統のLANの口を備えているが、完全に冗長化されている。1系統だけ使うことも可能だし、ケーブルを追加すれば即座に2系統を利用してパケットを振り分けて伝送するようになる(伝送帯域も2倍になる)。その状態からケーブルを1本抜けば、ロスしたフレームの再送処理なども自動で実行されエラーが出ることもない。パソコン側の設定変更なども一切不要だ。

最大1518バイトの通常のMACフレームを使うのか。フレームサイズを拡張するジャンボフレームなどは使わない?

 通常の64~1518バイト(データ部分は46~1500バイト)のMACフレームをそのまま利用している。1回にやり取りするデータは現状128バイト、コマンドに関しては12バイトともっとずっと小さく、64バイトの最小フレームでも余るほど(余った分はパディングする)。このように、そもそも1500バイトも必要ない。

仕様上は複数台のコンピュータでExpEtherで接続したPCIeデバイスを共有できるという話だが、どのように識別して共有するのか。

 いわゆるイーサネットのVLAN IDのような「グループID」というIDを個々のExpEtherデバイスが持っている。複数台のパソコンでデバイスを共有するときは、利用するたびにデバイス側のグループIDを外部サーバーなどで切り替えて時分割方式で利用するといった形になるだろう。また、将来的には「SR-IOV」(Single Root I/O Virtualization)などの仕組みを使って共有する形になると思われる。

 ただし、今回発売する機器はそういうサーバーを使った方式ではなく、デバイス側に備わっているロータリースイッチなどを使ってグループIDを手動で切り替えるようになっている。