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

第 4 章 Martini の設計と実装

4.6 Martini の実装

4.6.1 Martini の構成

Martiniのブロック図を図4.6に示す.

図4.6 Martiniのブロック図

Switch Interface (SWI)はクロックレートの変換やパケットの符号処理,フロー制御,仮想チャネ ルの管理などのネットワークのリンク関連の処理を行う.SWIは,Martiniが接続可能な RHiNET-2/SWRHiNET-3/SWおよびOIP-SW3種類のリンクプロトコルに対応する.

PCI Interface(PCII)はMartiniをPCIバスに接続する際に用いられ,DIMM Interface(DIMMI)は

Martiniをメモリバスに接続する際に用いられる.また,DIMMIは,外部SDRAMへのインタフェー

スも搭載している.PCII32bit/33MHzから64bit/66MHzまでのPCIバスに対応する.DIMMI はPC100およびPC133規格のSDRAMに対応する.

コアロジック(図中のNIC Core Logic)Martiniの中核部分であり,アドレス変換やパケット 構築などのPUSHPULLプリミティブと関わりの深い多くの機能がここで処理される.オンチッ ププロセッサもコアロジック内に位置する.

これら各構成要素のうち,スイッチと共通部分の多いSWIはRWCPによって,また,DIMMIお よびPCIIに関しては日立ITによって実装が行われた.一方,コアロジックに関しては,RWCP 筆者ら慶大のグループとで共同で実装を行った.以下ではコアロジック部を中心に実装を述べる.

4.6.2 コアロジックの構造

MartiniのコアロジックはHardwired Communication Path (HCP)と呼ばれるハードワイヤードロ ジックと,オンチッププロセッサで構成される.

HCPは,ホストなどからのパケット発行要求への対応を行うInitiator Controller (ICONT),ネッ トワークからの到着パケットの処理を行うRemote Controller (RCONT),各モジュール間のDMA 転送を制御するDMA Controller (DMAC)およびPATLBの,4つのブロックに分けて実装を行っ た.図4.7にこれらブロック間のつながりを示す.

Initiator Controller

ICONTWindowSend Controllerで構成される(4.8)4.2.2節でも述べたように,Window はユーザからの要求を受け付けるための,ユーザ空間にマップされるメモリであり,ユーザプロ

Initiator Controller

Remote Controller PATLB AOTF Send

Controller

DMA Controller PCII

or DIMMI

SWI

DIMMI

SRAM for On-chip Processor PCII

図4.7 HCPのブロック図

セスがPUSHやPULL,BOTFによるパケット送出などの要求を行う際に利用される.Windowが キックされると,Windowに付随するコントローラによって要求のパラメータ(BOTFの場合はパ ケットイメージ)FIFOを経てSend Controllerに転送される.

Send Controller内部はInitiatorReplier2つのモジュールで構成される.InitiatorPUSH PULL2種類のプリミティブとBOTFの処理を行い,ReplierRCONT側からのackパケット やpull応答パケットの生成要求の処理を行う.これら2つのモジュールの機能はほぼ同一である が,デッドロックを回避するために,異なるモジュールとして実装した.

Window Send Controller

Initiator

Request FIFO Request

from PCII or DIMMI

DMA Request to DMA Controller

Physicl Page Number from PATLB

PGIDTBL

Replier

Request

from Remote Controller

Header FIFO

Send FIFO Header

Generator

Send Packet to SWI Data from DMA Controller

図4.8 Initiator Controllerのブロック図

Windowを介して発行された要求は,Initiatorに転送される.Initiatorは,まず要求の発行に用 いられたWindowIDよりPGIDTBLを参照して,Windowに対応したPGIDPIDを取得する.

もし,要求がPUSHPULLであった場合,PGIDTBLから読み出したPGIDWindowに書か れているパラメータを元にHeader Generatorでパケットヘッダを生成する.これらヘッダをFIFO

(Header FIFO)に格納し,要求がPUSHの場合は,DMAで読み出されるペイロードとの待ち合わ

せを行う.要求がPULLの場合は,ヘッダの待ち合わせをせずに,そのまま送信用のFIFO (Send FIFO)に転送する.

要求がPUSHであった場合,Initiatorはヘッダ生成と同時にPATLBを参照してローカルプロセ スの通信領域の物理アドレスを取得しておく.その後,DMA要求をDMAコントローラの要求

FIFOに格納し,ペイロードとなるデータがホストから読み出されたら,ヘッダFIFOのヘッダと

結合してSend FIFOを経由して送出する.

PUSHで送信を要求されたデータサイズが大きく,RHiNETでのMTU(2Kbyte)を超えるような

場合は,Initiatorが適宜分割を行い,pushパケットを複数回送出する.また,PUSHで送出する

データが格納されている領域が複数ページにまたがっている場合,Initiatorは繰り返しPATLB アクセスし,連続してDMA要求を発行する.このとき,DMAの要求発行と次のパケットのヘッ ダ生成処理との間に依存がないことから,これらはパイプライン動作する設計としてある.

一方,要求がBOTFであった場合,InitiatorPGIDTBLより得たPGIDで,Windowから読み 出したパケットイメージのヘッダのPGIDが格納されるフィールドを上書きし,できあがったパ ケットイメージをSend FIFO経由で送出する.

