tuneoの日記: だぁっ、ファイルサーバがクソ遅い! 9
日記 by
tuneo
Atom D510でソフトウェアRAID5してるからって、シーケンシャルリードもライトも35MB/sってのはなんぼなんでも酷い。改めて体感してみるとやっぱり遅すぎる。
メインマシンに使ってるAthlon64 X2なPCのプロセッサとメモリとマザボをファイルサーバに移植して、もうワンセット揃えるのも骨だしなぁ……。
小容量の高速SSDを購入してキャッシュに使うってのは悪くない発想かも、とは思うんだが、Linuxでファイルシステム(orブロックデバイス)を別のファイルシステム(orブロックデバイス)でキャッシュする仕組みってどんなのがあったっけ?mhddfs?
ネットワーク接続 (スコア:2)
ファイルサーバーってどういうプロトコルで、サービスしているの?
どのくらいの速度を期待しているの?
Gigabit Etherで35 M bytes/sならそんなに酷いとは言わないように思いますが、、、
Re:ネットワーク接続 (スコア:1)
プロトコルはSMBでございます。つまりSamba。
何とか50MB/s出てほしいんですがそんなに高望みでしょうか?
Re:ネットワーク接続 (スコア:1)
ならば次にチェックするのはエラーレート。
再送頻度を定期的に調べる。大抵の場合、LANなら増加量0のはずなのだが…
fjの教祖様
SSD cache (スコア:2)
-- Takehiro TOMINAGA // may the source be with you!
あれ? D510って x86_64に対応してなかったっけ?? (スコア:1)
メモリがいくつ乗っているマシンなのか分かりませんが、ファイルサーバーなら kernel 空間が物理メモリを最大に使いこなせるようにした方が早くなります。1Gbyteまでなら i586 コードでもいいですが、それ以上あるなら x86_64 にしてメモリを全部 kernel に割り当てることも可能なようにした方が効率が良いはず。
というわけで、まずは kernel が 32bit なのか 64bit なのかからチェックしたほうが…
fjの教祖様
Re:あれ? D510って x86_64に対応してなかったっけ?? (スコア:1)
動いてるLinuxはamd64だしメモリは4GBフル搭載ですが、それでも遅いのです。
software RAID5 (スコア:1)
を使用している時点で負けだと思います、はい。
Re:software RAID5 (スコア:1)
それと、NICはM/Bオンボードによく付いてる蟹さんを使用していないよね?
ソフトウェアのチューニングの前に、きちんとパフォーマンスを発揮するH/W構成は必須。
この手の問題の調査手順 (スコア:1)
大抵の場合次のような手順を踏むと良い。
1) OSのバージョン、bit長などを調べる。
- 32bit か 64bitか(CPUの能力に合わせてあるか?)
- 古過ぎて笑っちゃうようなものを使っていないか
(ここはもう問題がないと解っているのだけれど、一応念の為に書いておく)
2) TCP/IP レベルでの再送が発生していないか?
⇒発生しているならまずはネットワーク層を直そう。大昔の資料になって申し訳ないが:
http://www.dd.iij4u.or.jp/~okuyamak/Documents/tuning.japanese.html [iij4u.or.jp]
この辺は未だに有効なチェックの一つだったりする。どうも最近はウィルスチェッカーが
悪さをするらしい。
3) CPU usage を調べよう。CPUに余裕はあるか? (I/O wait + idle が 10% 以上あるか?)
⇒ 余裕が無いならCPUが耐えられないのだ。実行処理を減らすしか無い。
4) CPU は idle がメインか? I/O wait がメインか?
idle がメインなら「やることがない」ということだ。
クライアントからリクエストは十分来ているだろうか??リクエストが来ないなら
処理はできないよね?!
クライアント側のウィルスチェッカーがボトルネックになってたりしない?!
ファイルIOをかけようとするたびに、「その前にウィルスチェッカーがIOをかける」
せいで本来の通信量の2倍IOしてた、なんてケースもある。
5) I/O wait がメインの場合「何の」IO wait だろう?
これは sar を使って調べると良い。
I/O wait には「ネットワーク」IO wait と、disk IO wait がある。
disk IO wait は swap IO と、サービスのためのデータ読み書きがある。
つまり
- ネットワークIO
- Swap IO
- data IO
ファイルサーバの場合、Swap IO を止めるために swapoff してみる。実は、
ファイルサーバが持っているキャッシュって、大抵クライアント側も持っている。
なので、サービスアプリケーションを swap out してまでファイルキャッシュを維持しても
意味がなかったりする。なので、ここを止めてみるのは意味がある。
で、ネットワークIOと data IO の比率が変わったかどうかを見る。
大抵、増えた側がボトルネック。比率が変わらないなら全体のバランスは取れている。
「バランスが取れている」のと「効率よく利用されている」は意味が違う事に注意。
ネットワークIOがボトルネックの場合…NICをもう少しいいものに変えられないか?
data IO がボトルネックの場合、デバイスをもっと早いものに変えられないか?
6) メモリの利用バランスはどうなっている?
ファイルキャッシュが多すぎないか? 少なすぎないか?
/proc/meminfo, /proc/slabinfo の2つを定期的にサンプリングして利用状況の遷移を見る。
(この辺りからケースバイケースになるのでちょっと具体的にこう、という一般方針が書きにくい)
基本的にメタデータのキャッシュを増やして、ユーザデータのキャッシュが減るようにした方が
スループット的には良い。
7) Raid5とかRaid6のストライプサイズは? また、ストライプサイズに合わせて mkfs した??
SMBの場合、IOサイズは基本的に 64kbyte。ただしSMBとかのヘッダー・フッターが付くので正確に
65536byteではない。XP以降は 65536よりちょっと小さいサイズになる。2000までと95/98系は
65500+36byteの2命令を繰り返す…だったかな? 65500は65400だったかもしれん…
ようするに Raid5なら 2n+1, Raid6なら 2n+2 個のディスクを使っていないと
アライメントが合わなくて性能が落ちる。
で。stripe size はいくつがいいのか…というのは一度に開くファイルの数と大きさとの
fjの教祖様