vSphere ESXi 5.5のLinux VMでディスクI / Oレイテンシが劇的に増加するのはなぜですか?


8

私は困惑しており、誰かがこの問題の症状を認識してくれることを願っています。

ハードウェア:新しいDell T110 II、デュアルコアPentium G850 2.9 GHz、オンボードSATAコントローラー、ボックス内に新しい500 GB 7200 RPMケーブル接続ハードドライブ、他のドライブは内部にありますがまだマウントされていません。RAIDなし。ソフトウェア:VMware ESXi 5.5.0(ビルド1746018)の下の新しいCentOS 6.5仮想マシン+ vSphere Client。2.5 GBのRAMが割り当てられています。ディスクは、CentOSがそれを設定するために提供した方法、つまり、LVMボリュームグループ内のボリュームとして提供されたものです。ただし、個別の/ homeを省略し、単に/と/ bootを指定しました。CentOSにパッチが適用され、ESXiにパッチが適用され、最新のVMwareツールがVMにインストールされます。システムにユーザーがいない、サービスが実行されていない、ディスクにファイルがない、OSのインストールのみ。vSphere ClientのVM仮想コンソールを介してVMと対話しています。

先に進む前に、多かれ少なかれ合理的に設定したことを確認したいと思いました。VMのシェルでrootとして次のコマンドを実行しました。

for i in 1 2 3 4 5 6 7 8 9 10; do
  dd if=/dev/zero of=/test.img bs=8k count=256k conv=fdatasync
done

つまり、ddコマンドを10回繰り返すだけで、毎回転送速度が出力されます。結果は気がかりです。それはうまく始まります:

262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.451 s, 105 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 20.4202 s, 105 MB/s
...

しかし、これらの7-8の後、それは印刷します

262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GG) copied, 82.9779 s, 25.9 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 84.0396 s, 25.6 MB/s
262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 103.42 s, 20.8 MB/s

かなりの時間、たとえば30〜45分待ってからもう一度実行すると、再び105 MB / sに戻り、数回(場合によっては数回、場合によっては10以上)になると、約20〜再び25 MB /秒。

考えられる原因、特にVMware KB 2011861の予備的な検索に基づいて、Linux i / oスケジューラをnoopデフォルトではなく「」に変更しました。 cat /sys/block/sda/queue/scheduler有効であることを示しています。しかし、それがこの振る舞いに何らかの変化をもたらしたとは思えません。

vSphereのインターフェースでディスクレイテンシをプロットすると、低いスループットを報告する時間中に、ディスクレイテンシが1.2〜1.5 に達する期間が示されddます。(そして、はい、それが起こっている間、物事はかなり応答しなくなります。)

何が原因でしょうか?

同じシステムで追加のボリュームとして他の2つのディスクも構成していたので、ディスクの障害が原因ではないことは快適です。最初はそのボリュームで何か問題があると思っていましたが、/ etc / fstabからボリュームをコメントアウトして再起動し、上記のように/でテストを試みたところ、問題が別の場所にあることが明らかになりました。おそらくESXi構成の問題ですが、ESXiの経験はあまりありません。おそらくばかげているかもしれませんが、何日にもわたって何時間もこれを理解しようとしても、問題が見つかりません。誰かが私を正しい方向に向けてくれることを願っています。

