RSS(Receive Side Scaling)란 무엇인가? 멀티코어 CPU의 네트워크 성능을 극대화하는 흐름 제어 기술





RSS(Receive Side Scaling) 동작 원리와 멀티코어 최적화 가이드

RSS(Receive Side Scaling)는 멀티코어 네트워크 성능을 어떻게 올릴까? 내부 구조 분석

현대 서버 하드웨어는 눈부시게 발전하여 단일 칩에 수십 개의 CPU 코어가 탑재되는 멀티코어 시대가 되었습니다. 네트워크 회선 역시 10Gbps를 넘어 100Gbps 이상의 초고속 대역폭이 보편화되고 있습니다. 하지만 소프트웨어와 OS 레벨에서 이를 받쳐주지 못하면 특정 CPU 코어 하나만 과부하에 걸려 전체 서버가 마비되는 병목 현상이 발생합니다. 이러한 문제를 해결하고 멀티코어의 힘을 100% 활용하게 해주는 기술이 바로 RSS(Receive Side Scaling)입니다. 본 포스팅에서는 RSS의 등장 배경과 동작 원리, 그리고 실무적인 가치를 깊이 있게 파헤쳐 보겠습니다.

1. RSS가 탄생한 배경: 단일 코어 인터럽트의 한계

RSS가 없던 과거의 전통적인 네트워크 패킷 처리 방식은 구조적인 병목을 안고 있었습니다. 랜카드(NIC)에 패킷이 도착하면, 랜카드는 CPU에게 패킷이 왔음을 알리는 하드웨어 인터럽트(IRQ)를 발생시킵니다.

문제는 이 인터럽트가 대개 0번 CPU 코어(Core 0) 등 특정 단일 코어 하나에만 집중된다는 점이었습니다. 대량의 패킷이 밀려들면 해당 코어는 인터럽트와 소프트웨어 인터럽트(SoftIRQ)를 처리하느라 CPU 점유율이 100%에 도달하게 됩니다. 이때 다른 수많은 코어들은 유휴 상태(Idle)임에도 불구하고, 0번 코어의 병목 때문에 패킷 드랍이 발생하고 지연 시간(Latency)이 급증하는 현상이 발생했는데, 이를 ‘단일 코어 병목 현상’이라고 부릅니다.

2. RSS(Receive Side Scaling)의 동작 원리: “나누어 담기”

RSS는 네트워크 패킷의 수신 처리를 여러 CPU 코어에 수학적으로 균등하게 분산시켜 병목을 원천 차단하는 하드웨어 및 소프트웨어 협력 기술입니다.

2.1 4-Tuple 해시(Hash) 계산

패킷이 랜카드에 도착하면, 랜카드의 하드웨어 칩셋은 패킷의 헤더에서 다음 4가지 핵심 정보(4-Tuple)를 추출합니다.

  • 출발지 IP 주소 (Source IP)
  • 목적지 IP 주소 (Destination IP)
  • 출발지 포트 번호 (Source Port)
  • 목적지 포트 번호 (Destination Port)

이 정보를 바탕으로 해시 함수(주로 Toeplitz 해시 알고리즘)를 돌려 고유한 해시 값을 생성합니다.

2.2 인디렉션 테이블(Indirection Table) 매핑

계산된 해시 값의 하위 몇 비트를 사용하여 내부의 ‘인디렉션 테이블’을 조회합니다. 이 테이블에는 각 인덱스마다 어떤 CPU 코어가 매핑되어 있는지 정보가 기록되어 있습니다. 랜카드는 테이블 지표에 따라 지정된 CPU 코어의 RX 큐(Receive Queue)로 패킷을 전달하고, 해당 코어에 하드웨어 인터럽트를 발생시킵니다.

2.3 연결의 일관성 보장 (캐시 효율성)

RSS 방식이 위대한 이유는 ‘동일한 네트워크 커넥션(세션)의 패킷은 반드시 동일한 CPU 코어로 간다’는 규칙을 보장하기 때문입니다. 4-Tuple 정보가 같다면 해시 결과와 매핑되는 코어도 항상 같습니다. 덕분에 CPU의 L1/L2 캐시 미스(Cache Miss)가 최소화되고, 패킷의 순서가 뒤바뀌는 Out-of-Order 문제도 예방할 수 있습니다.

