• 検索結果がありません。

第 7 章 Martini における乗っ取り機構の提案・

7.5 乗っ取り機構の評価

なお,図中のRVACHK2は,RVATLBのリプレースメントを完了した後に,ハードウェア処理 を安全に再開できるよう新規に追加したステートである.

図の網がけのステートはサスペンダブルに設計されている.以下に,RFendにおけるサスペン デッドステートに遷移する直前のステートとそれに対応する処理の一例を示す.

FLIT1 ネットワーク制御用の特殊パケットが受信されたことを示す.オンチッププロセッサはパ

ケットに対応した処理を行い,その後,RFendのステートをIDLEに設定することで次のパ ケットの受信に備える.

FLIT3 ハードウェア処理できないパケットが受信されたことを示す.オンチッププロセッサはパ

ケットに対応するソフトウェア処理を行う.すなわちこれを利用することで,独自フォー マットのパケットを導入し,リモートでソフトウェア処理させることが可能となる.

RVA RVATLBでミスヒットが発生したことを示す.オンチッププロセッサは何らかの方法でRVATLB のミスヒットしたエントリをリプレースメントした上で,RFendのステートをRVACHK2に 設定し,ハードウェアによるパケット受信処理を再開する.

に設定することで,モジュールによるハードウェア処理を例外発生前の段階から再開させること が可能となる.以下では,これらの有効性を確認するために行った評価について示す.

例外処理の他のモジュールへの影響

まず,送信側もしくは受信側のどちらか一方のモジュールで例外が発生した際の,もう一方の 処理能力への影響についての評価を行った.評価では,Martiniを搭載したノードPC3台用い,

図7.7に示す5通りのパターンで一定サイズのPUSHを連続して発行した際の,送信ノードでのス ループットの合計を測定した.1度のPUSHで送出するデータサイズは128byte512byte2Kbyte 8Kbyte32Kbyte128Kbyte6通りについて測定した.

0 1 2

0 1 2

Nodes Switch

0 1 Send to one node

(1)

Send to two nodes

(2)

0 1 2

Send with RFend exceptions

(4)

Receive with Initiator exceptions

(5)

Receive from two nodes

(3)

0 1 2

2

(a) (b) (a) (b)

(c)

(a) (b) (a) (b)

図7.7 測定データ転送パターン

図7.7の(1)は,3ノード中2ノードのみを用いて,一方がPUSHによるデータ送出を続け,も う一方がそれを受信し続けるパターンである.(2)は1ノードがその他2ノードに対して交互に データ送出を行うパターンであり,(3)は逆に2ノードが1ノードに対して同時にデータ送出を行 うパターンである.(2)では受信のみを行うノードが分散されることからノードのデータ送信能力 の上限を見ることができ,また(3)では送信ノードが複数存在することからノードのデータ受信 能力の上限を見ることができる.(1)の結果を(2)および(3)の結果と比較することで,まず1 1通信におけるスループットが送信処理と受信処理のいずれにより制限されているかがわかる.

(4)は,(1)と同じ状況で,さらにノード2が送信ノード(ノード1)に対してデータを送出し続け るパターンである.ただし,ノード2から送出されるパケット(図中(b))はノード1RFendのス テートRVAで必ず例外を発生させ,オンチッププロセッサにより読み捨てられる.また(5)は,(3) と同じ状況で,さらにノード1PUSH要求(図中(c))を発行し続けるパターンである.ただし,

この要求は必ずInitiatorのステートIPA2において例外を発生させ,オンチッププロセッサによっ てキャンセルされる.なお,(5)については,比較のためにノード1で例外が発生した後,通信要求 をキャンセルせずにInitiatorのステートをIDLEへ戻すようにした場合(以下(5’))についても測定 を行った.この場合,ノード1Initiator1度目のPUSH要求でIDLE–PGID–IPA–IPA2–MISS の遷移を繰り返し,例外を発生し続けることになる.(4)および(5)の結果を(1)および(3)の結 果と比較することで,例外処理が,例外と無関係なモジュールへ及ぼす影響を確認することがで

きる.

このようなパターンで通信を行い,各パターンでの送信側のノードのスループットの総和を求 めた.結果を図7.8に示す.ただし,例外処理と無関係な部分についての結果を見るために,例外 を発生するものに関しては総和を求めず,(4)については(a)におけるスループットを,(5)および (5’)については(a)(b)のスループットの和を求めた.

0 50 100 150 200 250 300 350 400

128 512 2k 8k 32k 128k

Throughput (Mbyte/s)

Data Size (byte) (1)

(2) (3) (4) (5) (5’)

図7.8 乗っ取り処理時のスループット

