TCP TSO(TCP Segmentation Offload)란 무엇인가? 하드웨어 가속을 통한 서버 CPU 최적화 원리





TCP TSO(TCP Segmentation Offload) 정의와 동작 원리 완벽 정리

TSO(TCP Segmentation Offload)란 무엇인가? 하드웨어 기반 네트워크 송신 가속 기술

기가비트(Gbps) 단위를 넘어 대규모 데이터 센터와 클라우드 인프라에서 10Gbps, 40Gbps, 100Gbps의 초고속 네트워크가 보편화되면서 서버가 직면한 가장 큰 문제는 ‘대역폭’ 자체가 아닌 ‘CPU의 연산 한계’가 되었습니다. 데이터를 전송할 때 패킷 단위로 잘게 쪼개는 작업이 CPU에 막대한 오버헤드를 유발하기 때문입니다. 이러한 병목 현상을 해결하기 위해 등장한 혁신적인 하드웨어 가속 기술이 바로 TSO(TCP Segmentation Offload)입니다. 본 포스팅에서는 TSO의 개념과 구체적인 동작 메커니즘, 그리고 이것이 서버 전체의 가용성에 미치는 영향을 상세히 파헤쳐 보겠습니다.

1. TSO가 해결하려는 근본적인 문제: 분할(Segmentation) 오버헤드

응용 프로그램(웹 서버, 파일 서버 등)이 네트워크를 통해 수십 킬로바이트(KB)에서 수 메가바이트(MB)에 달하는 대용량 데이터를 전송할 때, 이 데이터는 한 번에 네트워크 선로를 탈 수 없습니다. 데이터 링크 계층의 물리적 제약인 MTU(Maximum Transmission Unit, 기본 1,500바이트) 크기에 맞춰 작은 조각(세그먼트)으로 쪼개져야 합니다.

TSO가 비활성화된 일반적인 환경에서는 이 분할 작업을 운영체제(OS)의 CPU가 전담합니다. 이 과정에서 CPU는 다음과 같은 무거운 프로토콜 스택 연산을 수천 번 반복하게 됩니다.

  • 대형 데이터를 1,460바이트(MSS) 단위의 세그먼트로 일일이 분할
  • 쪼개진 각 세그먼트마다 독립적인 TCP 헤더와 IP 헤더를 새로 생성하고 채워 넣는 작업
  • 패킷 데이터의 무결성을 검증하기 위한 헤더 및 페이로드 체크섬(Checksum) 계산
  • 수많은 패킷 구조체(sk_buff)를 메모리에 할당하고 해제하는 오버헤드

이로 인해 초고속 트래픽 발송 시 정작 비즈니스 로직을 처리해야 할 CPU 코어들이 네트워크 패킷 가공 연산(SoftIRQ)을 하느라 고갈되는 병목 현상이 발생합니다.

2. TSO(TCP Segmentation Offload)의 정의와 동작 원리

TSO는 “네트워크 프로토콜 스택의 대용량 데이터 분할(Segmentation) 및 체크섬 연산 작업을 CPU가 아닌, 네트워크 카드(NIC) 하드웨어 칩셋에 완전히 이관(Offload)하여 처리하는 기술”입니다. 다른 말로 LSO(Large Send Offload)라고도 부릅니다.

2.1 세부 동작 프로세스

  1. 슈퍼 패킷 전달: OS 커널의 프로토콜 스택은 응용 프로그램이 넘겨준 대용량 데이터를 MSS 크기로 쪼개지 않고, 하나의 거대한 ‘슈퍼 패킷(Super Packet, 최대 64KB)’ 상태 그대로 유지합니다.
  2. 단일 헤더 부착: 커널은 이 거대한 덩어리의 맨 앞에 단 하나의 대표 TCP/IP 헤더만 부착하여 랜카드(NIC) 드라이버로 통째로 내려보냅니다.
  3. 하드웨어 레벨 분할: 대형 데이터를 그대로 전달받은 랜카드의 전용 하드웨어 ASIC 칩셋이 직접 데이터를 MTU 크기에 맞게 분할합니다.
  4. 헤더 복사 및 체크섬 계산: 랜카드는 분할된 각 조각에 원본 헤더를 기반으로 시퀀스 번호를 갱신하여 복사해 넣고, 체크섬 연산을 하드웨어 가속 기능으로 순식간에 계산하여 네트워크 선로로 발송합니다.

