반응형
작성일: 2026년 3월 5일

 

KVM 가상화 환경에서 VM을 생성하면, VM 내부의 NIC Queue 개수는 기본적으로 1개로 설정된다.

높은 Network bandwidth가 필요한 경우라면, NIC Queue를 늘려서 Network bandwidth를 늘려야 한다.

부수적으로 CPU core의 부하를 분산시키는 효과도 얻을 수 있다.

 

방법 A: VM 생성할 때 NIC Queue 개수를 지정하는 방법

virt-install \
  --name myvm \
  --memory 2048 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \
  --network network=default,model=virtio,driver.name=vhost,driver.queues=8 \
  --cdrom /path/to/installer.iso

 

driver.queues=8 파라미터를 추가하여 virt-install 명령을 수행한다.

그리고 NIC multi queue를 사용하려면, model=virtio도 추가해야 한다.

 

VM(즉, Guest OS) 내부에서도 NIC Queue 설정 작업을 해야 한다.

# 현재 채널 확인
ethtool -l eth0

# combined 채널 8개로 설정
ethtool -L eth0 combined 8

 

그리고 위와 같이 NIC queue 개수가 늘어났으면, ksoftirqd 데몬 프로세스의 CPU 사용률을 확인해야 한다.

실제로 NIC multi queue에 저장된 network packet을 여러 CPU core가 고르게 처리하는지 확인한다.

 

#!/bin/bash

# ksoftirqd PID만 추출하여 top으로 모니터링
pids=$(pgrep ksoftirqd)
if [ -z "$pids" ]; then
    echo "ksoftirqd 프로세스를 찾을 수 없습니다."
    exit 1
fi

# 여러 CPU용 ksoftirqd가 있으면 쉼표로 이어서 top -p에 전달
pid_list=$(echo "$pids" | tr '\n' ',' | sed 's/,$//')
exec top -p "$pid_list"

 

방법 B: 이미 운영 중인 VM instance에 대한 NIC Queue 개수를 지정하는 방법

아래와 같이 `virsh edit` 명령으로 VM instance의 NIC queue 개수를 지정할 수 있다.

$ virsh edit myvm


<interface type='network'>
  <source network='default'/>         ## 실제로 사용하는 network 이름을 찾아야 함.
  <model type='virtio'/>              ## 이 라인을 추가.
  <driver name='vhost' queues='8'/>   ## 이 라인을 추가. queue 개수는 내가 원하는 만큼.
  <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</address>
</interface>

 

그리고 한번 VM instance를 재시작해야 위 설정값이 VM instance에 적용된다.

$ virsh shutdown myvm

$ virsh start    myvm

 

VM(즉, Guest OS) 내부에서도 NIC Queue 설정 작업을 해야 한다.

# 현재 채널 확인
ethtool -l eth0

# combined 채널 8개로 설정
ethtool -L eth0 combined 8

 

 

 

 

 

 

+ Recent posts