고성능 Linux 서버에서는 대용량 데이터를 전송할 때 CPU가 TCP 세그먼트를 일일이 생성하면 많은 시스템 자원이 소모됩니다. 예를 들어 64KB 데이터를 전송하려면 MTU가 1500바이트인 환경에서는 수십 개의 TCP 패킷으로 분할해야 하며, 이 작업을 CPU가 수행하면 성능 저하가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 사용하는 기술이 TSO(TCP Segmentation Offload) 입니다. TSO는 TCP 세그먼트 분할 작업을 CPU 대신 네트워크 카드(NIC)가 수행하도록 하여 CPU 부하를 줄이고 네트워크 성능을 향상시키는 기능입니다.
이번 글에서는 TSO의 개념부터 동작 원리, 설정 방법, 성능 확인, 실무 활용 방법까지 자세히 알아보겠습니다.
TSO(TCP Segmentation Offload)란?
TSO는 TCP Segmentation Offload의 약자로, CPU가 큰 TCP 데이터를 생성하면 실제 MTU 크기에 맞는 세그먼트 분할은 NIC가 수행하는 기술입니다.
동작 과정은 다음과 같습니다.
Application
│
▼
Linux Kernel
│
64KB TCP Data
│
▼
NIC (TSO)
│
▼
1500Byte Packet
1500Byte Packet
1500Byte Packet
...
CPU는 큰 데이터만 생성하고, 실제 TCP 세그먼트 분할은 네트워크 카드가 처리합니다.
TSO를 사용하는 이유
다음과 같은 환경에서 효과가 매우 큽니다.
- Nginx 웹 서버
- Apache 서버
- 파일 서버
- NAS
- Kubernetes
- Docker Host
- 데이터베이스 서버
- CDN
- 백업 서버
- 대용량 데이터 전송 서버
실무에서는 대부분의 서버에서 기본적으로 활성화되어 있습니다.
1. TSO 활성화 여부 확인하기
현재 상태를 확인합니다.
ethtool -k eth0
예시
tcp-segmentation-offload: on
on이면 활성화된 상태입니다.
2. TSO 활성화하기
비활성화되어 있다면 다음과 같이 활성화합니다.
ethtool -K eth0 tso on
설정 후 다시 확인합니다.
ethtool -k eth0
3. TSO 비활성화하기
성능 테스트가 필요하다면 일시적으로 비활성화할 수 있습니다.
ethtool -K eth0 tso off
운영 환경에서는 특별한 이유가 없다면 활성화를 유지하는 것이 일반적입니다.
4. CPU 사용률 확인하기
TSO 적용 전후 CPU 사용률을 비교합니다.
mpstat -P ALL 1
또는
top
송신량이 많은 환경일수록 CPU 감소 효과가 크게 나타날 수 있습니다.
5. 송신 패킷 확인하기
네트워크 상태를 확인합니다.
sar -n DEV 1
또는
ip -s link
송신량(TX)과 오류 여부를 함께 확인합니다.
6. SoftIRQ 확인하기
cat /proc/softirqs
다음 항목을 확인합니다.
- NET_TX
- NET_RX
TSO 적용 후 NET_TX 처리 효율이 향상되는지 확인합니다.
7. NIC Offload 기능 확인하기
TSO와 함께 사용하는 기능을 확인합니다.
ethtool -k eth0
다음 항목을 함께 점검합니다.
- GSO
- GRO
- Checksum Offload
- Scatter Gather
- LRO
여러 Offload 기능이 함께 활성화되어 있을 때 가장 높은 성능을 얻을 수 있습니다.
8. NIC 드라이버 확인하기
ethtool -i eth0
최신 드라이버일수록 TSO 최적화가 잘 되어 있습니다.
9. 성능 테스트
실제 처리량을 확인합니다.
iperf3 -c 서버IP
또는
iperf3 -s
TSO 적용 전후 처리량과 CPU 사용률을 비교합니다.
10. 커널 로그 확인하기
드라이버 오류를 확인합니다.
dmesg | grep -Ei "tso|eth|net"
또는
journalctl -k | grep -Ei "tso|driver"
오류가 발생한다면 드라이버 업데이트를 검토합니다.
TSO 점검 순서
실무에서는 다음 순서대로 확인하는 것이 좋습니다.
- TSO 활성화 여부 확인
- TSO 활성화 또는 비활성화
- CPU 사용률 확인
- 송신 패킷 확인
- SoftIRQ 확인
- 다른 Offload 기능 확인
- NIC 드라이버 확인
- 네트워크 성능 테스트
- 커널 로그 확인
- 성능 비교 분석
TSO 사용 시 주의사항
다음 사항을 고려해야 합니다.
- 최신 NIC 드라이버 유지
- 최신 펌웨어 사용
- GSO 및 GRO와 함께 사용
- 가상화 환경에서는 호환성 확인
- 패킷 캡처 시 결과 차이 발생 가능
- 성능 테스트 후 운영 환경 적용
일부 오래된 NIC나 드라이버에서는 TSO 관련 버그가 발생할 수 있으므로 최신 버전을 사용하는 것이 좋습니다.
TSO와 GSO의 차이점
| 항목 | TSO | GSO |
|---|---|---|
| 처리 위치 | NIC 하드웨어 | Linux 커널 |
| 성능 | 매우 높음 | 높음 |
| 하드웨어 지원 | 필요 | 불필요 |
| CPU 사용률 | 매우 낮음 | 낮음 |
| 호환성 | NIC 의존 | 높음 |
TSO를 지원하지 않는 네트워크 카드에서는 GSO가 대체 기능으로 동작합니다.
자주 묻는 질문
TSO는 기본적으로 활성화되어 있나요?
대부분의 최신 Linux 배포판과 서버용 NIC에서는 기본적으로 활성화되어 있습니다.
TSO를 비활성화해야 하는 경우도 있나요?
패킷 분석, 특정 가상화 환경, 드라이버 문제 해결을 위한 테스트 과정에서는 일시적으로 비활성화하는 경우가 있습니다.
TSO와 GRO를 함께 사용할 수 있나요?
네. 일반적으로 TSO, GRO, GSO, Checksum Offload를 함께 사용하는 것이 가장 높은 성능을 제공합니다.
마무리
TSO(TCP Segmentation Offload)는 TCP 세그먼트 분할 작업을 CPU 대신 NIC가 수행하도록 하여 CPU 부하를 크게 줄이는 핵심 네트워크 최적화 기술입니다. ethtool, mpstat, iperf3, /proc/softirqs 등을 활용하여 동작 상태를 확인할 수 있으며, GRO, GSO, Checksum Offload와 함께 구성하면 대규모 트래픽 환경에서도 높은 네트워크 성능을 유지할 수 있습니다.