■はじめに | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ファイルサーバに求められる事柄 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
最近は『ホームサーバ』という言葉が一般的に使われるようになりましたが,
多様なサービスを立ち上げて(例えば mail server や group ware server として)
活用されている例はあまり多くないような印象を受けます.その反面,最近俄に
熱いジャンルになって来たのが,手軽に使える『NAS (Network Attached Storage)』
です.ネットワークにポチッと接続することにより,手軽に複数台のクライアント
マシンで共有可能なファイルサーバとして利用できる機器を指しますが,I/O data や
BUFFALO,Logitec 等から廉価かつ設定も簡単な製品が多数出てきたこともあり,
自宅に導入する人が増えているようです.尤も,発売以降未だに品薄が
続く
『玄箱』
のように,実用性だけではなく,如何に手を入れて遊べるかを売りにした商品も
存在し,これがブームを牽引している気配もなきにしもあらずですが… さて,NAS を含め,ファイルサーバに求められる要件はいくつかあります. ざっと代表的なものをいくつか挙げるとすると,
さて,私の場合,Terminator TU (以下,TU1号機)に Linux をインストールし, TV録画サーバ機能やネットワークメディアプレイヤーのサーバ機能 etc,様々な 機能を持たせた24時間運転のサーバとして活用しているわけですが,その中でも 最も重要視しているのは,ファイルサーバとしての機能です. 上記3つの要件に照らし合わせてみますと,まずディスク容量に関しては 750GBのディスク容量を持たせ,耐障害性に 対しては外付けディスクを使用したバックアップを 行うことによって実現(を目指)しています. そして3番目ですが,これま ではオンボードの 100Mbps の速度の出る NIC を使用し,Ethernet Switch を 介して各クライアント PC に接続していました.クライアントマシンが Windows の場合,samba 経由で実測でも 100Mbps を使い切る程度のスループットでファイル 共有が出来ていた他,ユーザー数も多くないため,一般的な利用であればそれ程 不満を感じることはありませんでした. しかし,大容量の動画データを扱うようになると, この 100Mbps というスピードが遅く感じられるようになり ます.また,クライアントマシン全てが 100BASE-TX で接続されていますので,サーバと 1対1の通信でもその帯域を食いつぶしてしまい,複数同時にアクセス した場合は,その限られた帯域を食い合うというネットワーク構成かつ状況でした. そこで 1GByte クラスのファイルを『あっと言う間に』転送するということは 無理とは思いますが,現在技術的に可能な選択肢の中で,少しでもこの状況を改善 しようと言うのが今回の試行の狙いです. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■1GbE の種類と利用時のボトルネック | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004年8月現在,『個人が選択可能な範囲で』 100Mbps 以上の高速なネットワーク
通信を行おうと考えた時点で,自ずとその『手段』は一意に決まります.1000Base-T,
所謂 1Gbps Ethernet/ギガビットイーサー (以下,1GbEと略)の導入です. 1GbEと言っても,メディアや伝送方式の違いにより,主要なものを挙げた だけでも以下のように複数の規格が存在します.
企業内 LAN で使用する場合は, 1000BASE-SX や 1000BASE-LX を Ethernet Switch 間で使用することが多いと思いますが,端末と Ethernet Switch 間や家庭内への導入 の場合,1000BASE-T を使うことが多いでしょう.以下,特に断りがない場合, 1GbEと記述した場合,1000BASE-T を指すことにします. 最近は 1GbE の NIC も安くなり,最も安い物であれば 1000円 を切っています. また,M/B にオンボードで搭載されている場合もあります.一方 Switching Hub に関してもポート単価は急激に下がっており,2004年7月現在,千円弱 にまで落ちてきています.100Mbps Ethernet が急激に普及したときと同程度, もしくは,『やや高め』程度のレベルにあるように思います.2年ほど前までは高嶺の 花であったものが,今や容易に家庭内に導入可能になろうとは…良い時代になった ものです. さて,ネットワーク系の方はよくご存じのことと思いますが,1GbE の 通信帯域をフルに使用しようとした場合,現在の一般的な PC の場合は非常に 厳しい状況にあります.例えばごく普通の PC で使用されている PCI バスは 32bit/33MHz であり,帯域は 133[MByte/sec] でしかありません.1GbE で 1[Gbit/sec]の通信を行おうとした場合,必要な帯域は 125[MByte/sec] になり, 全二重通信(送信・受信が同時に行える)の場合はその倍の 250[MByte/sec] にも上ります.そのため,PCI バスは他のデバイス(例えばディスク等)等と 共用していることもあり,帯域の狭さが大きなボトルネックとなります. これを解決するために,サーバ系の M/B では,64bit PCI (64bit/66MHz. 帯域は 533[MByte/sec])や PCI-X (最大 1066[Mbytes/sec])のスロットを 搭載するのが一般的です.また最近は, PCI Express (x16 の場合は 4[GByte/sec]*2,x1の場合は 250[MByte/sec]*2)を搭載した M/B も 出てきています.そのため, 1GbE のパフォーマンスをフルに発揮させる ためには,最低限 64bit PCI カードを使用しなければならないと言えます. 話をに戻すと,当然ながら Terminator は 32bit PCI スロットしか装備して おらず,64bit PCI カードは利用できません.つまり,1GbE を使用したとして も,充分なパフォーマンスを発揮できないことは使用する前から明らかです. しかし,100Mbps Ethernet よりも帯域が向上することこそあれ,低下すること はまず無いでしょう. また,1GbE では,通信に使用可能なパケットサイズを大幅に大きくすることが 可能です.この機能はジャンボフレーム(Jumbo Frame)と呼ばれます.これまでの 通信では,通信を行うデータは 1518[byte] 毎のパケットに分割して転送される ことが一般的(明示的に MTU を変更した場合は別.また,通信経路によって適切な パケットサイズは異なります)ですが,この分割に起因するオーバーヘッドは 大容量なデータを転送しようとした場合に無視できません.そのため,分割単位 をより大きなものにしようというものがこれです.しかし,NIC,Ethernet Hub/Switch 等, 相手ホストまでの通信経路上の全ての機器類が対応していない場合,パケットが 再分割されたり,正常に通信できないなどの不具合を来たす場合があります. 1GbE を使用し,充分にその性能を引き出すためにはジャンボフレームに対応 する機器類を使用する必要があると言われていますが,このような点を理解した 上で使用する方が良いでしょう.別の言い方をすると,Jumbo Frame を使用するか 否かは,性能を取るか互換性を取るかということに言い換えることが出来ると思います. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■Realtek RTL8110Sを使う準備 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■玄人志向 GIU2-PCI | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
今回は,PCI スロット数を2つしか搭載していない Terminator で使用する
ということもあり,マルチインターフェイスカードを使用しました.具体的には,
IEEE1394a,USB2.0,1GbEを搭載した玄人志向 GIU2-PCIです.
カードに関しては,こちらのページ
に解説を行いましたので,こちらを参照して下さい. なお,Reltek製のチップは古くから『高発熱』であることにかけては定評があります ので :-),高負荷が想定される場合は何らかの冷却対策を施した方が良いでしょう. 製品によってはチップヒートシンクが取り付けられている場合がありますが,GIU2-PCI には取り 付けられていません.そこで私はメモリチップ用のヒートシンクを貼り付けることに しました.
ちなみに私の所では,TU1号機,K7DDRに取り付けて現在運用中であり,TU2号機用に も1枚確保済みです.運用期間は一ヶ月程ですが,今のところ動作上の不具合はなく, 安定性して動作しています. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■BUFFALO LSW-GT-8C | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NIC のみ 1GbE では意味がありません.当然ながら Hub も 1GbE に対応した物に
買い換える必要があります.今回私は
BUFFALO LSW-GT-8C
を選択しました.これは
なお,高負荷時にはかなり熱くなるという話も聞きますので,設置場所には注意した 方が良いでしょう.特に上に物を直接重ねて置いたり,開口部を塞いだりしないように しましょう. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Windows/Linuxの対応状況 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Windows で使用する場合,カードに同梱されているCDからドライバを
インストールすることによって利用可能になります.必要に応じて,オンボードの
NIC を BIOS で disable にしてください.
なお,2.4.26 で使用した場合,
オプションで通信速度を指定すると不安定になりました.何らかの理由がない限り,
自動認識させる方が良いでしょう.2.4.27-rcX用のパッチを適用しても同様
でした.
なお,kernel 2.4.26 で make する際には,若干ソースをいじる必要があります.
改行コードが DOS (CR,LF)になっているので UNIX (LF)に直すと共に,irqreturn_t,
IRQ_NONE,IRQ_HANDLED をそれぞれ irqreturn_t_R8169,IRQ_NONE_R8169,
IRQ_HANDLED_R8169に置き換えて下さい(最近の 2.4.x kernel では,2.6.x と互換性
を取るために,ヘッダでこれら値を定義している.でも,型が違うのでエラーになる).
また,Jumbo Frame,ハードウエアフロー制御を有効にする場合は,それぞれ
RTL8169_JUMBO_FRAME_SUPPORT,RTL8169_HW_FLOW_CONTROL_SUPPORT が undef され
ていますので,define に置き換えて下さい.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■1GbE のパフォーマンス | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■通信速度を見る | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Windows2000,Linux 共に安定して動作するようになり,大きなファイルを転送
する際に,目に見えて高速化したことを確認できました.しかし,新しいものを
導入したときには,その性能を数値で確認めたいというのは誰しもが考える所でしょう.
そこで私も実際に調査することにしました. 調査環境は,GIU2-PCIを内蔵した TU1号機および K7DDR を BUFFALO LSW-GT-8Cで介して CAT6 ケーブルで接続し,以下の3つの方法で 通信速度/スループットを計測しました. なお,TU1号機は Pentium3-S/1.26MHz を搭載しており,ディスクは WesternDigital WD2500JB-GV をIDE接続しています.ドライバはKernel 2.4.26 のものを使用しました. K7DDR は AthlonXP-M 2600+ を定格で使用し,ディスクは Maxtor 4R120J0 をIDE 接続しています.ドライバは CD に入っていたものを使用しました.
ちなみに Netperfのダウンロードは こちら から行えます.
(*2)K7DDRから見てWRITE (*)HDBench は変動が若干大きかったため,3回の平均値 (**)ftpの結果は 1Gbyte のファイルを転送時 (***)netperfはあまり変動が大きくなかったが,3回の平均値 HDBenchの結果を見ると,えらく WRITE 時のスループットが低いように見えます. ちなみに Copy は 4796.67[KB/sec]でした.この値をどう解釈したら良いか微妙 ですが,Explorer でファイルを Drag&Drop した際の rrdtool+HotSaNIC のグラフ で観察すると,READ/WRITE 共に 150〜200[Mbps]は出ているようです. ベンチマークソフトの結果は,ある側面から見た場合の指標とのみ 考えた方が良いのかもしれません(自己矛盾を孕みそうですが…). さて,100Mbps で接続していた際には,何れのケースでも,ほぼ帯域をフルに使い切って 利用できていたことが分かっています.これらの結果を合わせて考えますと,以下の 事柄が言えると思われます.
['04/09/01]追記 ちなみに MTU を変更する際には,ifconfig eth0 mtu 5000のように ifconfig コマンドを実行します.
K7DDR 側の Frame size を 7[KB]にすると(Winのドライバで2KB〜7KBまでの1KB 刻みで設定できます),TU側の MTU を 6000[Byte] 以上にすると逆に速度が落ちる 現象が確認できました.そこで K7DDR 側の Frame Size は 3[KB] に固定し,TU側の MTU のサイズのみ変化させて送受信の速度を確認したところ,MTU を大きくすると 転送速度も向上する傾向が見られましたが,5000 [Byte] 以上はほぼ頭打ちになり ました.また,MTU を 9000[Byte] にすると K7DDR->TU 間で通信が行えませんでした. その他,MTUが 7000[Byte] の場合は問題無いのですが,8000[byte]以上にすると, インターネット経由のWebアクセスが TU で出来なくなりました.なお,ネットワーク 構成は『TU->Gbit EtherSW(Jumbo Frame対応)->100Base EtherSW(JumboFrame非対応)->Router->Internet』 という構成になっています.100Base EtherSW に 100Base で直結しているBKi810と TU間は,TUの MTU が 9000[Byte] でも問題なく通信できていますので,ルータ, もしくはその上流で何らかの制限があるのかもしれません.
(一般に MTU が異なるネットワークを接続するルータでは,相手先のMTU/MSS/MRUに
合わせてパケットを分割(フラグメント化)して送信します(最近のブロードバンド
ルータの多くにも,このような機能は搭載されているはずです).ただし,
『分割不可ビット』が立っているパケットを送信/受信した場合はルータで分割できま
せんので,『当該パケットが破棄される→通信が行えない』といったことが起きます.
このような問題もあるため,
Jumbo Frame を使用するネットワークとそうでないネットワークは物理的に分割する
方が良いと言われています.
ただし,TCP プロトコルを用いた通信の場合,ノード間で通信セッションを確立する
前にお互いの MSS を通知し合い,小さい方の MSS で通信を開始します.そのため,
Jumbo Frame 対応・非対応の機器類が混在しているネットワークでも,殆どの場合は
問題無いでしょう.しかし,UDP プロトコルのようなハンドシェイクを行わない通信
の場合は問題が出る場合があります.しかし,これらの
プロトコルの場合,一般に小さなサイズのパケットを使うことが多いので,問題が
表面化することは少ないと思います) このような結果を踏まえ,最終的に TU は MTU 7000[Byte],K7DDR は 3[KB] 固定で動かしています. 改めて Jumbo Frame の効果を考察しますと,フレームサイズを大きくすることにより 転送速度が向上する傾向が見られました.しかし,環境や通信相手によっては, サイズによって転送速度が落ちたり,通信が出来なくなったりする可能性がある と言えそうです. 実際に使用形態でのパフォーマンスを調べるために,ftp を使用して転送速度を 確認してみた所,MTU サイズを大きくしても,1500 [Byte]のときから殆ど変化が 見られませんでした.ディスクアクセスのオーバーヘッドが,全体の スループットのボトルネックになっている印象を受けます.あとは CPU 利用率も かなり高いので,CPU を高速な物にすれば改善する可能性もあります.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■CPU 負荷に関して | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Windows タスクマネージャーで見た際に,ファイルコピー中の K7DDR の CPU 使用率は
30%前後.RRDTool+HotSaNIC で TU1号機の CPU 使用率を見ると,system
とuser合わせて 60%〜80% まで行きました.かなり CPU に負荷がかかっていると言え
ましょう.逆に言うと,CPU をより高速なものに換装した場合,よりスループットが
向上する可能性があります. また,NIC に使用されている chip によって CPU 負荷は大きく変ることは広く知られています. RTL8169/RTL8110S はどちらかと言いますと,性能よりもコストパフォーマンスを重視 した 1GbE 用チップであると言えます.そのため,性能を少しでも高めたい場合には, 多少高価にはなりますが,例えば Intel製 82540を使用した方が良いかもしれません. また,以前は『極力避けるべし』とまで言われていた VIA製チップですが,VT6122 は とても評判が良く,82540 よりも優秀なパフォーマンスを示す場合もあるようです. なお,Jumbo Frame を利用した場合,CPU 負荷が低減する場合もあるようです. スループットも向上しますので,利用可能な場合は積極的に利用した方が良いでしょう.
['04/09/01]追記 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■RRDTool+HotSaNICの調整 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TU1号機では,RRDTool+HotSaNIC を使用し,色々な情報を
常に監視しています.Ethernet トラフィックも
監視対象に含まれている
わけですが,オンボード NIC を殺し,eth0 を 1GbE に変更した所,高負荷時に何故か
"data unknown"と表示されるようになりました.パターンを調べた所,トラフィックが
100Mbpsを超えた時間帯に,このように記録されている
ようです.当然ながら data-traffic/settings は
のように修正してあります.rrdtool が原因かと思い,最新版(1.0.48)にアップデート したり等試してみたのですが,症状は解決せず.HotSaNIC をアップデートしよう…と, 思いましたが,HotSaNIC 0.5.0 はstableではなく,また,過去のデータがある場合は 一部手動でコンバートしないといけないという話も書かれていたために中止.腰を落ち 着け,まずはデータを見てみようということで,rrdtool でデータをダンプしてみる ことにしました. まず,eth0 のトラフィックデータは data-traffic/rrd/eth0.rrd に格納されてい ますので,これを XML 形式でダンプします.
以下は 100Mbps の NIC で設定した場合のダンプ結果(eth0.xml)の一部です.
ここで注目すべきことは,In, Out 共に 100Mbps(=1.2500000000e+07 = 12500000 byte) となっていることです.eth0.xml に書き出されたデータから,100Mbps 以上のトラフィックが 発生しているであろう箇所を 確認した所,
と,なっていました.この"NaN"がくせ者で,『設定されているMax以上の値を DBに記録しようとした→イリーガルな値であると認識され,NaNに置き換え→ データ無し扱い』と,なっていたようです.つまり,このときのデータは既に 失われているということです. そこで eth0.xml を編集し,
の部分を
に書き換え(In, Out の2カ所),
と,コマンドを実行し,eth0 のDBをアップデートしました.ついでにと言っては何ですが, これまで [byte/sec] で見ていたものを,より直感的に見るために [bps] で表示する よう, data-traffic/settings を下記のように編集しました.
以下はその出力例です(かなり圧縮率を高めているため,画像が汚くなっています). グラフはTU1号機とK7DDRとの間でファイルコピーを行ったときの様子です.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■まとめ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
予想はしていましたが,1GbE はこれまで使用していた 100BASE-TX の 10倍もの
通信帯域を持つとは言え,様々なボトルネックにより,実際には最高でも4倍
程度のスピードアップに止まりました.特に多用している samba 経由のファイル
共有では,1.5〜2倍程に止まっています. とは言え,従来の環境よりも高速化が図られたという意味では目的を達成し ており,おまけに今回使用したカードは 1GbE だけでなく,IEEE1394a および USB2.0 インターフェイス付きで 5,000円以下という意味では, コストパフォーマンスは絶大.価格相応以上の性能が出ているようにも 思えます. まとめとしては,Terminator のような PCI スロット数が少ないマシンを 利用している場合,この手のマルチインターフェイスカードの利用は非常に 魅力的な選択肢であり,1GbE も搭載したタイプも一考の価値有りといった 所でしょうか.PCI スロットが余っているのであれば,VIA製チップを使用した 単機能カードを使用した方が,さらに幸せになれるかもしれません. 当初不安であった『安定して動くか』や『Linux で動作するか』という 点もクリアでき,かつ,体感速度が2倍程向上したため, 現在非常に満足 しています.
|