Linux SoftIRQ란 무엇이며 CPU 사용률이 높은 원인과 해결 방법

Linux 서버를 운영하다 보면 CPU 사용률이 높은데 top에서는 특별히 CPU를 많이 사용하는 프로세스가 보이지 않는 경우가 있습니다. mpstat 명령을 실행해 보면 %soft 값이 비정상적으로 높게 나타나는 경우가 있는데, 이는 SoftIRQ(Software Interrupt) 처리량이 증가했기 때문일 가능성이 높습니다.

SoftIRQ는 하드웨어 인터럽트 처리를 빠르게 완료하기 위해 Linux 커널이 사용하는 중요한 메커니즘입니다. 하지만 SoftIRQ 사용량이 과도하게 증가하면 CPU 성능 저하, 네트워크 지연, 디스크 I/O 병목 등 다양한 문제가 발생할 수 있습니다.

이번 글에서는 SoftIRQ의 개념과 CPU 사용률이 높아지는 원인, 그리고 실무에서 사용하는 진단 및 해결 방법을 자세히 알아보겠습니다.

SoftIRQ란 무엇인가?

SoftIRQ는 Hardware Interrupt(IRQ) 이후 시간이 오래 걸리는 작업을 커널이 나중에 처리하도록 분리한 메커니즘입니다.

처리 과정은 다음과 같습니다.

하드웨어 인터럽트 발생
        ↓
CPU가 최소한의 작업 수행
        ↓
SoftIRQ 등록
        ↓
커널이 SoftIRQ 처리

이 방식을 사용하면 인터럽트 처리 시간을 줄여 전체 시스템 응답성을 높일 수 있습니다.

대표적으로 다음 작업들이 SoftIRQ를 사용합니다.

  • 네트워크 패킷 처리
  • 디스크 I/O 완료 처리
  • 타이머 처리
  • RCU(Read-Copy Update)
  • Tasklet 처리

SoftIRQ CPU 사용률이 높아지는 대표적인 원인

다음과 같은 상황에서 SoftIRQ 사용량이 증가합니다.

  • 네트워크 트래픽 급증
  • Interrupt Storm 발생
  • 대량의 디스크 I/O
  • NIC 드라이버 문제
  • IRQ 분산 실패
  • DDoS 공격
  • Packet Flood
  • 가상화 환경
  • 오래된 커널
  • 잘못된 NIC 설정

실무에서는 NET_RX SoftIRQ 증가가 가장 흔한 원인입니다.

1. CPU SoftIRQ 사용률 확인하기

먼저 CPU 상태를 확인합니다.

mpstat -P ALL 1

다음 항목을 확인합니다.

  • %soft
  • %irq
  • %sys

%soft 값이 지속적으로 높다면 SoftIRQ 사용량이 증가한 것입니다.

2. SoftIRQ 통계 확인하기

cat /proc/softirqs

예시

NET_RX
NET_TX
BLOCK
TIMER
RCU

특정 항목이 매우 빠르게 증가하는지 확인합니다.

3. CPU 사용률 확인하기

top

또는

htop

CPU 사용률은 높지만 프로세스 사용률이 낮다면 SoftIRQ를 의심할 수 있습니다.

4. 인터럽트 확인하기

cat /proc/interrupts

또는

watch -n 1 cat /proc/interrupts

인터럽트가 과도하게 증가하는 장치를 찾습니다.

5. 네트워크 상태 확인하기

ip -s link

또는

ethtool -S eth0

다음 항목을 확인합니다.

  • RX Errors
  • TX Errors
  • Dropped
  • Overrun

패킷 오류가 많다면 SoftIRQ 증가의 원인이 될 수 있습니다.

6. irqbalance 확인하기

서비스 상태 확인

systemctl status irqbalance

비활성화되어 있다면

systemctl start irqbalance

인터럽트를 여러 CPU에 분산하면 SoftIRQ 부하도 줄어들 수 있습니다.

7. 커널 로그 확인하기

dmesg | grep -Ei "irq|softirq|network"

또는

journalctl -k | grep -Ei "irq|softirq"

드라이버 오류나 인터럽트 관련 메시지가 있는지 확인합니다.

8. 네트워크 트래픽 확인하기

sar -n DEV 1

또는

iftop

트래픽이 갑자기 증가했는지 확인합니다.

9. CPU 코어별 사용률 확인하기

mpstat -P ALL 1

특정 CPU 코어에 SoftIRQ가 집중되어 있는지 확인합니다.

필요하다면 IRQ Affinity도 함께 점검합니다.

10. 드라이버 및 커널 업데이트 확인하기

다음 항목을 확인합니다.

  • NIC Driver
  • Kernel Version
  • Firmware
  • BIOS

드라이버 버그는 SoftIRQ 증가의 대표적인 원인 중 하나입니다.

SoftIRQ 문제를 확인하는 순서

실무에서는 다음 순서대로 점검하는 것이 효율적입니다.

  1. mpstat 확인
  2. /proc/softirqs 확인
  3. CPU 사용률 확인
  4. /proc/interrupts 확인
  5. 네트워크 상태 확인
  6. irqbalance 확인
  7. 커널 로그 확인
  8. 트래픽 확인
  9. CPU 코어별 사용률 확인
  10. 드라이버 및 커널 점검

이 순서대로 진행하면 대부분의 원인을 빠르게 찾을 수 있습니다.

SoftIRQ 사용률을 줄이는 방법

SoftIRQ 부하를 줄이기 위해 다음과 같은 방법을 사용할 수 있습니다.

  • irqbalance 활성화
  • 최신 NIC 드라이버 사용
  • RPS/RFS 설정
  • XPS 설정
  • RSS 활성화
  • 커널 업데이트
  • 불필요한 트래픽 차단
  • NIC Offloading 설정 최적화

특히 고성능 네트워크 서버에서는 RSS와 RPS를 함께 설정하면 CPU 부하를 효과적으로 분산할 수 있습니다.

자주 묻는 질문

SoftIRQ는 정상적인 기능인가요?

네. SoftIRQ는 Linux 커널의 핵심 기능이며 정상적으로 항상 동작합니다. 다만 사용량이 과도하게 높아지는 경우 원인을 분석해야 합니다.

%soft 값은 어느 정도가 정상인가요?

일반적인 서버에서는 매우 낮은 수준을 유지하는 경우가 많습니다. 지속적으로 높은 값을 보인다면 네트워크나 인터럽트 문제를 의심해야 합니다.

SoftIRQ가 높으면 CPU 성능이 떨어지나요?

네. SoftIRQ 처리에 CPU 시간이 많이 사용되면 애플리케이션이 사용할 CPU 자원이 줄어들어 전체 시스템 성능이 저하될 수 있습니다.

마무리

SoftIRQ는 Linux 커널이 인터럽트를 효율적으로 처리하기 위해 사용하는 중요한 메커니즘입니다. 하지만 %soft 사용률이 지속적으로 높다면 네트워크 트래픽 증가, Interrupt Storm, 드라이버 문제, IRQ 분산 실패 등의 원인을 점검해야 합니다. mpstat, /proc/softirqs, /proc/interrupts, ethtool 등을 함께 활용하면 SoftIRQ 증가 원인을 빠르게 분석하고 안정적인 서버 성능을 유지할 수 있습니다.

댓글 남기기