3. 전통적 방식 vs RSS 적용 방식 비교

구분 전통적인 패킷 처리 (Non-RSS) RSS 적용 패킷 처리 (RSS Enabled)
인터럽트(IRQ) 처리 특정 단일 CPU 코어가 전담 여러 CPU 코어에 균등 분산
하드웨어 큐(Queue) 단일 RX 큐 사용 멀티 RX 큐 사용 (코어 수와 연동)
CPU 자원 활용도 낮음 (일부 코어 과부하, 나머지 유휴) 매우 높음 (멀티코어 전체 균형 활용)
최대 처리량(Throughput) 단일 코어의 성능 한계에 종속됨 코어 수와 비례하여 확장 가능

4. RSS와 연동되는 가속 기술들: RPS, RFS, XPS

RSS는 하드웨어(랜카드) 레벨에서 지원해야 합니다. 만약 구형 랜카드라 RSS 하드웨어 기능이 없다면 운영체제 내부에서 이를 소프트웨어적으로 구현하거나 보완하는 기술들을 사용합니다.

  • RPS (Receive Packet Steering): 하드웨어 RSS 기능이 없을 때, 소프트웨어(커널) 레벨에서 패킷 수신 처리를 다른 코어로 분산시키는 기술입니다.
  • RFS (Receive Flow Steering): 패킷을 처리하는 코어와 해당 데이터를 실제로 사용하는 애플리케이션 프로세스가 구동 중인 코어를 일치시켜 캐시 적중률(Cache Hit Rate)을 극대화하는 기술입니다.
  • XPS (Transmit Packet Steering): 수신(Receive)뿐만 아니라 패킷을 송신(Transmit)할 때도 멀티코어 큐를 지능적으로 분산 지정하는 기술입니다.

5. 실무 엔지니어를 위한 RSS 최적화 가이드

대규모 트래픽을 처리하는 리눅스 서버 환경이라면 다음과 같은 튜닝 요소들을 점검해야 합니다.

  • 멀티 큐 활성화 확인: ethtool -l [인터페이스명] 명령을 통해 현재 랜카드가 멀티 큐를 지원하고 활성화했는지 확인합니다.
  • irqbalance 데몬 점검: OS 수준에서 인터럽트를 강제로 분산시키는 irqbalance 데몬이 하드웨어 RSS의 정교한 해시 매핑을 방해하는 경우가 있습니다. 대규모 환경에서는 이를 끄고, 각 인터럽트의 CPU 친화도(Affinity)를 스크립트로 수동 튜닝하기도 합니다.
  • NUMA 아키텍처 고려: 랜카드가 연결된 PCIe 슬롯이 속한 NUMA 노드의 CPU 코어들로 RSS 인디렉션 테이블을 구성하면 메모리 접근 지연을 한 단계 더 줄일 수 있습니다.

결론: 멀티코어 잠재력을 깨우는 열쇠

RSS는 단순히 네트워크 속도를 올리는 기술이 아니라, 현대 컴퓨터 아키텍처의 핵심인 ‘멀티코어’의 잠재력을 네트워크 영역까지 온전히 확장하는 인프라 기술입니다. 데이터의 일관성과 순서를 완벽히 유지하면서도 인터럽트 부하를 분산하는 정교한 디자인 덕분에, 우리는 현대의 초고속 인터넷 환경에서도 무너지지 않는 대규모 백엔드 서버를 구축할 수 있습니다. 시스템 엔지니어나 아키텍트라면 가상화 환경이나 물리 서버 설계 시 RSS의 원리를 반드시 숙지하고 최적화를 진행해야 합니다.

RSS는 마치 고속도로 톨게이트에서 단 하나의 하이패스 차선(단일 코어)으로 모든 차량을 받다가, 차량 번호판의 끝자리를 기준으로 수십 개의 차선(멀티코어 큐)으로 균등하게 유도하여 정체를 해소하는 스마트한 교통 관제 시스템과 같습니다.