web-dev-qa-db-ja.com

ディスクIOパフォーマンスの違い-Hyper-V / CSV-ゲストとホスト

仮想マシンストレージに接続するためにiSCSIを使用する2つのdifferentHyper-V 2012 R2環境があります。環境は異なりますが(1つはすべて10 GB、もう1つは1 GB/10 GBが混在、1つはRAID 6でSSDアレイを使用し、もう1つは2つのアレイに分散したRAID 10です)、私が見ている奇妙な動作は同じ。

結論として、CSVに対してホストでディスクI/Oテストを実行すると直接、平均IOPSの特定の値が得られます。ただし、same test within仮想マシンをその「ローカル」ディスク(CSVに保存されているvhdxファイル)に対して実行すると、大幅に削減 IOPS値。

物事を展望するために、これが私がテストしている環境です

  • ホスト
    • Windows 2012 R2データセンター
    • 512 GB
    • 48論理プロセッサ
    • iSCSIトラフィック用の10GBファイバー
    • 実行中の1つの仮想マシン
  • ストレージ
    • EqualLogic PS6210S
    • RAID6の24800GB SSD
    • 1つのVMを含む1つの1TBボリューム
    • 10GBファイバー
    • ホストとアレイは専用ネットワークスイッチに接続されています
  • 仮想マシン
    • Windows 2012 R2 Datcenter
    • 127 GBダイナミックディスク
    • ダイナミックRAM
  • I/Oテスト
    • FIO 2.2.10 -- テストソフトウェア
    • 500 MBのテストファイルに対する70/30 R/Wミックス(実際のテスト構成ファイルについては以下を参照)

HostC:\ClusterStorage\VM-Infrastructure)からCSVに対してテストを実行すると、それぞれ約22k/9kの読み取り/書き込みIOPSが得られます。ただし、同じテストをVMのC:\Tempフォルダーに対して実行すると(VMのVHDXファイルはC:\ClusterStorage\VM-Infrastructure 'の配列に格納されます)、数値が表示されます) 13k/6kの。

これは既知の問題ですか? vmのパフォーマンスをホストで得られるものに近づけるために確認する必要がある特定のホスト/ vm設定はありますか? 22kの読み取りパフォーマンスから13kへの低下はかなり劇的です。私はvm内にslightヒットがあると考えましたが、それほど多くはありません-場合によっては40%もありました。

[global]
ioengine=windowsaio
directory=C\:\ClusterStorage\VM-Infrastructure
;directory=C\:\Temp
rw=randrw
rwmixread=70
;rwmixwrite=30
direct=1 ; 1 for direct IO, 0 for buffered IO
bs=8k
iodepth=32 ; For async io, allow 'x' ios in flight
invalidate=1 ; Invalidate page cache for file prior to doing io
numjobs=16 ; Create 'x' similar entries for this job
runtime=120
group_reporting ; ?
thread ; Use pthreads instead of forked jobs

[workload]
name=8k7030test
size=500m
3
Jason

さらなる調査とストレージの専門家との話し合いの結果、犯人が見つかりました。

ホストがsingle仮想マシンを実行していて、そのvmがonlyであったとしても-)クライアントがストレージアレイを読み書きし、組み込みHyper-Vストレージおよびネットワークロードバランサーが起動し、VMを抑制していました。ロードバランサーが無効になっている場合、仮想マシンは、ホストから直接見たものに非常に近いIOPS番号を設定しました。

ストレージ操作の場合、レイテンシthresholdの値は、ネットワーキングの場合は83 msおよび2 msです。よくわかるように、デフォルトのしきい値は非常に強力であるか、iSCSIストレージ接続には適していません。 (もちろん、iSCSI接続では、直接接続されたストレージやローカルストレージでは見られない遅延が追加されます。)これを制御するレジストリ設定(ストレージ用)はHKLM\System\CurrentControlSet\Services\StorVsp\IOBalance\Enabledです。 0の値を設定すると、バランサーが無効になります

詳細については、 http://www.aidanfinn.com/?p=13232 をご覧ください。

バランサーをオフにしておくかどうかは未定です。明らかに、それはそこにあり、理由のために始まります。少数の仮想マシンではおそらくオンにならないはずですが、ホストのロードを開始すると、より有益になります。私の主な目標は、なぜ私の数値が非常に異なるかを理解することでした。

1
Jason