以前も
こんな投稿をしたが、日本国外で slow drain が熱いらしい。
slow drain は credit-based flow control をするプロトコルが持つ弱点の一つだ。詳細は
この論文を読むと参考になる。
簡単に書くと、こんな感じだ。
ファブリックのどこかにある遅いデバイスがバッファクレジットを1000個持っていたとする。さらに、このデバイスのレスポンスタイム(credit に対する応答)が1秒だったとする。これ以外に速いデバイスがあったとする。また、送信側はTxバッファで1000個よりも小さい個数しかもっていない(16個とかその程度)。
#数字に意味はない。送信側に比べ、遅いデバイスがあればいい
すると、送信側は遅いデバイスへの送信でバッファを使い果たしてしまい、速いデバイスに通信しようとしてもできなくなってしまう。これが slow drain だ。
ちなみに Brocade の製品はこれを避けるために、上記の論文でも出ている Virtual Channel を実装しているし、Target Rate Limit という仕組みも実装している。さらにslow drain を起こしたことを検出する bottleneck detection という仕組みもある。
ちゃんと設定しましょう。