2010年4月13日火曜日

ヤフオクで落札したQuad GbEを増設してみた

このエントリーをはてなブックマークに追加
以前のエントリで書いたように、4つあるネットワークインターフェイスを全部アグリゲートしていたのをやめて、2本ずつアグリゲートしてIPMPでロードバランスするようにしてみました。しかし、インターフェイスが突然応答しなくなる症状は治まるどころか、よけいにひどくなってしまいました。

以前の構成では1本死ぬとすぐに全滅していたのですが、この構成ではアグリゲーションが1組だけ死んで、もう一方は生き残ります。ほおっておけば全滅するのでしょうが、その前に死んでいるアグリゲーションをunplumb/plumbして起こせば復旧できます。これでしばらくしのいでいたのですが、さすがに無理があります。

現象を見る限りハードウェア障害の可能性が高いのですが、代わりのNICを増設するとしてもSunのQuad GbEのカードは6万円くらいします。これ以上T2000に投資するのなら、メモリを8Gしか積んでいないT5120が1台あるので、メモリを増設して投入したいところです。しかし、年度初めでZinくんが忙しくて物理層で大きな作業はできません。

何かいい手はないものかと、ふとヤフオクで検索してみたら、中古のSunのQuad GbEのカードが14,800円で出品されているのが見付かりました。これを僕のポケットマネーで落札してJAISTに送りつけて、Zinくんに挿してもらいました。ネットワークケーブルは既設のものを流用したので、8本足にはならず4本足です。昔からチープに運営してきたftp.jaist.ac.jpですが、ここまでチープな手を打ったのは初めてだと思います。
一番左のスロットに挿したら、dladm show-devするとe1000gの間に今回増設したnxgeが表示されるようになってしまいました。これは美しくありませんが、仕方ないですね。
今回増設したカードはnxgeです。以前試したnxgeの10GbEでは割り込みチャンネルが8つありました。GbEではインターフェイスあたり2つずつあるので、カードとしては今回も8つということになります。

最初に各コアで1つのスレッド(strand)だけ割り込みを有効にしていたら、nxgeの8つの割り込みハンドラのうち、いくつかが同じstrand に割り当てられてしまいました。e1000gの4つの割り込みチャンネルが生きていたため、そのような割り当てになったようです。

nxgeは賢くて、同じ相手の送受信を同じCPUで処理できるように割り込みを掛けるので、コンテキストスイッチが少なくなるようになっています。同じstrandに割り込みハンドラを複数割り当ててしまっては、これが台無しです。e1000gを殺してから割り当て直させたところ、割り込みハンドラは8つのコアのstrandに散りましたが、そのうちの一つはSASのHBAの割り込みハンドラとぶつかってしまいました。

各コアの1つのstrandでしか割り込みを受けない設定をやめればいのですが、この制限を取り払うと、2つか3つのコアにnxgeの割り込みが集まって負荷の偏りがひどくなります。そこで、各コアの2つのstrandで割り込みを受けるようにしたところ、許容できる範囲の偏りになりました。

あとは今回の障害の原因が本当にe1000gのハードウェア障害で、nxgeで同じ問題が発生しないことを祈るのみです。

2 件のコメント:

  1. e1000g は pci@780 上に 2 つと、pci@7c0 上に 2 つと別々に接続されていて、PCI-E の一番左(写真上)のスロットは pci@780 側に繋がってるので、間に入って表示されちゃうんですよね。

    返信削除
  2. というか、中古でも 6 万円台で取引されているこのカードがヤフオクで 1.48 万円だったのは格安ですね。:)

    返信削除