9.6. IBM Z 호스트 권장 사항의 RHEL KVM
KVM 가상 서버 환경을 최적화하는 것은 가상 서버의 작업 부하와 사용 가능한 리소스에 따라 크게 달라집니다. 어떤 환경에서는 성과를 향상시키는 효과가 있는 행동이 다른 환경에서는 부정적인 영향을 미칠 수 있습니다. 특정한 환경에 가장 적합한 균형을 찾는 것은 어려울 수 있으며, 종종 실험이 필요합니다.
다음 섹션에서는 IBM Z® 및 IBM® LinuxONE 환경에서 RHEL KVM과 함께 OpenShift Container Platform을 사용할 때의 몇 가지 모범 사례를 소개합니다.
9.6.1. 가상 블록 장치에 I/O 스레드 사용 링크 복사링크가 클립보드에 복사되었습니다!
가상 블록 장치가 I/O 스레드를 사용하도록 하려면 가상 서버와 각 가상 블록 장치에 대해 하나 이상의 I/O 스레드를 구성하여 이러한 I/O 스레드 중 하나를 사용해야 합니다.
다음 예제에서는 연속 10진수 스레드 ID 1, 2, 3으로 세 개의 I/O 스레드를 구성하려면 <iothreads>3</iothreads>
를 지정합니다. iothread="2"
매개변수는 ID 2의 I/O 스레드를 사용하기 위해 디스크 장치의 드라이버 요소를 지정합니다.
샘플 I/O 스레드 사양
스레드는 디스크 장치의 I/O 작업 성능을 높일 수 있지만 메모리와 CPU 리소스도 사용합니다. 여러 장치가 동일한 스레드를 사용하도록 구성할 수 있습니다. 스레드와 장치를 가장 잘 매핑하는 방법은 사용 가능한 리소스와 작업 부하에 따라 달라집니다.
적은 수의 I/O 스레드로 시작하세요. 대개 모든 디스크 장치에 대해 단일 I/O 스레드가 충분합니다. 가상 CPU 수보다 많은 스레드를 구성하지 말고, 유휴 스레드도 구성하지 마세요.
virsh iothreadadd
명령을 사용하면 실행 중인 가상 서버에 특정 스레드 ID를 가진 I/O 스레드를 추가할 수 있습니다.
9.6.2. 가상 SCSI 장치 방지 링크 복사링크가 클립보드에 복사되었습니다!
SCSI 특정 인터페이스를 통해 장치를 처리해야 하는 경우에만 가상 SCSI 장치를 구성하세요. 호스트의 백업에 관계없이 디스크 공간을 가상 SCSI 장치가 아닌 가상 블록 장치로 구성합니다.
하지만 다음과 같은 경우 SCSI 전용 인터페이스가 필요할 수 있습니다.
- 호스트의 SCSI 연결 테이프 드라이브에 대한 LUN입니다.
- 가상 DVD 드라이브에 마운트된 호스트 파일 시스템의 DVD ISO 파일입니다.
9.6.3. 디스크에 대한 게스트 캐싱 구성 링크 복사링크가 클립보드에 복사되었습니다!
호스트가 아닌 게스트가 캐싱하도록 디스크 장치를 구성합니다.
디스크 장치의 드라이버 요소에 cache="none"
및 io="native"
매개변수가 포함되어 있는지 확인하세요.
<disk type="block" device="disk"> <driver name="qemu" type="raw" cache="none" io="native" iothread="1"/> ... </disk>
<disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" io="native" iothread="1"/>
...
</disk>
9.6.4. 메모리 풍선 장치 제외 링크 복사링크가 클립보드에 복사되었습니다!
동적 메모리 크기가 필요하지 않다면 메모리 풍선 장치를 정의하지 말고 libvirt가 메모리 풍선 장치를 자동으로 생성하지 않도록 하세요. 도메인 구성 XML 파일에 있는 devices 요소의 자식으로 memballoon
매개변수를 포함합니다.
활성 프로필 목록을 확인하세요.
<memballoon model="none"/>
<memballoon model="none"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6.5. 호스트 스케줄러의 CPU 마이그레이션 알고리즘을 조정합니다. 링크 복사링크가 클립보드에 복사되었습니다!
영향을 이해하는 전문가가 아니면 스케줄러 설정을 변경하지 마세요. 테스트를 거쳐 의도한 효과가 나타나는지 확인하지 않고 프로덕션 시스템에 변경 사항을 적용하지 마세요.
kernel.sched_migration_cost_ns
매개변수는 나노초 단위의 시간 간격을 지정합니다. 작업을 마지막으로 실행한 후 이 간격이 만료될 때까지 CPU 캐시가 유용한 콘텐츠로 간주됩니다. 이 간격을 늘리면 작업 마이그레이션이 줄어듭니다. 기본값은 500000ns입니다.
실행 가능한 프로세스가 있을 때 CPU 유휴 시간이 예상보다 길다면 이 간격을 줄여보세요. 작업이 CPU나 노드 간에 너무 자주 전환되는 경우, 이 값을 늘려보세요.
간격을 60000ns로 동적으로 설정하려면 다음 명령을 입력하세요.
sysctl kernel.sched_migration_cost_ns=60000
# sysctl kernel.sched_migration_cost_ns=60000
값을 지속적으로 60000ns로 변경하려면 /etc/sysctl.conf
에 다음 항목을 추가합니다.
kernel.sched_migration_cost_ns=60000
kernel.sched_migration_cost_ns=60000
9.6.6. cpuset cgroup 컨트롤러 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 설정은 cgroups 버전 1이 있는 KVM 호스트에만 적용됩니다. 호스트에서 CPU 핫플러그를 활성화하려면 cgroup 컨트롤러를 비활성화하세요.
프로세스
-
원하는 편집기로
/etc/libvirt/qemu.conf를
엽니다. -
cgroup_controllers
라인으로 이동합니다. - 줄 전체를 복제한 다음 복사본에서 앞에 있는 숫자 기호(#)를 제거합니다.
다음과 같이
cpuset
항목을 제거합니다.cgroup_controllers = [ "cpu", "devices", "memory", "blkio", "cpuacct" ]
cgroup_controllers = [ "cpu", "devices", "memory", "blkio", "cpuacct" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새로운 설정을 적용하려면 libvirtd 데몬을 다시 시작해야 합니다.
- 모든 가상 머신을 중지합니다.
다음 명령을 실행합니다.
systemctl restart libvirtd
# systemctl restart libvirtd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 가상 머신을 다시 시작합니다.
이 설정은 호스트를 재부팅해도 유지됩니다.
9.6.7. 유휴 가상 CPU에 대한 폴링 기간 조정 링크 복사링크가 클립보드에 복사되었습니다!
가상 CPU가 유휴 상태가 되면 KVM은 호스트 리소스를 할당하기 전에 가상 CPU에 대한 웨이크업 조건을 폴링합니다. /sys/module/kvm/parameters/halt_poll_ns
에서 sysfs에서 폴링이 발생하는 시간 간격을 지정할 수 있습니다. 지정된 시간 동안 폴링은 리소스 사용을 희생하여 가상 CPU의 웨이크업 지연 시간을 줄입니다. 작업량에 따라, 여론조사 시간을 늘리거나 줄이는 것이 유익할 수 있습니다. 시간 간격은 나노초 단위로 지정됩니다. 기본값은 50000ns입니다.
낮은 CPU 소모를 최적화하려면 작은 값을 입력하거나 0을 입력하여 폴링을 비활성화합니다.
echo 0 > /sys/module/kvm/parameters/halt_poll_ns
# echo 0 > /sys/module/kvm/parameters/halt_poll_ns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 트랜잭션 워크로드의 경우 낮은 대기 시간을 최적화하려면 큰 값을 입력하세요.
echo 80000 > /sys/module/kvm/parameters/halt_poll_ns
# echo 80000 > /sys/module/kvm/parameters/halt_poll_ns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow