17.5. 가상 머신 I/O 성능 최적화


VM(가상 머신)의 입력 및 출력(I/O) 기능은 VM의 전체 효율성을 크게 제한할 수 있습니다. 이를 해결하기 위해 블록 I/O 매개변수를 구성하여 VM의 I/O를 최적화할 수 있습니다.

17.5.1. 가상 머신에서 블록 I/O 튜닝

하나 이상의 VM에서 여러 블록 장치를 사용하는 경우 I/O weights 를 수정하여 특정 가상 장치의 I/O 우선 순위를 조정하는 것이 중요할 수 있습니다.

장치의 I/O 가중치를 늘리면 I/O 대역폭의 우선 순위가 증가하므로 더 많은 호스트 리소스를 제공합니다. 마찬가지로, 장치의 가중치를 줄이면 호스트 리소스가 적게 소비됩니다.

참고

각 장치의 가중치 값은 100 ~1000 범위 내에 있어야 합니다. 또는 값은 장치별 목록에서 해당 장치를 제거하는 0 일 수 있습니다.

프로세스

VM의 블록 I/O 매개변수를 표시하고 설정하려면 다음을 수행합니다.

  1. VM의 현재 & lt;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>
    Copy to Clipboard Toggle word wrap
  2. 지정된 장치의 I/O 가중치를 편집합니다.

    # virsh blkiotune VM-name --device-weights device, I/O-weight
    Copy to Clipboard Toggle word wrap

    예를 들어, 다음에서는 testguest1 VM의 /dev/sda 장치의 가중치를 500으로 변경합니다.

    # virsh blkiotune testguest1 --device-weights /dev/sda, 500
    Copy to Clipboard Toggle word wrap

검증

  • VM의 블록 I/O 매개변수가 올바르게 구성되었는지 확인합니다.

    # virsh blkiotune testguest1
    
    Block I/O tuning parameters for domain testguest1:
    
        weight                        : 800
        device_weight                  : [
                                          {"sda": 500},
                                         ]
    ...
    Copy to Clipboard Toggle word wrap
    중요

    특정 커널은 특정 장치의 I/O 가중치 설정을 지원하지 않습니다. 이전 단계에서 가중치가 예상대로 표시되지 않으면 이 기능이 호스트 커널과 호환되지 않을 수 있습니다.

17.5.2. 가상 머신의 디스크 I/O 제한

여러 VM이 동시에 실행되면 과도한 디스크 I/O를 사용하여 시스템 성능을 방해할 수 있습니다. KVM 가상화의 디스크 I/O 제한은 VM에서 호스트 머신으로 전송된 디스크 I/O 요청에 제한을 설정할 수 있는 기능을 제공합니다. 이렇게 하면 VM에서 공유 리소스를 과도하게 활용하고 다른 VM의 성능에 영향을 미치는 것을 방지할 수 있습니다.

디스크 I/O 제한을 활성화하려면 VM에 연결된 각 블록 장치에서 호스트 시스템에 연결된 디스크 I/O 요청에 대한 제한을 설정합니다.

프로세스

  1. virsh domblklist 명령을 사용하여 지정된 VM에 있는 모든 디스크 장치의 이름을 나열합니다.

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
    Copy to Clipboard Toggle word wrap
  2. throttle이 마운트되는 가상 디스크가 마운트된 호스트 블록 장치를 찾습니다.

    예를 들어 이전 단계의 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
    Copy to Clipboard Toggle word wrap
  3. virsh blkiotune 명령을 사용하여 블록 장치의 I/O 제한을 설정합니다.

    # virsh blkiotune VM-name --parameter device,limit
    Copy to Clipboard Toggle word wrap

    다음 예제에서는 rollin-coal VM의 sdb 디스크를 초당 I/O 작업과 초당 50MB의 읽기 및 쓰기 처리량으로 1000으로 제한합니다.

    # 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
    Copy to Clipboard Toggle word wrap

추가 리소스

  • 디스크 I/O 제한은 다양한 상황에서 유용할 수 있습니다(예: 서로 다른 고객에 속하는 VM이 동일한 호스트에서 실행 중이거나 다른 VM에 대한 서비스 품질 보장이 제공되는 경우). 디스크 I/O 제한은 느린 디스크를 시뮬레이션하는 데에도 사용할 수 있습니다.
  • I/O 제한은 VM에 연결된 각 블록 장치에 독립적으로 적용할 수 있으며 처리량 및 I/O 작업에 대한 제한을 지원합니다.
  • Red Hat은 virsh blkdeviotune 명령을 사용하여 VM에서 I/O 제한을 구성하는 것을 지원하지 않습니다. RHEL 8을 VM 호스트로 사용할 때 지원되지 않는 기능에 대한 자세한 내용은 RHEL 8 가상화에서 지원되지 않는 기능을 참조하십시오.

17.5.3. 스토리지 장치에서 다중 대기열 활성화

VM(가상 시스템)에서 virtio-blk 또는 virtio-scsi 스토리지 장치를 사용하는 경우 멀티 큐 기능을 통해 스토리지 성능과 확장성을 개선할 수 있습니다. 이를 통해 각 가상 CPU(vCPU)에 다른 vCPU에 영향을 주지 않고 사용할 별도의 대기열과 인터럽트가 있을 수 있습니다.

멀티 큐 기능은 Q35 시스템 유형에 대해 기본적으로 활성화되어 있지만 i440FX 시스템 유형에서 수동으로 활성화해야 합니다. 워크로드에 최적의 대기열 수를 조정할 수 있지만 최적의 수는 각 워크로드 유형에 따라 다르며 경우에 가장 적합한 대기열 수를 테스트해야 합니다.

절차

  1. 스토리지 장치에서 다중 큐 를 활성화하려면 VM의 XML 구성을 편집합니다.

    # virsh edit <example_vm>
    Copy to Clipboard Toggle word wrap
  2. XML 구성에서 의도한 스토리지 장치를 찾고 여러 I/O 대기열을 사용하도록 queues 매개변수를 변경합니다. N 을 VM의 vCPU 수(최대 16개)로 바꿉니다.

    • virtio-blk 예제:

      <disk type='block' device='disk'>
        <driver name='qemu' type='raw' queues='N'/>
        <source dev='/dev/sda'/>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
      </disk>
      Copy to Clipboard Toggle word wrap
    • virtio-scsi 예:

      <controller type='scsi' index='0' model='virtio-scsi'>
         <driver queues='N' />
      </controller>
      Copy to Clipboard Toggle word wrap
  3. 변경 사항을 적용하려면 VM을 다시 시작합니다.

17.5.4. 전용 IOThreads 구성

VM(가상 머신)에서 디스크의 입력/출력(IO) 성능을 개선하기 위해 VM 디스크의 IO 작업을 관리하는 데 사용되는 전용 IOThread 를 구성할 수 있습니다.

일반적으로 디스크의 IO 작업은 기본 QEMU 스레드의 일부이므로 집중 IO 워크로드 중 VM의 응답성을 줄일 수 있습니다. IO 작업을 전용 IOThread 로 분리하면 VM의 응답성 및 성능을 크게 높일 수 있습니다.

절차

  1. 실행 중인 경우 선택한 VM을 종료합니다.
  2. 호스트에서 VM의 XML 구성에서 &lt ;iothreads > 태그를 추가하거나 편집합니다. 예를 들어 testguest1 VM에 대한 단일 IOThread 를 생성하려면 다음을 수행합니다.

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <vcpu placement='static'>8</vcpu>
      <iothreads>1</iothreads>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap
    참고

    최적의 결과를 얻으려면 호스트에서 CPU당 1-2개의 IOThreads 만 사용합니다.

  3. VM 디스크에 전용 IOThread' 를 할당합니다. 예를 들어 ID가 1인 IOThreadtestguest 1 VM의 디스크에 할당하려면 다음을 수행합니다.

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/>
          <source file='/var/lib/libvirt/images/test-disk.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
        </disk>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap
    참고

    IOThread ID는 1에서 시작하며 단일 IOThread 만 디스크에만 사용해야 합니다.

    일반적으로 최적의 성능을 위해 VM당 하나의 전용 IOThread 로 충분합니다.

  4. virtio-scsi 스토리지 장치를 사용하는 경우 전용 IOThread를 virtio-scsi 컨트롤러에 할당합니다. 예를 들어 ID가 1인 IOThreadtestguest 1 VM의 컨트롤러에 할당하려면 다음을 수행합니다.

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <controller type='scsi' index='0' model='virtio-scsi'>
          <driver iothread='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
        </controller>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

검증

17.5.5. 가상 디스크 캐싱 구성

KVM은 여러 가상 디스크 캐싱 모드를 제공합니다. IIO(Intent Input/Output) 워크로드의 경우 최적의 캐싱 모드를 선택하면 VM(가상 머신) 성능이 크게 증가할 수 있습니다.

+

가상 디스크 캐시 모드 개요

writethrough
호스트 페이지 캐시는 읽기에만 사용됩니다. 쓰기는 데이터가 스토리지 장치에 커밋된 경우에만 완료된 것으로 보고됩니다. 유지 관리되는 IO 성능은 줄어들지만 이 모드에서는 쓰기가 좋습니다.
writeback
호스트 페이지 캐시는 읽기 및 쓰기 모두에 사용됩니다. 데이터가 물리적 스토리지가 아닌 호스트의 메모리 캐시에 도달하면 쓰기가 완료된 것으로 보고됩니다. 이 모드는 writethrough 보다 IO 성능이 빠르지만 호스트 실패 시 데이터가 손실될 수 있습니다.
none
호스트 페이지 캐시는 완전히 무시됩니다. 이 모드는 물리적 디스크의 쓰기 대기열에 직접 의존하므로 예측 가능한 IO 성능을 갖추고 안정적인 게스트에서 쓰기 보장을 제공합니다. VM 실시간 마이그레이션의 안전한 캐시 모드이기도 합니다.

절차

  1. 실행 중인 경우 선택한 VM을 종료합니다.
  2. 선택한 VM의 XML 구성을 편집합니다.

    # virsh edit <vm_name>
    Copy to Clipboard Toggle word wrap
  3. 디스크 장치를 찾아 드라이버 태그에서 캐시 옵션을 편집합니다.

    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/>
          <source file='/var/lib/libvirt/images/test-disk.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
        </disk>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat