콘텐츠로 이동

irqbalance - 인터럽트 분산 조정 치트시트

irqbalance - 인터럽트 분산 조정 치트시트

irqbalanceCPU 코어 전체에 하드웨어 인터럽트 (IRQ)를 분산하는 데몬입니다. 기본적으로 Linux는 바쁜 NIC 또는 저장소 컨트롤러의 대부분 인터럽트를 CPU 0으로 라우트하여 해당 코어를 병목으로 만드는 동안 다른 코어는 유휴 상태입니다. irqbalance는 인터럽트 부하를 모니터링하고 IRQ 친화도를 재조정하여 작업을 분산합니다. 반대로 손으로 고정된 CPU를 가진 지연 중심 워크로드의 경우 비활성화되는 경우가 많으므로 격리된 코어의 인터럽트를 이동할 수 없습니다.

설치

플랫폼명령
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
서비스sudo systemctl enable --now irqbalance
확인irqbalance --version

먼저 인터럽트 검사

명령표시
cat /proc/interrupts기기별 CPU별 인터럽트 개수
watch -n1 'cat /proc/interrupts'라이브 성장 (핫 코어 발견)
mpstat -I SUM -P ALL 1초당 CPU별 인터럽트
cat /proc/irq/<N>/smp_affinity하나의 IRQ에 대한 친화도 마스크
cat /proc/irq/<N>/smp_affinity_list동일하지만 CPU 목록으로
# 한 CPU가 모든 NIC 인터럽트를 흡수하고 있습니까?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

데몬 실행

명령설명
sudo systemctl status irqbalance실행 중인지 확인
sudo irqbalance --foreground포그라운드에서 실행 (디버깅)
sudo irqbalance --oneshot한 번 균형 조정 후 종료
sudo irqbalance --debug상세 결정

주요 옵션 / 환경

설정효과
IRQBALANCE_BANNED_CPUS=<mask>이 CPU에 IRQ를 할당하지 않음
--banirq=N특정 IRQ를 균형 조정에서 제외
--policyscript=PATHIRQ별 정책을 결정하는 스크립트
--interval=SECONDS재조정 간격
`—hintpolicy=exactsubset
--powerthresh=N전원 절감 통합 임계값

구성은 일반적으로 /etc/default/irqbalance 또는 /etc/sysconfig/irqbalance에 존재합니다.

# 격리된 코어 8-15에서 IRQ 유지 (CPU 8..15를 위한 마스크)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

수동 IRQ 친화도 (데몬을 비활성화할 때)

# IRQ 42를 CPU 2에 핀 (비트마스크 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# 또는 CPU 목록으로
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
접근사용
irqbalance 실행일반 서버, 가변 부하
irqbalance 비활성화 + 수동 핀낮은 지연, NUMA 핀된, RT 워크로드
금지된 CPU하이브리드: 균형 조정이지만 격리된 코어 보호

낮은 지연 패턴

# 일반적인 낮은 지연 설정: 밸런서 중지, NIC IRQ를 앱의 NUMA 노드 근처로 핀
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# 그런 다음 같은 NUMA 노드의 코어로 NIC의 IRQ에 대해 smp_affinity를 설정합니다.

numactl과 쌍을 이루어 애플리케이션의 메모리와 인터럽트 처리가 같은 NUMA 노드에 위치합니다. 노드 간 인터럽트 처리는 고전적인 숨겨진 지연 소스입니다.

변경 검증

확인명령
인터럽트 분산mpstat -I SUM -P ALL 1
Softirq 부하top → CPU별 %si
네트워크 처리량sar -n DEV 1
IRQ별 개수watch 'cat /proc/interrupts'

성공은 인터럽트 개수가 의도된 코어 전체에서 균등하게 성장하거나 선택한 정확한 코어에 집중된 것처럼 보입니다.

irqbalance vs 관련 조정

도구역할
irqbalanceCPU 전체에 IRQ 분산
numactl프로세스 CPU/메모리를 NUMA 노드에 바인드
cpupower빈도/유휴 상태 제어
tuned전체 시스템 프로필 (irqbalance 관리 가능)
RPS/RFS소프트웨어 측 패킷 스티어링

리소스