KVM/QEMU 환경 튜닝과 관련해서 Intel 사의 문서가 하나 보여서 정리해 봤습니다.
Xeon Scalable 3세대 기준으로 작성된 문서이고, 이후 업데이트 버전은 아직 발견하지 못했습니다. 혹시 아시는 분 계시면 정보 공유 부탁드립니다. ^^
BIOS 설정 권장 항목
- Advanced/Processor Configuration/Intel(R) Virtualization Technology : Enabled
- Advanced/PCI Configuration/Integrated IO Configuration/Intel® VT for Directed I/O : Enabled
- Advanced/Processor Configuration/Intel(R) Hyper-Threading Tech : Enabled
- Advanced/Memory Configuration/Memory RAS and Performance Configuration/NUMA optimized : Enabled
- Advanced/Power & Performance/CPU Power and Performance Policy : Performance
- Advanced/Power & Performance/CPU P State Control/CPU P State Control/Enhanced Intel SpeedStep® Tech : Enabled
- Advanced/Power & Performance/CPU P State Control/CPU P State Control/Intel® Turbo Boost Technology : Enabled
- Advanced/Power & Performance/CPU P State Control/CPU P State Control/Energy Efficient Turbo : Disabled
- Advanced/Power & Performance/Hardware P States : Native Mode
- Advanced/Power & Performance/CPU C State Control/C1E : Disabled
- Advanced/Power & Performance/CPU C State Control/Processor C6 : Disabled
Linux Kernel & KVM 튜닝
numactl -H
명령으로 현재 NUMA 구성 파악- 일반적으로 패스스루 장치가 없는 경우 워크로드 특성에 따라 Automatic NUMA Balancing, 패스스루가 있는 경우 Manual 고정 고려
- 같은 NUMA 노드에 IRQ 바인딩
- 성능 중심이라면 scaling_governor는 performance
- 메모리 액세스가 많은 경우 Huge Page 사용
- Transparent Huge Page는 일반적으로 KVM이 자동으로 활성화
- 워크로드 따라
idle=poll
고려 - 워크로드 따라 Pause Loop Exiting(PLE) 비활성화 고려
- Kernel Samepage Merging(KSM) 설정 고려. 일반적인 경우 ksmtuned 서비스로 대응 가능
nohz_full
명령 사용해서 NUMA 노드마다 하우스키핑 CPU 지정
QEMU 튜닝
- MWAIT/HTL/PAUSE VMExit를 비활성화해서 레이턴시를 향상시킬 수 있으나 반대급부가 있을 수 있음
- 호스트 메모리가 오버커밋되지 않은 경우에
--overcommit mem-lock=on
옵션을 이용해서 최악의 대기시간을 줄일 수 있음 - vhost-net 활성화
- vhost-net에서 Zero Copy Transmission 활성화
- vhost-net에서 Queue Polling 활성화
- vCPU가 충분한 경우 멀티큐 활성화
- Packed virtqueues 활성화
- Virtio-blk에 적절한 캐시 모드 사용
- Virtio-blk에 IO Mode 설정 : 일반적으로
aio=io_uring
이aio=native
보다 나은 성능을 보임 - Virtio-blk에서 multi-queue 활성화
- Virtio-blk에서 packed virtqueues 활성화
- Virtio-blk에서 IOthread 활성화
Kernel 튜닝
- Request Queue Affinity(“rq_affinity”) 활성화
- Guest Halt Polling 활성화