Linux 서버를 운영하다 보면 CPU 사용률이 특정 코어에만 집중되거나 네트워크 처리량이 예상보다 낮은 경우가 있습니다. 이런 문제는 인터럽트(IRQ)가 하나의 CPU 코어에 집중되어 발생하는 경우가 많습니다.
이를 해결하기 위해 Linux에서는 irqbalance라는 서비스를 제공합니다. irqbalance는 하드웨어 인터럽트를 여러 CPU 코어에 자동으로 분산하여 시스템 성능과 응답성을 향상시키는 역할을 합니다.
이번 글에서는 irqbalance의 개념부터 설치, 설정, 확인 방법, 최적화까지 실무에서 자주 사용하는 내용을 자세히 알아보겠습니다.
irqbalance란 무엇인가?
IRQ(Interrupt Request)는 네트워크 카드, 디스크, USB, RAID Controller 등 하드웨어 장치가 CPU에게 작업 처리를 요청하는 신호입니다.
기본적으로 인터럽트가 특정 CPU 코어에 집중되면 다음과 같은 문제가 발생할 수 있습니다.
- 특정 CPU만 사용률 증가
- CPU Load 불균형
- 네트워크 처리량 감소
- 응답 속도 저하
- Interrupt Storm 발생 가능성 증가
irqbalance는 이러한 인터럽트를 여러 CPU에 자동으로 분산하여 전체 CPU 자원을 효율적으로 사용할 수 있도록 도와줍니다.
irqbalance 동작 원리
irqbalance는 주기적으로 인터럽트 발생 현황을 분석한 뒤 CPU 코어별로 IRQ를 재배치합니다.
예를 들어 다음과 같은 환경이 있다고 가정합니다.
CPU0 : NIC 인터럽트 95%
CPU1 : 거의 없음
CPU2 : 거의 없음
CPU3 : 거의 없음
irqbalance 실행 후
CPU0 : 25%
CPU1 : 25%
CPU2 : 25%
CPU3 : 25%
이처럼 인터럽트를 여러 CPU에 분산하여 병목 현상을 줄여 줍니다.
1. irqbalance 설치 여부 확인하기
먼저 설치 여부를 확인합니다.
RPM 계열
rpm -q irqbalance
Debian 계열
dpkg -l | grep irqbalance
설치되어 있지 않다면 설치를 진행합니다.
RHEL, Rocky, AlmaLinux
dnf install irqbalance
Ubuntu, Debian
sudo apt install irqbalance
2. irqbalance 서비스 상태 확인하기
서비스가 실행 중인지 확인합니다.
systemctl status irqbalance
실행되어 있지 않다면
systemctl start irqbalance
부팅 시 자동 실행
systemctl enable irqbalance
3. 인터럽트 확인하기
현재 인터럽트 분포를 확인합니다.
cat /proc/interrupts
예시
CPU0 CPU1 CPU2 CPU3
24: 1200000 300000 310000 320000 IR-PCI-MSI eth0
각 CPU에 인터럽트가 고르게 분산되는지 확인합니다.
4. CPU 인터럽트 사용률 확인하기
mpstat -P ALL 1
다음 항목을 확인합니다.
- %irq
- %soft
특정 CPU만 높다면 irqbalance가 제대로 동작하지 않을 수 있습니다.
5. irqbalance 로그 확인하기
서비스 로그 확인
journalctl -u irqbalance
서비스 시작 여부
systemctl is-active irqbalance
로그에 오류가 없는지 확인합니다.
6. 인터럽트 실시간 모니터링
인터럽트 증가량을 확인합니다.
watch -n 1 cat /proc/interrupts
irqbalance 실행 전후의 인터럽트 분포를 비교하면 효과를 쉽게 확인할 수 있습니다.
7. CPU Affinity 확인하기
인터럽트가 어느 CPU에서 처리되는지 확인합니다.
예시
cat /proc/irq/24/smp_affinity_list
또는
cat /proc/irq/24/effective_affinity_list
CPU Affinity가 하나의 코어만 지정되어 있다면 수동 조정이 필요할 수 있습니다.
8. irqbalance 설정 파일 확인하기
환경에 따라 설정 파일 위치가 다를 수 있습니다.
대표적인 위치
/etc/sysconfig/irqbalance
또는
/etc/default/irqbalance
필요에 따라 특정 CPU를 제외하거나 인터럽트 정책을 조정할 수 있습니다.
9. NUMA 환경 확인하기
대규모 서버에서는 NUMA 구조도 중요합니다.
numactl --hardware
또는
lscpu
NUMA 환경에서는 CPU와 장치의 물리적 위치를 고려하여 인터럽트를 분산하는 것이 성능 향상에 도움이 됩니다.
10. 성능 비교하기
irqbalance 적용 전후의 CPU 사용률을 비교합니다.
sar -P ALL 1
또는
mpstat -P ALL 1
인터럽트가 여러 CPU에 균등하게 분산되면 CPU 병목 현상이 감소하는 것을 확인할 수 있습니다.
irqbalance 설정을 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 효율적입니다.
- irqbalance 설치 확인
- 서비스 실행 여부 확인
/proc/interrupts확인mpstat확인- 서비스 로그 확인
- 인터럽트 실시간 모니터링
- CPU Affinity 확인
- 설정 파일 확인
- NUMA 환경 확인
- 성능 비교
이 순서대로 진행하면 대부분의 설정 문제를 빠르게 확인할 수 있습니다.
irqbalance 사용 시 주의사항
다음과 같은 경우에는 자동 분산보다 수동 설정이 더 적합할 수 있습니다.
- 초고성능 데이터베이스 서버
- DPDK 기반 네트워크 환경
- 실시간 시스템(RT Kernel)
- 초저지연 금융 시스템
이러한 환경에서는 CPU Affinity를 직접 지정하는 경우가 많습니다.
자주 묻는 질문
irqbalance는 반드시 실행해야 하나요?
일반적인 서버에서는 실행하는 것이 권장됩니다. 다만 특정 CPU에 인터럽트를 고정해야 하는 특수 환경에서는 비활성화하는 경우도 있습니다.
irqbalance가 실행 중인데도 CPU 한 개만 사용됩니다.
장치 드라이버나 CPU Affinity 설정 때문에 인터럽트가 특정 코어에 고정되어 있을 수 있습니다. /proc/irq/*/smp_affinity_list를 함께 확인해 보세요.
irqbalance가 성능을 떨어뜨릴 수도 있나요?
일반적인 환경에서는 성능 향상에 도움이 되지만, 실시간 처리나 초저지연 시스템에서는 자동 분산보다 수동 설정이 더 적합한 경우가 있습니다.
마무리
irqbalance는 Linux 서버에서 인터럽트를 여러 CPU 코어에 자동으로 분산하여 시스템 성능과 안정성을 높여주는 중요한 서비스입니다. /proc/interrupts, mpstat, journalctl, smp_affinity_list 등을 활용하면 현재 인터럽트 분포를 쉽게 확인할 수 있으며, NUMA 구조와 CPU Affinity까지 함께 고려하면 더욱 효율적인 성능 최적화가 가능합니다.