以前の構成では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で同じ問題が発生しないことを祈るのみです。
e1000g は pci@780 上に 2 つと、pci@7c0 上に 2 つと別々に接続されていて、PCI-E の一番左(写真上)のスロットは pci@780 側に繋がってるので、間に入って表示されちゃうんですよね。
返信削除というか、中古でも 6 万円台で取引されているこのカードがヤフオクで 1.48 万円だったのは格安ですね。:)
返信削除