(PS:はい、このハードウェアコンボがサーバーとしてのスピードアワードを獲得できないことはわかっています。このローエンドハードウェアを使用して単一のVMを実行する理由はありますが、それはこの質問の要点ではないと思います[ただし、実際にはハードウェアの問題です。

補遺#1このような他の回答を読んで、私はに追加oflag=directしてみましたdd。ただし、結果のパターンに違いはありません。最初は多くのラウンドで数値が高く、その後20〜25 MB / sに低下します。(最初の絶対数は50 MB /秒の範囲です。)

補遺#2sync ; echo 3 > /proc/sys/vm/drop_cachesループに追加しても違いはありません。

補遺#3:さらに変数を取り出すために、dd作成するファイルがシステムのRAMの容量よりも大きくなるように実行します。新しいコマンドはdd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=directです。このバージョンのコマンドの初期スループット数は、約50 MB /秒です。南に行くと、20〜25 MB /秒に低下します。

補遺#4iostat -d -m -x 1パフォーマンスが「良好」であるときに別のターミナルウィンドウで実行した場合の出力と、「悪い」場合の出力です。(これが実行されている間、私は実行していdd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=directます。)最初に、物事が「良い」場合、次のように表示されます。

ここに画像の説明を入力してください

物事が「悪い」となると、iostat -d -m -x 1これを示しています:

ここに画像の説明を入力してください

補遺#5:@ewwhiteの提案でtuned、さまざまなプロファイルを使用してみましたiozone。この補遺では、さまざまなtunedプロファイルがdd上記の動作に影響を与えたかどうかを実験した結果を報告します。私はにプロファイルを変更してみましたvirtual-guestlatency-performanceそしてthroughput-performance、他のすべて同じに保ち、各変更後、再起動し、各時間が実行されていますdd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct。これは動作に影響を与えませんでした。以前と同様に、最初からうまくいき、多くの繰り返し実行でdd同じパフォーマンスが示されますが、10〜40回の実行後のある時点でパフォーマンスが半分に低下します。次に、を使用しましたiozone。これらの結果はより広範囲なので、以下の補遺#6として追加します。

補遺#6:@ewwhiteの提案で、インストールしてiozoneパフォーマンスのテストに使用しました。さまざまなtunedプロファイルで実行し、非常に大きな最大ファイルサイズ(4G)パラメータを使用しましたiozone。(VMには2.5 GBのRAMが割り当てられており、ホストには合計4 GBが割り当てられています。)これらのテストの実行にはかなり時間がかかりました。FWIW、生データファイルは以下のリンクから入手できます。すべての場合において、ファイルの作成に使用されたコマンドはでしたiozone -g 4G -Rab filename

以下は私の要約です。

前回の実行後に再起動する場合もあれば、再起動しない場合もありiozone、でプロファイルを変更した後に再度実行しただけtunedです。これは全体的な結果に明らかな違いをもたらすようには見えませんでした。

tunedプロファイルは特定の詳細に影響を与えましたが、さまざまなプロファイルは(私の専門知識のない人の目には)によって報告された広範な動作に影響を与えていないようiozoneでした。まず、当然のことながら、一部のプロファイルは、非常に大きなファイルを書き込むためにパフォーマンスが低下するしきい値を変更しました。iozone結果をプロットすると、プロファイルの0.5 GBで切り立った崖が見られますlatency-performanceが、この低下はプロファイルの下で1 GBとして現れますenterprise-storage。第2に、すべてのプロファイルは小さなファイルサイズと小さなレコードサイズの組み合わせで奇妙な変動性を示しますが、変動性の正確なパターンはプロファイル間で異なりました。つまり、以下のプロットでは、左側の凹凸パターンはすべてのプロファイルに存在しますが、ピットの位置とその深さはプロファイルごとに異なります。(ただし、私は、変動のパターンは、実行の間で著しく変化した場合に確認するために、同じプロファイルの繰り返し実行しなかったiozoneことがあるので、同じプロファイルの下で可能なプロファイル間の違いのように見えるものは本当にただのランダムな変動であること。)

以下はiozone、のtunedプロファイルのさまざまなテストの表面プロットですlatency-performance。テストの説明は、のドキュメントからコピーされますiozone

読み取りテスト:このテストは、既存のファイルを読み取るパフォーマンスを測定します。

ここに画像の説明を入力してください

書き込みテスト:このテストは、新しいファイルの書き込みパフォーマンスを測定します。

ここに画像の説明を入力してください

ランダム読み取り:このテストでは、ファイル内のランダムな場所へのアクセスが行われたファイルの読み取りパフォーマンスを測定します。

ここに画像の説明を入力してください

ランダム書き込み:このテストでは、ファイル内のランダムな場所へのアクセスが行われるファイルの書き込みパフォーマンスを測定します。

ここに画像の説明を入力してください

Fread:このテストは、ライブラリ関数fread()を使用してファイルを読み取るパフォーマンスを測定します。これは、バッファリングおよびブロックされた読み取り操作を実行するライブラリルーチンです。バッファはユーザーのアドレス空間内にあります。アプリケーションが非常に小さなサイズの転送で読み取る場合、fread()のバッファーおよびブロックされたI / O機能は、実際のオペレーティングシステムコールの数を減らし、オペレーティングシステムでの転送サイズを増やすことにより、アプリケーションのパフォーマンスを向上させることができます。呼び出しが行われます。

ここに画像の説明を入力してください

Fwrite:このテストでは、ライブラリ関数fwrite()を使用してファイルを書き込むパフォーマンスを測定します。これは、バッファリングされた書き込み操作を実行するライブラリルーチンです。バッファはユーザーのアドレス空間内にあります。アプリケーションが非常に小さなサイズの転送で書き込む場合、fwrite()のバッファおよびブロックされたI / O機能により、実際のオペレーティングシステムコールの数を減らし、オペレーティングシステムでの転送サイズを増やすことで、アプリケーションのパフォーマンスを向上できます。呼び出しが行われます。このテストは新しいファイルを書き込むため、メタデータのオーバーヘッドが測定に含まれます。

ここに画像の説明を入力してください

最後に、iozoneその作業を行っている間に、vSphere 5のクライアントインターフェイスでVMのパフォーマンスグラフも調べました。仮想ディスクとデータストアのリアルタイムプロットを切り替えました。データストアで利用可能なプロットパラメータは仮想ディスクよりも大きく、データストアのパフォーマンスプロットはディスクと仮想ディスクのプロットが行っていたものを反映しているように見えたため、ここでは、iozone終了後に取得したデータストアグラフのスナップショットのみを示します(tunedプロファイルの下)latency-performance)。色が少し読みづらいですが、おそらく最も注目に値するのは、読み取り時の鋭い垂直スパイクレイテンシ(たとえば、4:25、4:30の少し後、4:50〜4:55)。注:ここに埋め込むとプロットは判読できないため、http://cl.ly/image/0w2m1z2T1z2bにもアップロードしました

VMのvSphereリアルタイムプロット

私は認めざるを得ません、私はこれすべてをどうするかわかりません。特に、iozoneプロットの小さなレコード/小さなファイルサイズの領域での奇妙なポットホールプロファイルを理解していません。


長期間IOPSに関して高いディスク使用率を使用していると想定すると、あるレベル(OSディスクの書き込みキューレベル、またはより可能性の高いハードディスクレベル)でディスクの飽和が発生している可能性があります。ディスクが現時点で処理できるよりも多くの要求があります。ディスクの飽和が発生しているかどうかを判断する方法を説明するのに十分な経験はありませんが、調査のポイントになると思います。
Jason Zhu

@JasonZhuいい質問ですね。システムは他に何も実行しておらず、同じコマンドを繰り返し実行しているだけなので、ディスク使用量のレベルはほぼ一定であると想定していました。しかし、それにもかかわらず、行動が現れるまでには長い時間がかかります。私は実行しましたがiostat、それは前後で約90%の使用率を示しました。しかし、私はこれらのことを判断する専門家ではありません-多分飽和がどこかで起こっています。iostat役立つ場合に備えて出力を表示するように質問を更新しています。
mhucka 2014年

ESXのディスクキャッシュが原因である可能性はありますか?テストするディスクは、パフォーマンスまたは安全性のために最適化されていますか?また、パフォーマンスが最適化されている場合、テスト中にESXキャッシュの使用率を確認できますか?スループットのこの書き込みIOの変更は、書き込みがキャッシュにヒットし、いっぱいになるとデステージ速度に低下するように見えます。
バジル

それはあなたのRAIDコントローラーのキャッシュと関係がありますか?いっぱいになるまでIOPS /スループットが高く、HDDの生のパフォーマンスにフォールバックしますか?ちょっと考えてみてください
マリオレンツ

@MarioLenz説明で述べたように、これにはRAIDがありません。
mhucka 14年

回答:


2

正確なESXiビルド番号を教えてください。実際のベースラインを取得するには、fioiozoneなどの専用のディスクパフォ​​ーマンス分析ツールを使用してテストを再試行してください。これを使用することddは実際には生産的ではありません。

一般に、EL6のデフォルトのI / Oスケジューラはそれほど優れていません。締め切りに移行するか、I / Oエレベータを停止するか、さらには調整されたフレームワークをインストールする必要があります

試してください:yum install tuned tuned-utilstuned-adm profile virtual-guest、それからもう一度テストしてください。


ああ、私は実際にスケジューラをnoopに変更したことについては言及しなかった。それを言うために私の質問を編集します。ビルド番号は1746018です(2番目の段落にはそれを含めましたが、何かが起こって切り捨てられたようです-編集の事故だったに違いありません。それも修正します)。調整されたフレームワークとその他のツール。あなたの提案をありがとう。
mhucka

私はtuned、プロファイルvirtual-guestを使用して他のすべてを同じに保ちました(適切な実験的手法-複数の変数を変更しないようにしました)。これは動作に影響を与えませんでした。以前と同様に、問題なく開始されますが、を繰り返し実行(10〜30)するとdd if=/dev/zero of=/test.img bs=16k count=256k conv=fdatasync oflag=direct、パフォーマンスが半分に低下します。私もプロフィールを試しましたlatency-performance-同じ結果です。私は現在試みていthroughput-performanceます。
mhucka 2014年

ddランを伴わない何かを試すことができますか?おそらく、fioまたはiozone以前に言及しましたか?
ewwhite 2014年

します。しかし、最初に、同じテストを繰り返して、動作が変化したかどうかを確認することが理にかなっています。
mhucka

2

私は同じ問題に遭遇し、仮想マシン内の非常に遅いドライブのパフォーマンスに気づきました。Seagate ST33000650NSでESXi 5.5を使用しています。

この KB記事に従ってDisk.DiskMaxIOSize、ディスクのブロックサイズを変更しました。私の場合は4096

VMwareはこれをテストできるので、これに関するVMwareのメモは非常に便利です。

注:この変更は、ESX / ESXiホストを再起動したり、ESX / ESXiホストをメンテナンスモードにしたりせずに行うことができます。

私はこの質問が非常に古いことを知っていますが、mhuckaは彼の投稿に多くのエネルギーと情報を入れたので、私は答えなければなりませんでした。

編集#1: 4096を1日使用した後、以前の値に切り替えました32767。IOとすべてのテストはまだ安定しているようです。私の推測では、がにDisk.DiskMaxIOSize設定された通常のHDDでESXiを実行する32767と、数時間またはおそらく数日間は正常に動作します。パフォーマンスを徐々に低下させるには、VMからの負荷がかかる可能性があります。

調査して後で戻ってきます...


これを共有していただきありがとうございます。ディスクブロックサイズの変更について知っておくと役立ちます。この構成はもうないのでテストできません(最後にそれを捨てて、ベアメタルでCentOSを使いました)が残念ですが、このようなことをもう一度試した場合は、これを調査することになります。 。
mhucka

ProLiant 380 Gen9マシンのesxi 6.5での長い待ち時間を把握しようとしていました。Disk.DiskMaxIOSize私のためにトリックをしました。私は現在2週間研究と測定を行っていました。共有いただきありがとうございます。
EvanBlack

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.