ストレージにおけるデータ転送をFCプロトコルで行なう際、通信経路の不具合などで再送処理がいくつも走るとI/Oのtimeoutが発生してシステムに重大な障害が起こることがある。
そのような事態を避けるためにFCではクレジット方式での制御というものが採用されている。今回の投稿ではこちらについて触れていきたい。
クレジットとは
クレジットとは回数券のことである。通常のデータ転送は送信側ポートからデータが送られて受信側ポートでデータを受け取る。
もし送信側ポートから送られたデータを受信側ポートで受け取ることができなかったら、送信側ポートはデータ再送をする。それでも受け取れなかった場合は更なる再送をする、ということを何度もしていくうちに通信経路ではtimeoutとなったデータで多く埋まり、システム障害へとつながってしまう。
それを避けるためにクレジットという回数券を受信側ポートに保持させて、送信側ポートはこのクレジット数に基づいてデータを送信する。
データ送信1回につき、クレジットが1つ消費される。送信側ポートから送られてきたデータを受信側ポートがうまく受け取って処理を終えると受信確認の応答とともにクレジットが返却される。
受信側ポートでうまく受け取ることができなかったら消費されたクレジットは戻らない。そのため再送のたびにクレジットを消費することとなり、受信側ポートが保持しているクレジット数が0になったら送信側ポートからのデータ送信が停止される仕組みとなっている。
クレジット数の設定
クレジットによる受信できなかったデータ転送の数を制限させることで、受信側のバッファをデータで溢れさせることを防げる。そしてクレジット数を適切に設定することでFCの強みである長距離・高速の通信を性能を維持した形で処理を行なうことが可能となる。
ではそのクレジット数とはどのようにして決められているのか。
HBAポートの場合はクレジット数は固定されており、FLOGIでは各ポートが自分の保持可能なクレジット数を宣言する形となっている。
主に伝送距離や転送速度からおおよそのクレジット数が決まる。あとは転送されるデータのフレームサイズなども。
簡単に計算してみると。以下のような式となる。
例:4Gbpsで距離が20kmの場合
20(距離)×1.5(安全係数)×4(速度)×1/2+6(FLOGIの固定バッファ数)=66
距離が延びれば延びるほど、多くのクレジット数が必要となる。
ひとりごと
いつも利用しているクレジットカードによる決済方法があるのだが、最近コーヒーチェーンであるスターバックスのモバイルオーダーでそのクレカによる決済を使えば高還元
のポイント付与を行なってくれる施策がスタートした。
それからというものの、気分転換で仕事場所を変える際は最寄りのスターバックスでコーヒーを飲みながら作業をすることが多くなった。多くなったというか、ほぼ毎日スターバックスに行っている。
そろそろ店員さんにも認識されている頃合いかな。平日のお昼過ぎから夕方にかけての時間帯でいつもモバイルオーダーで注文してくる男性客、として店員の控室で噂になっているだろう。
店舗面積が広くて、満席になることもそんなにないのでお気に入りのお店になりつつある。あまり居心地が悪くならないように振る舞いを気をつけねば。