パスワードを忘れた? アカウント作成
316004 journal

tuneoの日記: だぁっ、ファイルサーバがクソ遅い! 9

日記 by tuneo

Atom D510でソフトウェアRAID5してるからって、シーケンシャルリードもライトも35MB/sってのはなんぼなんでも酷い。改めて体感してみるとやっぱり遅すぎる。

メインマシンに使ってるAthlon64 X2なPCのプロセッサとメモリとマザボをファイルサーバに移植して、もうワンセット揃えるのも骨だしなぁ……。

小容量の高速SSDを購入してキャッシュに使うってのは悪くない発想かも、とは思うんだが、Linuxでファイルシステム(orブロックデバイス)を別のファイルシステム(orブロックデバイス)でキャッシュする仕組みってどんなのがあったっけ?mhddfs?

この議論は、tuneo (2938)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
  • by tslashn (37583) on 2011年04月11日 8時20分 (#1934148)

    ファイルサーバーってどういうプロトコルで、サービスしているの?

    どのくらいの速度を期待しているの?
    Gigabit Etherで35 M bytes/sならそんなに酷いとは言わないように思いますが、、、

  • by tt (2867) on 2011年04月13日 5時27分 (#1935551) 日記
    flashcacheじゃね? http://togetter.com/li/96290 [togetter.com]
    --
    -- Takehiro TOMINAGA // may the source be with you!
  • メモリがいくつ乗っているマシンなのか分かりませんが、ファイルサーバーなら kernel 空間が物理メモリを最大に使いこなせるようにした方が早くなります。1Gbyteまでなら i586 コードでもいいですが、それ以上あるなら x86_64 にしてメモリを全部 kernel に割り当てることも可能なようにした方が効率が良いはず。

    というわけで、まずは kernel が 32bit なのか 64bit なのかからチェックしたほうが…

    --
    fjの教祖様
  • by ninestars (5792) on 2011年04月11日 11時47分 (#1934230) 日記

    を使用している時点で負けだと思います、はい。

  • 大抵の場合次のような手順を踏むと良い。

    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の教祖様
typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...