ホストからの要求がこれら以外のハードウェア非対応のものであった場合は,Initiatorは例外を 発生し,オンチッププロセッサなどに割込みをかけて処理を依頼する.この仕組みを利用すること で,ユーザプロセスから直接オンチッププロセッサの処理を呼び出すことができ,PUSHPULL 以外の通信プリミティブに関してもユーザレベルでの要求発行を実現できる.

Windowに書かれた内容の処理が完了したら,Martiniは,Windowに書いた要求の処理が完了

し,次の処理の要求の発行が可能になったことをホストに通知する.通知は,あらかじめWindow ごとに指定されたホスト上のメモリ領域に対するDMAによるフラグ(continue flag (contflag)) 書き込みで行う.contflagの書き込み先は,事前にホストからPGIDTBに付随するContinue Flag Table (CONTTBL)と呼ばれるテーブルに格納しておき,PGIDTBLと同様にWindowIDで参照 することでアドレスを得る.その際,CONTTBLには完了フラグの書き込み先の物理アドレスが 登録されているものとし,アドレス変換をせずにこの値を完了通知の際のDMA転送の要求に直 接用いる.これは,contflagに用いる領域はホストプロセスから見るとWindowに付随するI/O領 域の一部と考えることができ,Windowに要求を発行するたびにアドレスが変更になるような使 い方は想定されないためである.

Remote Controller

RCONTは処理が複雑であることから,パケットヘッダの解析を主に行うReceiver Front-end

(RFend)と呼ばれるフロントエンド部と,仮想–物理アドレス変換やDMA要求発行などを行う

Receiver Back-end (RBend)と呼ばれるバックエンド部に分けて実装した(4.8)

Receiver Back-end

RVATLB

Receiver Front-end DMA Reqeust

to DMA Controller

Physical Page Number

from PATLB ACK Request to Initiator

Received Packet from SWI

DMA to DMA Controller

図4.9 Remote Controllerのブロック図

ネットワークから到着したパケットは,SWIを経由してRCONTに転送される.まずRFend て,転送されたパケットのヘッダの解析を行う.

受信したパケットがpushパケットであった場合,RFendはRVATLBを参照してパケットヘッ ダから読み取ったSIDを書き込み先領域の仮想アドレスに変換し,他のヘッダのパラメータとと

もにRBendに渡す.一方,受信したパケットがackパケットやpull応答パケットであった場合,

パケットヘッダに書かれているアドレスはプリミティブ発行時に指定された仮想アドレスなので,

RFendはアドレス変換を行わずに,各種ヘッダのパラメータをRBendに渡す.RBendは,RFend

から渡されたデータ書き込み先の仮想アドレスをPATLBを参照して物理アドレスに変換し,SWI の受信バッファから,データ書き込み先の物理アドレスへのDMA転送要求をDMAコントロー ラに発行する.さらに,pushパケットのヘッダに確認応答を要求するフラグが設定されていた場 合,ackパケットを生成する必要があるので,RFendpushパケットに対応するDMAが完了す るのを待ち,その後ヘッダに書かれているack書き込み先のアドレスなどとともにackパケット

の送出をICONTReplierに要求する.なお,ユーザが送受信アドレスのアラインを気にせず任

意のアドレス間の転送を実現できるよう,Martiniでは受信時のDMA転送の最中にRFend内の

J-joint[114]と呼ばれるモジュールでアラインメントの調整を行う実装となっている.

一方,受信したパケットがpull要求パケットであった場合,RFendはRVATLBを参照してパケッ トヘッダのSIDを読み出し対象となる領域の仮想アドレスに変換した後,他のヘッダのパラメー タとともにpull応答パケットの発行要求をICONTReplierに伝える.Replierは,pull応答パ ケットの発行要求を受け付けると,InitiatorPUSH要求を処理するのとほぼ同様の手順でDMA 要求発行などを行い,パケットを送出する.

到着したパケットのタイプがPUSHやPULLによって生成されるもの以外のハードウェア非対 応なものであった場合,RFendは例外を発生し,オンチッププロセッサなどに割込みをかけて処 理を依頼する.これを利用することで,BOTFなどを利用して発行した独自形式のパケットを,ホ ストCPUやオンチッププロセッサでソフトウェア処理することが可能となる.

PATLB

PATLBはICONTとRCONTによって共有されるため,これらモジュールから独立したモジュー

ルとして実装した.

PATLB2-wayセットアソシアティブの構造とし,エントリ数は全体で2048とした.64bit アドレス変換にも対応しており,ホストが64bit OSの場合は,1024エントリのダイレクトマッ プの構造となる.ミスヒットが発生すると,ICONTRCONTが例外を発生し,オンチッププロ セッサかホストCPUに対して割込みをかけ,リプレースメント処理を依頼する.

なお,RVATLBの構造もPATLBとほぼ同様であるが,RVATLBはRFendからしか参照されな いため,独立したモジュールとして実装せず,RCONT内部に実装を行った.

DMA Controller (DMAC)

DMACはPCII,DIMMI,内蔵SRAMおよびSWIの送受信FIFOの各モジュール間のDMA転 送の制御に対応し,これによりホストメモリ,外部SDRAM,オンチッププロセッサ用内蔵SRAM およびネットワークの任意の組み合わせでのDMA転送を実現する.図4.10DMACの接続を示 す.また図4.11DMACの内部構造を示す.

DMACでは転送対象に1)PCII2)DIMMI3)SRAM4)送受信バッファという固定的な優先順