web-dev-qa-db-ja.com

Citrix XenServerからより多くのI / Oパフォーマンスを得るには?

HPサーバーにCitrix XenServer 6.1がインストールされています(1x Intel Xeon E5630 @ 2.53GHz(4コア、8スレッド、RAM:dom0用に752MB、ゲスト用に55286MB)。サーバーには2つのscsiミラーリングディスクがあり、devに使用されます/ testing。

ホストは、テスト中に電源をオンまたはオフにした5つのゲストを実行します。ほとんどのパフォーマンステストでは結果が良くありませんでした。しかし、Xenを調整したいと思います。たとえば、 "dd if =/dev/zero ..."を指定すると、ホストで130MB/sになりますが、単一のゲストでは75MB/sになります。

dd if=/dev/urandomゲストでは、CPUが飽和状態になり、7MB /秒を取得します。

tune-vcpus、dom0に8個のvCPUを割り当てることができ、パフォーマンスが低下しました。デフォルトは4 vCPUで、dom0に1 vCPUのみを与えたいのですが、機能しません。

これが私が試したものです:

  • 編集/etc/sysconfig/tunes-vcpus> NR_DOMAIN0_VCPUS = 1およびMAX_NR_DOMAIN0_VCPUS = 1
  • /etc/init.d/tune-vcpus開始分
  • ホストを再起動します

私も試しました

/opt/xensource/libexec/xen-cmdline -set-dom0 blkbk.reqs=256

ストレージからより多くのパフォーマンスを得るには、何も変更しません。

また、VBDでQosを有効にし、テストを行う場所を最優先しました。

結局、I/Oパフォーマンスは向上しません。他に何かすることはありますか?

3
Icu

Max_sectors_kbの適切な値を見つけることができます。デフォルトでは512または1024に設定されています。たとえば、128に設定して再度テストできます(dom0とdomU)。

echo 128 > /sys/block/[your blockdevice]/queue/max_sectors_kb 

この設定は永続的ではありません。エントリを/etc/rc.localに入れて、起動時に設定します。

結果を投稿してください。

1
Striker_84

ゲストからのストレージスループットについて具体的に言及しているようです。これは、パフォーマンスに関する多くの指標の1つにすぎません。 I/Oスループットは、bandwidthおよびlatencyの関数です。つまり、高いスループットを実現するには、レイテンシを最小限に抑え、帯域幅を最大化する必要があります(つまり、大量のデータを随時飛ばし、そのデータに対するリクエストを可能な限り高速に処理する必要があります)。

仮想化環境にいる場合、要求に対応するために必然的にレイテンシが追加されます。つまり、domUがdom0に表示されるスループットと一致するのは非常に困難です。うまくいけば、いつでもより多くのデータを送信できるようにすることで、この影響を最小限に抑えることができます(多くのVMがI/Oを実行するか、十分な大きさの要求を行うことによって)。

あなたのハードウェアとあなたが参照している速度(〜150 MB/s)を考えると、ddに正しいパラメーターが与えられていれば、ゲストから同様のスループットが見られない場合、私は非常に驚きます。

これを「dom0」と「domU」から実行します(以下のコマンドは500MBのデータをdelete.meに書き込みます:

dd if=/dev/zero of=delete.me bs=1M count=500 oflag=direct

oflag=directは、これらの書き込みがVM(dom0およびdomU)のバッファーキャッシュをバイパスすることを確認します。

また、次のドキュメントを参照して、XenServer 6.1.0が仮想化ストレージを実装する方法とそのパフォーマンスへの影響(vCPUの数のチューニングアドバイスとピン接続を含む)をよりよく理解してください。

http://support.citrix.com/article/CTX136861

1

追加してみることのできる1つのことは、VMのioスケジューラを期限に切り替えて、そこでioマージを実際に無効にすることです。これにより、一般的にioレイテンシが短縮され、XenのIOリング構造でより効果的に機能する可能性があります。

echo    1       >       /sys/block/$dev/queue/nomerges 

私の推論、そしてLinuxのブロックコードは実際にはスマートではないという経験ですが、そうだと思います。したがって、理想的には、すべてのIO要求を1つにマージしてからディスクドライバーに渡すようにします。Xenの場合、次のアクションは、それらを分割してリングバッファーに収まるようにすることです。次に、それらはdom0にあり、ディスクドライバーは、アライメントのために単一のVMに関する知識を取得する必要がないため、マージする必要があるものを見つけるためのはるかに優れた位置にあります。

それが役に立たない場合は、変更を元に戻しますが、他のすべてがすでに試されたときに私はそれを確認します。

たぶんあなたのサーバーはずっと前に捨てられたかもしれませんが、私はこれがまだ誰かを助けるでしょう。

1
Florian Heigl