図7.8より,(1)の結果は(2)の結果とほぼ一致し,(3)よりも低い値であることから,ここでの1 対1通信時のスループットはノードのデータ送信能力の上限により制限されていることがわかる.

(4)ではノード1Martini上のRFendにおいて例外が多発し,常時オンチッププロセッサが到 着パケットを読み捨てる処理を行っているが,その間のノード1からノード0へのスループット は(1)の結果とほぼ一致している.このことから,ノード1の送信処理を行うモジュールはRFend での例外処理の影響を受けていないということがわかる.

(5)ではノード1Initiatorにおいて例外が多発し,常時オンチッププロセッサが通信要求をキャ ンセルする処理を行っている.この場合,他の2ノードから受信されるデータのスループットは データサイズ2Kbyte以上でほぼ一定値となってしまい,全体的に(3)に比べて低い.一方,(5’) の結果を見ると,Initiatorで例外処理のみが繰り返されている場合は(3)と全く等しいスループッ トが得られている.これより,(5)が(3)に比べて低い値を示しているのはInitiatorでの例外処理 の多発が直接の原因でないことがわかる.乗っ取り機構と直接関係ないため詳細について触れな いが,(5)でスループットが制限されているのは,ノード1でのPUSH要求の密な発行によるPCI バスの混雑が原因である.

(3)および(5’)の結果より,送信側もしくは受信側での乗っ取り機構による例外処理は,もう一

方の例外を発生していない側の処理能力に影響しないことがわかる.

例外処理後のハードウェア処理の再開

以下では,例外処理を行った後,例外発生モジュールを例外発生前のステートへ遷移させるこ とでハードウェア処理を再開させることの効果について評価する.

評価では,2ノード間でのPUSHによるPing-Pongにおいて,双方のInitiatorでデータ送出時に

PATLBのミスヒットが発生した際に,PATLBのリプレースメントを行った後,

• InitiatorのステートをIPAに戻しハードウェアによるPUSH処理を再開させた場合(HARD)

パケットヘッダ生成やDMA要求などの処理をすべてソフトウェアで続けた場合(SOFT) のそれぞれについて,RTTの測定を行った.

結果を図7.9に示す.参考値として,PATLBのミスヒットがない場合のRTT (NOEX)もあわせ て示す.

0 10 20 30 40 50 60 70 80

32 64 128 256 512 1024 2048

RTT (µsec)

Data Size (Byte) HARD

SOFT NOEX

図7.9 PATLBミスヒット発生時のRTT

各データサイズにおけるRTTはHARDの方がSOFTよりも常に約10µsec小さい値を示してお り,また,データサイズによるこれらの値の変化はNOEXの値の変化とほぼ同一である.このこ とから,データサイズ増加時のRTTの増加は転送データ量に起因するものと考えられ,HARD SOFTRTTの差はInitiatorにおけるPATLBのリプレースメント後のPUSH処理を,すべてソフ トウェアで実行した際のオーバヘッドによるものであると言える.ここでは,乗っ取り機構を利用

してハードウェア処理を再開させることで,32byte転送時に約21%2048byte転送時に約16% 処理時間の低減を実現している.

7.5.3 ソフトウェアによる通信処理

乗っ取り機構によるプロトコル処理の効率化の効果を確認するために,評価用の通信プリミティ

ブとしてVPUSHを実装した.VPUSHは,複数のプロセスからPUSHによって送られたデータ

を,受信側で動的に決定した任意のアドレスに書き込む通信機構である.

VPUSH機構

MartiniPUSHでは,書き込み先の領域はPUSHを要求したプロセスによりSIDを用いて指定 され,SIDと受信領域の仮想アドレスの対応は受信側のネットワークインタフェース上のRVATLB で管理される.Martiniは,受信のたびにRVATLBの値を増減させるような機構を持たないため,

ソフトウェアで書き換えを行わない限りSIDに対応する仮想アドレスは固定のままとなる.その ため,PUSHによる書き込みが行われた際に,受信側で動的に受信先の領域を決定するような仕組 みを実現するには,受信処理をハードウェアで行わずにオンチッププロセッサで行う必要がある.

VPUSHは,PUSHの受信処理をオンチッププロセッサで行うことで受信側でのPUSHの受信先

のアドレスを任意の値に動的に決定可能とする機構である.VPUSHにおいて,受信時に書き込み 先のアドレスを決定する以外の処理は,PUSHの受信処理とほぼ共通であることから,乗っ取り 機構を利用することで処理の効率化をはかることができると考えられる.

VPUSHの概要

今回実装を行ったVPUSHでは,メッセージ通信の実装などの応用を想定し,ホストメモリ上 にリング状の受信バッファを設け,到着順にデータが先頭から格納されるような設計とした.

