Linux RSS(Receive Side Scaling)란 무엇이며 설정 및 성능 최적화 방법

Linux 서버에서 10GbE, 25GbE, 40GbE 이상의 고속 네트워크를 운영하다 보면 하나의 CPU 코어만 과부하가 발생하여 전체 네트워크 성능이 제한되는 경우가 있습니다. 네트워크 카드가 수신한 모든 패킷을 하나의 CPU에서 처리하면 멀티코어 서버의 성능을 제대로 활용할 수 없습니다.

이러한 문제를 해결하기 위해 대부분의 서버용 네트워크 카드에서는 RSS(Receive Side Scaling) 기능을 제공합니다. RSS는 하드웨어 수준에서 수신 패킷을 여러 RX Queue로 분산하여 여러 CPU 코어가 동시에 패킷을 처리할 수 있도록 해주는 기술입니다.

이번 글에서는 RSS의 개념부터 확인 방법, 설정 방법, 성능 최적화 방법까지 실무에서 자주 사용하는 내용을 자세히 알아보겠습니다.

RSS(Receive Side Scaling)란?

RSS는 Receive Side Scaling의 약자로, 네트워크 카드(NIC)가 들어오는 패킷을 여러 개의 RX Queue에 분산시키는 기능입니다.

Linux 커널이 분산하는 것이 아니라 NIC 하드웨어 자체가 분산한다는 것이 가장 큰 특징입니다.

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

Network Packet
      │
      ▼
NIC (RSS Hash)
      │
      ▼
RX Queue 0
RX Queue 1
RX Queue 2
RX Queue 3
      │
      ▼
CPU0 CPU1 CPU2 CPU3

RSS를 활성화하면 특정 CPU에 패킷이 집중되는 현상을 줄일 수 있습니다.

RSS를 사용하는 이유

RSS는 다음과 같은 환경에서 매우 효과적입니다.

  • 10Gbps 이상 네트워크
  • Nginx 웹 서버
  • Apache 서버
  • Kubernetes Node
  • Docker Host
  • HAProxy
  • API Gateway
  • Redis 서버
  • CDN 서버
  • 대규모 TCP 서버

실무에서는 멀티코어 CPU의 네트워크 처리 성능을 최대한 활용하기 위해 RSS를 기본적으로 활성화하는 경우가 많습니다.

1. RSS 지원 여부 확인하기

NIC가 RSS를 지원하는지 확인합니다.

ethtool -k eth0

또는

ethtool -i eth0

드라이버 정보와 지원 기능을 함께 확인합니다.

2. RX Queue 확인하기

현재 RX Queue 개수를 확인합니다.

ethtool -l eth0

예시

Combined: 8
RX: 8
TX: 8

RX Queue가 많을수록 더 많은 CPU가 패킷을 동시에 처리할 수 있습니다.

3. RSS Hash 확인하기

현재 RSS Hash 설정을 확인합니다.

ethtool -x eth0

예시

RSS indirection table

패킷이 어떤 Queue로 분산되는지 확인할 수 있습니다.

4. Queue 개수 변경하기

NIC가 지원하는 경우 Queue 개수를 변경할 수 있습니다.

ethtool -L eth0 combined 8

또는

ethtool -L eth0 combined 16

Queue 개수는 CPU 개수와 네트워크 카드의 지원 범위를 고려하여 설정해야 합니다.

5. 인터럽트 확인하기

RSS 적용 후 인터럽트 분산 상태를 확인합니다.

cat /proc/interrupts

실시간 확인

watch -n 1 cat /proc/interrupts

여러 CPU에 인터럽트가 고르게 분산되는지 확인합니다.

6. CPU 사용률 확인하기

mpstat -P ALL 1

RSS 적용 후 특정 CPU만 사용하는 현상이 줄어드는지 확인합니다.

7. irqbalance 확인하기

RSS는 irqbalance와 함께 사용하는 것이 일반적입니다.

systemctl status irqbalance

실행되어 있지 않다면

systemctl enable --now irqbalance

인터럽트를 여러 CPU에 자동으로 분산시킬 수 있습니다.

8. SoftIRQ 확인하기

cat /proc/softirqs

다음 항목을 확인합니다.

  • NET_RX
  • NET_TX

RSS 적용 후 SoftIRQ도 여러 CPU에 분산되는지 확인합니다.

9. 성능 테스트 수행하기

네트워크 성능을 확인합니다.

iperf3 -c 서버IP

또는

sar -n DEV 1

RSS 적용 전후 처리량과 CPU 사용률을 비교합니다.

10. NUMA 환경 고려하기

NUMA 서버에서는 CPU와 NIC의 물리적 위치를 함께 고려해야 합니다.

NUMA 확인

numactl --hardware

또는

lscpu

동일한 NUMA Node의 CPU와 RX Queue를 사용하는 것이 가장 좋은 성능을 제공합니다.

RSS 설정 확인 순서

실무에서는 다음 순서대로 점검하는 것이 좋습니다.

  1. RSS 지원 여부 확인
  2. RX Queue 개수 확인
  3. RSS Hash 확인
  4. Queue 개수 조정
  5. 인터럽트 확인
  6. CPU 사용률 확인
  7. irqbalance 확인
  8. SoftIRQ 확인
  9. 성능 테스트 수행
  10. NUMA 구조 확인

RSS 사용 시 주의사항

다음 사항을 함께 고려해야 합니다.

  • CPU 개수와 Queue 개수를 맞추기
  • irqbalance 함께 사용
  • 최신 NIC 드라이버 유지
  • NUMA 구조 고려
  • RPS, RFS, XPS와 병행 사용
  • 최신 펌웨어 유지

RSS만으로 모든 성능 문제가 해결되는 것은 아니며, Linux 커널 기능과 함께 사용하는 것이 일반적입니다.

자주 묻는 질문

RSS와 RPS의 차이는 무엇인가요?

RSS는 NIC 하드웨어가 패킷을 여러 Queue로 분산하는 기능이고, RPS는 Linux 커널이 SoftIRQ 단계에서 CPU를 분산하는 기능입니다.

RSS를 지원하지 않는 NIC도 있나요?

네. 일부 구형 네트워크 카드나 저가형 장치는 RSS를 지원하지 않습니다. 이런 경우 RPS를 활용하여 CPU 부하를 분산할 수 있습니다.

Queue를 많이 만들수록 성능이 좋아지나요?

반드시 그렇지는 않습니다. CPU 개수, NIC 성능, 워크로드 특성을 고려하여 적절한 Queue 수를 설정해야 합니다. 과도한 Queue는 오히려 관리 오버헤드를 증가시킬 수 있습니다.

마무리

RSS(Receive Side Scaling)는 네트워크 카드가 하드웨어 수준에서 수신 패킷을 여러 RX Queue로 분산하여 멀티코어 CPU의 성능을 최대한 활용할 수 있도록 해주는 핵심 기술입니다. ethtool, mpstat, /proc/interrupts, iperf3 등을 활용하면 RSS 동작 상태를 확인할 수 있으며, irqbalance, RPS, RFS, XPS와 함께 구성하면 대규모 트래픽 환경에서도 안정적인 네트워크 성능을 유지할 수 있습니다.

댓글 남기기