Linux 서버에서 초당 수십만~수백만 개의 패킷을 처리하는 환경에서는 인터럽트(Interrupt)가 과도하게 발생하여 CPU 성능이 급격히 저하될 수 있습니다. 이러한 현상을 Interrupt Storm이라고 하며, 고성능 네트워크 환경에서 자주 발생하는 문제입니다.
이를 해결하기 위해 Linux 커널은 NAPI(New API) 라는 네트워크 처리 방식을 제공합니다. NAPI는 인터럽트 기반 처리와 Polling 방식을 결합하여 CPU 부하를 줄이고 네트워크 처리량을 향상시키는 핵심 기술입니다.
현재 대부분의 Linux 네트워크 드라이버는 기본적으로 NAPI를 사용하고 있으며, 10GbE 이상의 고속 네트워크에서는 사실상 필수 기능으로 여겨집니다.
이번 글에서는 NAPI의 개념부터 동작 원리, 확인 방법, 성능 최적화 방법까지 실무 중심으로 알아보겠습니다.
NAPI(New API)란?
NAPI(New API)는 Linux 커널의 네트워크 드라이버 프레임워크로, 인터럽트와 Polling 방식을 조합하여 패킷을 효율적으로 처리하는 기술입니다.
패킷 처리 과정은 다음과 같습니다.
패킷 도착
│
▼
인터럽트 발생
│
▼
NAPI 활성화
│
▼
Polling 방식으로 여러 패킷 처리
│
▼
패킷 감소 시 인터럽트 방식 복귀
트래픽이 적을 때는 인터럽트 방식을 사용하고, 트래픽이 많아지면 Polling 방식으로 전환하여 CPU의 인터럽트 부담을 줄입니다.
NAPI를 사용하는 이유
다음과 같은 환경에서 NAPI의 효과가 큽니다.
- 10GbE 이상 네트워크
- Kubernetes Cluster
- Docker Host
- API 서버
- Nginx
- HAProxy
- Redis
- CDN 서버
- 게임 서버
- 대규모 TCP 서버
실무에서는 Interrupt Storm을 줄이는 가장 중요한 기술 중 하나입니다.
1. NAPI 지원 여부 확인하기
사용 중인 NIC 드라이버를 확인합니다.
ethtool -i eth0
예시
driver: ixgbe
version: 6.8.0
Intel ixgbe, i40e, mlx5, bnxt 등 대부분의 최신 드라이버는 NAPI를 지원합니다.
2. NIC 정보 확인하기
네트워크 장치 정보를 확인합니다.
lspci | grep Ethernet
또는
lshw -class network
NIC 모델에 따라 NAPI 구현 방식이 조금씩 다를 수 있습니다.
3. 인터럽트 확인하기
현재 인터럽트 상태를 확인합니다.
cat /proc/interrupts
실시간 확인
watch -n 1 cat /proc/interrupts
NAPI가 정상적으로 동작하면 인터럽트 수가 과도하게 증가하지 않는 것이 일반적입니다.
4. SoftIRQ 확인하기
NAPI는 SoftIRQ와 함께 동작합니다.
cat /proc/softirqs
특히 다음 항목을 확인합니다.
- NET_RX
- NET_TX
패킷이 증가하면 SoftIRQ도 함께 증가하는 것이 정상입니다.
5. CPU 사용률 확인하기
mpstat -P ALL 1
또는
top
CPU 사용률이 특정 코어에 집중되지 않는지 확인합니다.
6. Queue 정보 확인하기
RX/TX Queue를 확인합니다.
ethtool -l eth0
Queue가 여러 개인 경우 RSS와 함께 NAPI가 동작합니다.
7. 네트워크 처리량 확인하기
sar -n DEV 1
또는
iperf3 -c 서버IP
설정 전후 처리량과 CPU 사용률을 비교합니다.
8. irqbalance 확인하기
systemctl status irqbalance
실행되어 있지 않다면
systemctl enable --now irqbalance
NAPI와 irqbalance를 함께 사용하면 CPU 부하를 더욱 효과적으로 분산할 수 있습니다.
9. 커널 로그 확인하기
드라이버 관련 오류를 확인합니다.
dmesg | grep -Ei "eth|nic|net|irq"
또는
journalctl -k | grep -Ei "eth|irq"
네트워크 드라이버 오류가 있는지 확인합니다.
10. RSS, RPS, RFS, XPS 함께 확인하기
NAPI는 다음 기술과 함께 사용하는 것이 일반적입니다.
- RSS
- RPS
- RFS
- XPS
- irqbalance
이 기능들이 함께 구성되어야 멀티코어 환경에서 최적의 성능을 얻을 수 있습니다.
NAPI 설정 확인 순서
실무에서는 다음 순서대로 확인하는 것이 좋습니다.
- NIC 드라이버 확인
- NIC 모델 확인
- 인터럽트 확인
- SoftIRQ 확인
- CPU 사용률 확인
- Queue 확인
- 네트워크 처리량 확인
- irqbalance 확인
- 커널 로그 확인
- RSS/RPS/RFS/XPS 설정 확인
NAPI 사용 시 주의사항
다음 사항을 함께 고려해야 합니다.
- 최신 NIC 드라이버 사용
- 최신 커널 유지
- RSS 활성화
- irqbalance 사용
- NUMA 구조 고려
- Queue 개수 최적화
- SoftIRQ 지속 모니터링
대부분의 최신 Linux에서는 NAPI가 기본 활성화되어 있으므로 별도로 켜는 작업보다는 주변 설정을 최적화하는 것이 중요합니다.
자주 묻는 질문
NAPI는 직접 활성화해야 하나요?
아닙니다. 대부분의 최신 Linux 네트워크 드라이버에서는 기본적으로 활성화되어 있습니다.
NAPI와 RSS는 같은 기능인가요?
아닙니다. RSS는 NIC 하드웨어에서 패킷을 여러 Queue로 분산하는 기능이고, NAPI는 인터럽트와 Polling을 조합하여 효율적으로 패킷을 처리하는 커널 기술입니다.
NAPI만 사용하면 성능 문제가 모두 해결되나요?
아닙니다. RSS, RPS, RFS, XPS, irqbalance 등과 함께 구성해야 멀티코어 환경에서 최적의 네트워크 성능을 얻을 수 있습니다.
마무리
NAPI(New API)는 Linux 네트워크 드라이버에서 인터럽트 방식과 Polling 방식을 결합하여 높은 네트워크 처리량과 낮은 CPU 부하를 동시에 제공하는 핵심 기술입니다. ethtool, mpstat, /proc/interrupts, /proc/softirqs, iperf3 등을 활용하면 동작 상태를 확인할 수 있으며, RSS·RPS·RFS·XPS와 함께 최적화하면 대규모 트래픽 환경에서도 안정적인 성능을 유지할 수 있습니다.