2012-06-28 3 views
6

私は大きなファイルサーバーを構築し、ファイルシステムの選択(linux)のためのスタックオーバーフローコミュニティアドバイスが必要です。nginxを使用して1GBファイルを提供するための最適なファイルシステムです。中程度の書き込みでは、パフォーマンスが向上しますか?

ファイルサーバーは、Nginxを介して、ディスクへの一定の適度な書き込み(RAID5 SATA/7200ディスク大容量)下で、1〜2GBのサイズの静的ファイル(ほとんどの要求ごとに異なる)を提供します。ライト・トゥ・リード比率は約1:5-10であり、1秒あたりに書き込まれる1バイトごとに5-10が読み取られます。 私にとって最も重要なのは、読書のパフォーマンスです。私は、より遅い書類で暮らすことができます。

どのようなLinuxファイルシステムがこのタスクに最適なソリューションですか?そしてなぜ:)ありがとう!

答えて

0

非常に大きなファイルは、使用するファイルシステムにあまり依存しない傾向があります。最新のファイルシステム(FATではなく)は、連続した大きなチャンクにそれらを割り当てることでシークレイテンシを最小限に抑えます。それらの違いが小さいファイルのパフォーマンス、領域不足状況の断片化抵抗、並行性などにあります。大きなファイルを格納するのは比較的簡単な問題です。測定可能な違いがあるとは思わないでしょう。

いつものように:あなたが本当に気にしていれば、ベンチマーク。ファイルシステムのパフォーマンスに関する簡単な答えはありません。

+0

のようなものありませんので、真:(あなたがJFS、XFS対対ext2-3上の大きなファイルを削除しようとしたことがありますか?また、カーネルソースを見て、異なるFSドライバが費やすことを、あなたに明らかにしただろうクリティカルセクションでは異なる時間を示し、IO圧力が高い場合には異なる値をとる傾向があります。 –

+0

大きなファイルを削除するのはユースケースではありませんでした。数字がある場合は、それらを示してください。私は私が書いたもので立つ。 –

+0

番号? 「嘘、悪い嘘、そしてベンチマークがある」マーケティング目標のないベンチマークはまだ見ていない。私は私の経験と公開されているLinuxカーネルソースについて話していました。それにもかかわらず、「私はあなたが測定可能な差異を見ることは疑う」という点はばかげている。 –

4

重いコンテンツを配信して最良の結果を得るには、チューニングする必要があります。以下Nginx core developer's commentを見てみてください:

  1. sendfileの、それが原因先読み( ディスクから読み込まれ、したがって、ブロック)を制御する能力にlinuxの の下で、このようなワークロードに悪い作品OFFスイッチ。

    sendfile off;

  2. 使用大出力バッファ

    output_buffers 1 512K

  3. は、より良いディスクの同時実行性を確保するためにAIOを使用してみてください(と Linuxのそれは同様DIRECTIO必要があります下に注意してください)、すなわち、このような何か

    aio on; directio 512; ;

その他の提言:

  1. チェックファイルシステムのスワップが

  2. ファイルシステムで使用されていない - ext4は、XFSを。 data_writebackとnoatimeのマウントオプションを有効にするのに便利です

5

「実」ディスク(スピンドル)ごとに80MB/sの「ランダム読み取り」パフォーマンスを達成しました。 ここに私の発見です。

まず、ユーザーに必要なトラフィック量とサーバーごとに必要なストレージ量を決めます。

すでにRAID5設定があるので、以下のディスク設定のアドバイスをスキップしてもかまいません。

3 * 2TBディスクを使用する専用の1Gbps帯域幅サーバーの例を示します。 最初のディスクは、OSとtmp専用にしておいてください。他の2つのディスクについては、ソフトウェアRAIDを作成することができます(私にとっては、オンボードハードウェアRAIDよりも優れていました)。そうでなければ、独立したディスク上でファイルを等しく分割する必要があります。ディスク共有の読み取り/書き込み負荷を均等に保つことが理想です。ソフトウェアraid-0は最適なオプションです。

nginxのコンファレンス nginxのを使用してパフォーマンスの高いレベルを達成するには2つの方法があります。

  1. にDIRECTIO

    AIOを使用します。
    directio 512; output_buffers 1 8m;

    "このオプションでは、十分な量のRAMが必要です。" 約12-16GBのRAMが必要です。

    output_buffers 1つの2メートルIO

  2. ユーザーランド。

    BLOCKDEV --setra 4096は/ dev/md0の(または独立したディスクのマウント)「を使用すると、マウントソフトウェアRAID用4-6MBする先読み設定していることを確認してください」

    この設定は、最適なシステムファイルのキャッシュを使用し、はるかに少ないラムを必要とする。 約8GBのRAMが必要です。

共通注意事項:

  • 保つ "オフはsendfile;"

帯域幅スロットルを使用して、使用可能な帯域幅で100sの接続を有効にすることもできます。各ダウンロード接続では、4MBのアクティブRAMが使用されます。

 limit_rate_after 2m; 
     limit_rate 100k; 

上記溶液の両方が1K + 3ディスクサーバ上の同時ユーザに容易に拡張します。 1Gbpsの帯域幅があり、各接続が1Mb/psでスロットルされているとします。 読み取りにほとんど影響を与えずにディスク書き込みを最適化するために必要な追加設定があります。

すべて作成マウントosのディスクにアップロードする/ tmpuploadsをマウントします。これは、重い読み取りが行われている間、間欠的な妨害を確実にしない。次に、oflag = directの "dd"コマンドを使用して、/ tmpuploadsからファイルを移動します。

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k 
関連する問題