受信バッファには,ホストが受信領域のどこまで処理したのかを示す解放ポインタと,どこま でが有効なデータであるかを示す受信ポインタが付随する.これらを用いて受信バッファの使用 状況の管理を行う.

VPUSHの実装

VPUSHでは,受信バッファに付随するポインタのうち,受信ポインタはホストがデータを処理

した時点で更新し,Martiniのオンチッププロセッサがホスト上の受信バッファが不足した際に必 要に応じてこれをポーリングすることから,Martini内のレジスタ上に設けることにした.一方解 放ポインタは,受信のたびにオンチッププロセッサが更新を行うが,ホスト上のプロセスがデー タ到着をポーリングする際に頻繁に読み出しを行うため,Martini内のレジスタに置いてしまうと PCIへのアクセスが頻発し転送効率が下がる.そこで解放ポインタはホストメモリ上に設け,オ ンチッププロセッサからはDMAを用いて更新を行うことにした.

また,VPUSHの受信処理は,オンチッププロセッサのソフトウェアが行うが,パケット到着の

段階からソフトウェア処理を開始してしまうとパケットヘッダの解析をソフトウェアで行う必要 が生じてしまい効率が悪い.そこで,VPUSHPUSHとほとんど同じ仕組みであり,受信処理

にはPUSHのパケットヘッダに含まれる情報があれば十分であることに着目して,パケットヘッ ダの解析をハードウェアで行うことにした.RFendは,ステートがRVAに達した時点でヘッダ解 析がほぼ完了した状態となる.そこで,VPUSHでは,通常のpushパケットを利用し,RVAで例 外が発生するように,受信時に必ずRVATLBでミスヒットが発生するSIDを指定してPUSH要求 を発行する実装とした.

RFendがステートRVAからサスペンデッドステートであるMISSへ遷移すると,オンチッププ

ロセッサは受信先のアドレスを計算し,RFend内のSIDからのオフセット値が書かれたレジスタ の内容を受信先アドレスに更新した上で,RVATLBを参照しないようにレジスタの設定を変更す る.その後の処理は通常のpushパケットを受信した際の処理と全く同一であるため,ソフトウェ ア処理を一旦完了し,RFendのステートをRVAに設定することで,ハードウェア処理を再開させ る.すなわち,pushパケットの受信処理において,本来であればハードウェアでRVATLBを参照 して受信領域の仮想アドレスを得る部分を,ソフトウェアでエミュレーションし,異なるアドレ スを与えたことになる.

以上でpushパケットの受信先のアドレスを,受信時に任意のものに変更可能となるが,VPUSH では,ホストの受信領域に完全にデータを転送し終えた後に解放ポインタを更新する処理をソフト ウェアで行う必要があるため,再びソフトウェア処理に戻ることができるようRFendにブレーク ポイントをセットしておかなければならない.しかし,RFendにはRVA以降IDLEまでのステー トにサスペンダブルなステートがないためブレークポイントをセットすることができない.そこ で,応答パケット生成モジュールのReplierにブレークポイントをセットする.Replierによる応 答パケット転送処理はDMA転送が完了した直後に開始するため,ここにブレークポイントを設 定しておくことで,後でソフトウェア処理に復帰できるようになり,ホストへのDMA転送完了 直後に確実に解放ポインタを更新することが可能となる.

VPUSHは,以上のようにソフトウェア処理の間に部分的にハードウェアによる処理を織り交ぜ

ることで実装されている.なお,VPUSHにおける,送信側が1度の通信要求で送信可能なデータ サイズの上限はRHiNET-2MTUと同じ2048byteとしている.これは,受信時に複数ホストか らPUSHされた転送データがインタリーブした状態でバッファに格納されてしまうことを防ぐた めである.

VPUSHの処理の流れ

VPUSHの流れを図7.10に示す.

送信側は,受信側で例外を発生するSIDを伴ったPUSH要求をMartiniに書き込み(1)push ケットを発行する(2).受信側では,このパケットを受信すると,RFendがRVAまで遷移したと ころで停止状態となり,オンチッププロセッサに乗っ取られた状態となる(3).

オンチッププロセッサは,RFend内の受信アドレスを指すレジスタの値をMartini側で管理する 受信ポインタの値で上書きし(4),同時にReplierに対してブレークポイントを設定する(5).その 後,受信処理を行うモジュールのステートを書き換えてRVAから処理を再開させる(6)(7)

データの受信処理が完了すると,Replierがブレークポイントで停止し(8),オンチッププロセッ サに乗っ取られた状態となるので,通信完了通知としてホスト上の受信ポインタの値をDMAで 更新する(9).

受信側のホスト上のプロセスは,解放ポインタと受信ポインタを比較し,差がある場合にメッ セージが到着しているものと判断して受信バッファのデータを処理する.処理が済んだ後は,解 放ポインタを更新する.