まえがき私は決してLinuxのエキスパートユーザーではありませんが、危険であるほど十分にLinuxで遊んでいます。
私はパーソナルサーバーを構築しています。基本的にはビデオや写真の保存場所として使用するためだけです。現在の仕様は以下のとおりです。
- ギガバイトGA-G41M-ES2Lマザーボード
- Core 2 Duo E6750(2.66GHz)CPU
- 4GB DDR2 RAM
- Vantec UGT-ST644R PCIe SATAカード(RAIDは使用されていません)
- 2×1.5TBおよび2×1.0TBのハードドライブ
- 64GB SSD(起動ドライブ用)
Ubuntu Server 14.04.3 LTSをSSDにインストールし、ZFSonLinuxをインストールしました。 こちら(アルステクニカ) 。また、Samba(バージョン4.1.6-Ubuntu)もインストールされています。これは、残りの(Windows 7以降の)コンピュータ(最終的には2台または3台)からサーバーにアクセスするために使用しています。
4台のドライブすべてがVantecコントローラカードに接続され、各ペアがミラーリングされてZPoolに追加され、合計2.5TBの容量が得られます。 SSDはオンボードコントローラに直接接続されています。
それが機能するとき、それは美しく機能する、しかし...
大量のデータをアレイに書き込むとき、最初の約500MBの「書き込み」は(キャッシュに)うまくいきますが、その後ZFSは約30秒間待機します(を使用してモニターします)。 zpool iostat <pool_name> 1
より多くのデータを受け入れている間に約350MBのキャッシュをアレイに書き込み、約30秒待ち、さらに多くのデータを受け入れている間に約350MBのキャッシュをアレイに書き込み、約30秒待つなど。 。この30秒のチャンクでは、何もしておらず(0 in、0 out)、アイドル状態のままです。
ネットワークリンクは(実際には多分)約5秒で350MBを埋めることができ、プロセス全体に多くのデッドタイムを残します。
このボトルネック/「呼吸」を取り除く方法はありますか?
変更してみた zfs_txg_timeout
値(デフォルトは5秒なので、これはありそうにないようですが、1秒は役に立たないようです)。
また、最小キャッシュ値と最大キャッシュ値をそれぞれ2GBと3GBに設定しましたが、それでも比較的小さいキャッシュから始めます。 ゆっくり 育ちます。私はこの間にシステムのメモリが使用されているのを見ましたが、ZFSは、すべてが待機しているときでも、RAMの使用量を急激に増やすことには消極的です。
私はZFSが異なるサイズのvdevにまたがってストライプできるようにする方法が好きですが、説明されている振る舞いは大量のデータを確実にそれに転送するのにそれを使用することを次に不可能にします。
現在の設定を修正するための提案、または同等に機能する代替案の提案はありますか。洞察力を事前にありがとう。それ以上の情報が必要な場合は、私に知らせてください。
サイドノート:
- 私はアレイ上でローカルディスクのベンチマークを実行しましたが、Windowsコンピュータとネットワークの両方を除外して、同じ動作がそこに現れました。
- ランニング
sync
いくらか善をするように思えますが、一貫してまたは恒久的にではありません。 - この設定ではメモリは最大になりますが、すぐに問題になるとは思いません。
- 私は、これがコントローラの問題ではないことを望んでいます(他にはありません。ボードには4つのポートしかありません(SSD用に1つ、残り3つ))。
- ほとんどの情報筋は、ZILディスクは私の状況では役に立たないと言っているようです。
アップデート(2015年9月1日):
- 私はFreeNASを同じアレイトポロジを使って同じハードウェアにインストールしましたが、まったく同じ問題に遭遇しました。これは、問題が最も可能性の高いハードウェアであることを意味します。
- そのために、私は4台のドライブのうち3台を内部コントローラに置き、それからアレイを作りました。 問題が解決しました! 連続書き込みが達成されました。確かに、それは私が新しいSATAカードを見つける必要があることを意味しますが、少なくともそれは現在理論上で動作します。
iostat -x
実際のボトルネックがどこにあるかを確認する。