基本は,安定を目指すなら,Xeon X番台,SuperMicro社のM/Bで構成するのが鉄板(鉄板M/B)です.1Uサーバの組み立て済みの機器なら,10万円程度から入手できます.それに,CPU・メモリーを乗せていきます.
チャレンジするならば,ゲーム用M/Bを使います.しかし,ゲーム用M/Bは,グラボ性能を高めるため,行き帰りのPCI-E性能がCPU=>PCI-Eは高性能だが,その逆は,遅いとった場合があります.一方で,鉄板M/Bに比べて,オーバクロックできるため,ピーク性能を達成するには,よいと思われます.
正直言うと,日進月歩ですし,私も現在,SandyBridgeベースのXeonの評価に入っています.したがって,今(2012.6)ならば,ということを前提によんでください.
まずは,M/Bです.MBにおけるポイントは,PCI-E I/O性能にて決定することです.
各コア(CPU)に,クロック,Intelならば,QPIなどのインターコネクト帯域,メモリー速度,レイテンシーなど様々な要素がからんできます.
これらを決定するコツは,利用する帯域のターゲットを定めることで,10ギガビットから30ギガビット程度ならば,シングルIOハブの構成で,デュアルコア or シングルコアを構成します.
トラフィックを受信することを主目的にするならば,IOハブをデュアルにして,CPUもデュアル,クロックも高く,メモリーも速くと要件が高くなります.というのは,受信=割り込みとDMA伝送をしなければ,イーサーネット程度の細切れデータですと,大変リソースを消費します.したがって,受信性能を高める=高スペックとなります.一方で送信で勝負するならば,デュアルIOハブは不要といえます.もちろん,限界に挑戦するには,それなりにハードも高スペックになります.もちろん予算があれば,大は小を兼ねる.つまり,完璧を追求してください.
つぎに,ネットワークカードについてです.たとえば,いまならば, Myricom 10G や,Chelsio T4がおすすめです.Chelsioの方が高性能ですが.BSDで使うなら,Myricomの方が使いやすいでしょう.ストレージカード(RAID)は,LSI社のMegaraidシリーズがおすすめです.ミドルライン(9265など)系が価格も含めてバランスがとれています.なお一部のM/Bには,Intel X520/540などを搭載した内蔵10GbEがありますが,伝送性能はありますが,CPUを消費が大きいため,最近はおすすめできません.
OSですが,Linux系の利用を推奨します.ギガビットクラスならば,BSD系でもなんとかなりますが,BSD系は,メーカー含めて,周辺機器ドライバの作り込みが甘く,また,自分でパッチをかくはめになる場合もあります.さらに,そんなにがんばったわりには,性能が出ません.ということで,チャレンジ用途には向きません.
ネットワークカードなど,各ベンダーがドライバを配布していますが,Redhatなど特定ディストリビューション向けとなっている場合があり,また,ソースからmakeする場合もカーネルを選ぶ場合があります.ドライバがあるからといって自分の使いたいディストリビューションでつかえるとは限らない点に注意します.
今日日のネットワークカードは,認識さえできれば,何もしなくても10ギガくらいはちゃんとでます.でも,これが複数となるとなかなかしんどくなるでしょう.いくつかのコツを以下にまとめます.
他にもありますが,まずは,上記の4点を基本に性能を高めるべくチェックします.
PCI-Eバスは,各IOハブに集約されていますが,すべてがすべて,スペック通り,コネクタ通りにつながっているとは限りません.たとえば,デュアルIOハブの場合,各ハブ毎にPCI-Eがアサインされいます.x8スロットであっても,x4の帯域しかないという場合もあります.
また,同一ネットワークカード内の折り返しであれば,Zero copy でDMA転送に入ることにより低CPU使用率で高い性能を発揮できたり,同一IOH配下にいれることにより,CPU-CPU(デュアルIOハブ+デュアルコアの場合)間の転送コストを考慮し,差し込み構成を検討します.
加えて,トラフィックをかけると性能のでるスロットと出ないスロットが見えてきます.たとえば,Supermicro X8DTUでは,同一NICでも,x16スロット(つまり,IOハブからみて,若番のポートを握っている)は十分な性能が見込めます.
細かいHOWTOは,ここをみてください.
事前に yum install により以下のパッケージを導入しておきます.もし,OSのアップデートがまだの場合は,yum updateして,OSを更新します.
ほか
ncurses-devel や, toolsを使う場合,諸ライブラリが必要なります.
Chelsio社から,source fileをダウンロードして展開,makeしますが,kernelをアップデートでしてる場合は,チェックではじかれますので,UNAME_R引数を指定してmakeします.以下は,nic moduleをmake する例,その次の行は,installする例です.
make UNAME_R=2.6.32-220.el6 nic
make UNAME_R=2.6.32-220.el6 nic_install
全部makeするときは
make UNAME_R=2.6.32-220.el6
make UNAME_R=2.6.32-220.el6 install
となります.加えて,非検証カーネルでのbonding offload モジュールは,Makefile 276,517行目などに,使用するカーネルバージョンを加えてから,makeする必要があります.めんどくさいので,Kernel 2.6.32-220.17.1.el6 ならば,これを置き換えて,makeすれば,よろしいです.
一様に成功すると,以下のように,Status欄にsuccessful か,not-Supported の表示がされるはずです.うまくいかないときは,UNAME_Rや,yum update後ならば,再起動など,確認をしてください.
コンパイル後は,make install にて,モジュールを導入します.install時も上記と同様に,Action項が,Installとなり,結果が確認できます.
リブートを実施します.
FreeBSD9.0では,kernelへのpatchに加えて,ifconfig/netstatのユーザランドアプリにもpatchをあてて,driverを作成します.
事前に,以下のパッケージが必要です.
ちなみに,FreeBSD版は,CPUを結構喰います(Offloadできていない).
*Kernel ソース /usr/src
CentOSでは,認識した順 MACアドレス若い順に,eth0,1,2,...と名付けられていきます.また,NICを変更した場合も,追加という形で,認識されていくため, NICを交換すると,eth番号がそのままということはありません.順序を任意にするには,/etc/udev/rules.d/70-*-network 以下の設定が必要です.
Chelsio + CentOS 6.2 では,多数のNICを積載すると,cxgb4モジュールをロード時に,読み込まれるfirmwareのロードに失敗する場合があります.この場合,タイムアウト待ちとなるため,OS起動まで時間を要します.解決策は,まだ,見いだせていませんが,うまくいくまで,再起動を繰り返します.うまくロードできれば,それ以降は,cold startしない限り問題ありません.
また,T440系のカードを複数組み合わせた場合でのみで遭遇しています.