CentOS 5 VMWareサーバーが、ディスクイメージを保持するNFSを介してOpenSolaris 2009.06マシンに接続しています。私の仮想マシンは遅いIOによってバインドされているようですので、接続を最適化するためにできる限りのことをしたいと思います。
本番システムでスループットを測定する最良の方法はわかりませんが、dd bs=1024k count=400
show local(OpenSolaris)writes of〜1.6GB/s and remote(CentOS)writes〜50MB/sを使用した非科学的なテスト。現在、7つのVMが接続を介して実行されているため、これらは実際に得ている値よりも低いと思います。
現在、2台のマシンは、両方のNIC(MTU = 9000)でジャンボフレームが有効になっている直接接続されたgigEです。それ以外は、最適化は行われていません。 NFSマウント/エクスポートはデフォルトを使用しています。
パフォーマンスを向上させるには、どこからノブを回す必要がありますか?
明確にするために、単一のGbイーサネット接続を介してNFSで50MB /秒を取得していますか?
また、ホストサーバーは、VMware ServerがインストールされたCentOSを実行しています。これにより、7つのVMが実行されます。より高性能なソリューションであるVMware ESXiではなく、CentOSとVMware Serverを組み合わせて使用した特別な理由はありますか?
50MB /秒は素晴らしいものではありませんが、1本のGbネットワークケーブルで期待するものを大きく下回ることはありません。NFSの調整を行うと、人々が上記で述べたように、70度になると思います。 80MB /秒。次のオプション:
「ro、hard、intr、retrans = 2、rsize = 32768、wsize = 32768、nfsvers = 3、tcp」
システムの両端でおそらくあなたにとって合理的です。
これを超えるには、ネットワークカードをペアにチーム化することを検討する必要があります。これにより、スループットが約90%増加します。 リンク集約 で最高のパフォーマンスを得るには、802.3adをサポートするスイッチが必要になる場合があります。
私が提案する1つのことは、あなたのIO OpenSolarisボックスのスループットは疑わしいほど高く聞こえ、12のディスクは1.6GB /秒のスループットをサポートする可能性が低いためです。それは、 Solaris + ZFS。
次の2つの手順で、OpenSolaris NFSサーバーでZFSインテントログ(ZIL)を一時的に無効にします。
echo zil_disable/W0t1 | mdb -kw
その後、もう一度テストします。 zilstat を使用して、本当にZILにIOが存在しないことを確認します。テストがより高速に実行される場合、パフォーマンスの問題が何かに関係していることがわかります。 ZIL。それでも動作が遅い場合は、ZILが原因ではなく、ZILにSSDを使用しても役に立たないことがわかります。詳細については、 ZFS Evil Tuning Guide を参照してください。 ZIL。
別のオプションは、ネットワークトラフィックをキャプチャし(たとえば、Wiresharkを使用)、問題があるかどうかを確認することです。ジャンボフレーム付き。ワイヤー上のパケットが、構成から予想したとおりであることを確認します。悪い断片化が起こっていますか?再送信はありますか?
私はかつて、Dell r710、1 CPU、4 GB RAM、RAID-10搭載の6 SATAディスクでテストを行いました。クライアントはSun x2100で、上記のようにCentOS 5.3とnfs paramsの両方を備えていました
「ro、hard、intr、retrans = 2、rsize = 32768、wsize = 32768、nfsvers = 3、tcp」
noatimeで両側に取り付けられています。
また、nfsdsを256に増やし、perc6 raidコントローラーにnoopスケジューラーを使用しました。私がしたもう1つのことは、パーティションをRAIDコントローラの64Kストライプサイズに揃えることでした。
次に、ddを使用してnfsパフォーマンスを測定しました-読み取りの場合はgigEパイプを埋めることができましたが、書き込みの場合は、あなたよりもわずかに良い結果しか得られませんでした。非同期を有効にすると、70〜80 MB /秒を取得できましたが、非同期は私の選択肢ではありませんでした。
たぶん、gigEリンクからnfsでこれ以上取得することはできませんか?
RHEL/CentOS 5マシンでは、次のマウントフラグを使用します
nfsvers = 3、tcp、timeo = 600、retrans = 2、rsize = 32768、wsize = 32768、hard、intr、noatime
新しいLinuxカーネルバージョンはさらに大きなrsize/wsizeパラメータをサポートしますが、EL5の2.6.18カーネルでは32kが最大です。
NFSサーバーでは、少なくともLinuxの場合、BBWCを備えたディスクコントローラーがある場合、no_wdelayがおそらく役立つでしょう。また、クライアントでnoatimeフラグを使用する場合は、おそらくnoatimeを使用してサーバーにファイルシステムをマウントすることも意味があります。
そして、すでに述べたように、UDPを気にしないでください。より高速のネットワーク(1GbE +)では、小さいがゼロではない、シーケンス番号の折り返しがデータ破損の原因となる可能性があります。また、パケット損失の可能性がある場合、TCPはUDPよりもパフォーマンスが高くなります。
データの整合性についてそれほど心配しない場合は、「非同期」エクスポートオプションを使用すると、パフォーマンスが大幅に向上します(非同期の問題は、サーバーがクラッシュするとデータが失われる可能性があることです)。
また、少なくともLinuxサーバーでは、十分なNFSサーバースレッドが実行されていることを確認する必要があります。デフォルトの8は低すぎます。
読み取りおよび書き込みのペイロードサイズを大きくすると、役立つことがあります。特にジャンボフレームと組み合わせて使用します。
32kが最適だと思う傾向があります。
rsize=32768,wsize=32768
もちろん、UDPトランスポートへの切り替えはTCPよりも高速です。これにより、転送制御のオーバーヘッドが節約されるためです。しかし、これは信頼できるネットワークとNFSv4が使用されていない場合にのみ適用されます。
ZFSでのNFSパフォーマンスは、ZFSインテントログ(ZIL)にSSDを使用することで大幅に向上します。これにより、操作の待ち時間が短縮されます。 OpenSolaris NFSおよびZFSメーリングリストに関する ZFSパフォーマンス上のVMWare NFS に関するこのスレッドには、ZILパフォーマンスがボトルネックであるかどうかを確認するベンチマークツールなどの詳細情報があります。
ちなみに、ddコマンドはキャッシュに書き込み、ディスクは書き込みません。RAMに書き込みを行っており、Solarisのディスクではないため、「-oflag = sync "でディスクへの書き込みを強制します