결과적으로 커널 스택 내에서 무거운 프로세스를 단 한 번만 수행하므로 콘텍스트 스위칭 횟수와 CPU 캐시 미스(Cache Miss)가 극적으로 감소하며, 전송 속도가 빨라질수록 CPU 자원 절감 효과는 가중됩니다.

3. TSO vs GSO 차이점 비교

송신 가속 기술을 이야기할 때 GSO(Generic Segmentation Offload)와의 차이를 명확히 이해하는 것이 인프라 최적화의 핵심입니다.

비교 항목 TSO (TCP Segmentation Offload) GSO (Generic Segmentation Offload)
구현 계층 NIC 하드웨어 칩셋 (Hardware) 리눅스 커널 네트워크 스택 (Software)
하드웨어 의존성 필수 (랜카드가 기능을 지원해야만 작동) 없음 (모든 랜카드에서 소프트웨어로 보장)
지원 프로토콜 주로 IPv4 / TCP로 제한됨 IPv4, IPv6, UDP, GRE/VXLAN 터널링 등 범용 지원
CPU 절감 수준 최상 (분할 연산 자체를 하드웨어로 완전 이관) 상 (커널 상부 레이어 통과 오버헤드만 절감)

TSO는 가장 이상적인 하드웨어 성능 향상을 제공하지만, 랜카드 기종이 이를 지원하지 않거나 가상화(Virtualization) 환경의 가상 랜카드(vNIC) 레이어, 혹은 복잡한 터널링 프로토콜 환경에서는 작동하지 않는 제약이 있습니다. 리눅스는 이를 보완하기 위해 하드웨어가 지원하지 않으면 소프트웨어 레벨에서 마지막 순간에 쪼개는 GSO를 폴백(Fallback) 장치로 연동하여 사용합니다.

4. 실무 엔지니어를 위한 TSO 설정 및 주의사항

대규모 아웃바운드(송신) 트래픽이 많거나 CDN 서비스를 운영하는 인프라 환경이라면 TSO 설정을 정밀하게 점검해야 합니다.

  • TSO 상태 확인: ethtool -k eth0 | grep tcp-segmentation-offload 명령어로 활성화(on) 여부를 확인합니다.
  • TSO 활성화 명령어: ethtool -K eth0 tso on 명령을 통해 수동으로 활성화할 수 있습니다.
  • 부작용 (버스터 트래픽과 지연 시간): TSO는 거대한 패킷을 한 번에 랜카드로 밀어 넣은 뒤 하드웨어에서 쪼개어 연속적으로 쏟아내기 때문에, 네트워크 선로상에 일시적인 버스트(Burst) 트래픽을 유발할 수 있습니다. 이는 중간 라우터의 버퍼를 가득 채워 패킷 유실을 만들거나 미세한 지연 시간(Jitter) 상승을 초래할 수 있으므로, 초저지연이 생명인 서비스에서는 성능 측정 후 의도적으로 끄기도 합니다.

결론: 고속 네트워크 인프라의 필수 동반자

과거 가상화(KVM) 환경 위에 구축된 가상 어플라이언스 장비에서 대용량 파일 전송 시 대역폭이 1Gbps 미만으로 떨어지고 CPU SoftIRQ가 폭주하는 현상이 있었습니다. 분석 결과 호스트와 게스트 OS 간의 TSO 옵션 미스매치로 패킷이 중간에서 꼬여 드랍되는 문제였고, vNIC 드라이버의 TSO 설정을 동기화하여 CPU 부하를 잡고 속도를 5배 이상 올렸던 경험이 있습니다.

TCP TSO는 운영체제의 소프트웨어 연산 부담을 물리적인 하드웨어 칩셋의 힘을 빌려 해결하는 가장 직관적이면서도 효과적인 가속 기술입니다. 네트워크 대역폭이 10G, 40G를 넘어 급격히 확장되는 현대 인프라 환경에서 TSO는 서버가 본연의 어플리케이션 비즈니스 연산에 집중할 수 있도록 돕는 필수적인 솔루션입니다. 시스템 아키텍트와 네트워크 엔지니어라면 하드웨어의 특성을 명확히 이해하고 인프라 환경에 맞는 최적의 오프로드 설정을 유지해야 합니다.