18.5. 仮想マシンの I/O パフォーマンスの最適化
仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。
18.5.1. 仮想マシンにおけるブロック I/O のチューニング
複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。
デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。
各デバイスの ウェイト
の値は 100
から 1000
の範囲内でなければなりません。もしくは、値を 0
にすると、各デバイスのリストからそのデバイスを削除できます。
手順
仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。
仮想マシンの現在の
<blkio>
パラメーターを表示します。# virsh dumpxml VM-name
<domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
指定したデバイスの I/O ウェイトを編集します。
# virsh blkiotune VM-name --device-weights device, I/O-weight
たとえば、次の例では、testguest1 仮想マシンの /dev/sda デバイスの重みを 500 に変更します。
# virsh blkiotune testguest1 --device-weights /dev/sda, 500
18.5.2. 仮想マシンのディスク I/O スロットリング
複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。
ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。
手順
virsh domblklist
コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前をリスト表示します。# virsh domblklist rollin-coal Target Source ------------------------------------------------ vda /var/lib/libvirt/images/rollin-coal.qcow2 sda - sdb /home/horridly-demanding-processes.iso
スロットルする仮想ディスクがマウントされているホストブロックデバイスを見つけます。
たとえば、前の手順の
sdb
仮想ディスクをスロットリングする場合は、以下の出力では、ディスクが/dev/nvme0n1p3
パーティションにマウントされていることを示しています。$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 252:0 0 4G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 236.9G 0 part └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0 0 236.9G 0 crypt /home
virsh blkiotune
コマンドを使用して、ブロックデバイスの I/O 制限を設定します。# virsh blkiotune VM-name --parameter device,limit
以下の例は、
rollin-coal
仮想マシン上のsdb
ディスクを毎秒 1000 の読み書き操作にスロットリングし、毎秒 50 MB の読み書きスループットにスロットリングします。# virsh blkiotune rollin-coal --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
関連情報
- ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。
- I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。
-
Red Hat は、
virsh blkdeviotune
コマンドを使用した仮想マシンでの I/O スロットリングの設定はサポートしていません。RHEL 9 を VM ホストとして使用する場合にサポートされていない機能の詳細は、RHEL 9 仮想化でサポートされていない機能 を参照してください。
18.5.3. マルチキュー virtio-scsi の有効化
仮想マシンで virtio-scsi
ストレージデバイスを使用する場合は、マルチキュー virtio-scsi 機能により、ストレージパフォーマンスおよびスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。
手順
特定の仮想マシンに対してマルチキュー virtio-scsi サポートを有効にするには、仮想マシンの XML 設定に以下を追加します。ここでの N は、vCPU キューの合計数です。
<controller type='scsi' index='0' model='virtio-scsi'> <driver queues='N' /> </controller>