Red Hat Training

A Red Hat training course is available for RHEL 8

16.4. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

16.4.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの ウェイト の値は 100 から 1000 の範囲内でなければなりません。もしくは、値を 0 にすると、各デバイスのリストからそのデバイスを削除できます。

手順

仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。

  1. 仮想マシンの現在の <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>
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。

    # virsh blkiotune liftbrul --device-weights /dev/sda, 500

16.4.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前をリスト表示します。

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. スロットルする仮想ディスクがマウントされているホストブロックデバイスを見つけます。

    たとえば、前の手順の 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
  3. 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 8 を仮想マシンホストとして使用する場合にサポートされていない機能の詳細は、RHEL 8 仮想化でサポートされていない機能 を参照してください。

16.4.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>