Linux 서버에서 대량의 네트워크 트래픽을 처리할 때 CPU는 TCP, UDP, IP 패킷마다 Checksum 값을 계산하고 검증해야 합니다. 트래픽이 많아질수록 이러한 계산 작업은 CPU 사용률을 높이는 원인이 됩니다.
이를 해결하기 위해 대부분의 최신 네트워크 카드(NIC)는 Checksum Offload 기능을 제공합니다. Checksum Offload는 CPU 대신 NIC가 Checksum 계산과 검증을 수행하여 CPU 부하를 줄이고 네트워크 성능을 향상시키는 기술입니다.
이번 글에서는 Checksum Offload의 개념, RX/TX Checksum 차이점, 설정 방법, 성능 확인 방법 및 실무 활용 방법을 자세히 알아보겠습니다.
Checksum Offload란?
Checksum Offload는 네트워크 카드가 IP, TCP, UDP 패킷의 Checksum 계산과 검증을 대신 수행하는 기능입니다.
동작 과정은 다음과 같습니다.
Application
│
▼
Linux Kernel
│
▼
NIC
│
Checksum 계산
또는 검증
│
▼
Network
CPU는 Checksum 연산을 수행하지 않아도 되므로 다른 작업에 자원을 사용할 수 있습니다.
RX Checksum과 TX Checksum의 차이
Checksum Offload는 두 가지 기능으로 나뉩니다.
| 기능 | 설명 |
|---|---|
| RX Checksum Offload | 수신한 패킷의 Checksum 검증을 NIC가 수행 |
| TX Checksum Offload | 송신하는 패킷의 Checksum 계산을 NIC가 수행 |
일반적으로 두 기능 모두 활성화하는 것이 권장됩니다.
Checksum Offload를 사용하는 이유
다음과 같은 환경에서 효과가 큽니다.
- Nginx 웹 서버
- Apache 서버
- API 서버
- Kubernetes
- Docker Host
- NAS
- Redis
- MySQL
- PostgreSQL
- CDN 서버
실무에서는 대부분 기본 활성화되어 있습니다.
1. Checksum Offload 상태 확인하기
현재 설정을 확인합니다.
ethtool -k eth0
예시
rx-checksumming: on
tx-checksumming: on
on이면 활성화된 상태입니다.
2. RX Checksum 활성화하기
수신 Checksum 기능을 활성화합니다.
ethtool -K eth0 rx on
설정 후 다시 확인합니다.
ethtool -k eth0
3. TX Checksum 활성화하기
송신 Checksum 기능을 활성화합니다.
ethtool -K eth0 tx on
송신량이 많은 서버에서는 매우 중요한 기능입니다.
4. Checksum Offload 비활성화하기
문제 분석이나 패킷 캡처를 위해 비활성화할 수 있습니다.
ethtool -K eth0 rx off
ethtool -K eth0 tx off
운영 서버에서는 특별한 이유가 없다면 비활성화하지 않는 것이 좋습니다.
5. CPU 사용률 확인하기
설정 전후 CPU 사용률을 비교합니다.
mpstat -P ALL 1
또는
top
트래픽이 많은 환경일수록 CPU 감소 효과가 크게 나타납니다.
6. NIC 기능 확인하기
NIC가 지원하는 Offload 기능을 확인합니다.
ethtool -k eth0
다음 기능도 함께 확인합니다.
- GRO
- GSO
- TSO
- LRO
- Scatter Gather
이 기능들은 Checksum Offload와 함께 동작하는 경우가 많습니다.
7. 네트워크 성능 확인하기
송수신 처리량을 확인합니다.
sar -n DEV 1
또는
iperf3 -c 서버IP
설정 전후 처리량을 비교합니다.
8. 인터럽트 및 SoftIRQ 확인하기
cat /proc/interrupts
cat /proc/softirqs
CPU 부하가 감소했는지 함께 확인합니다.
9. NIC 드라이버 확인하기
ethtool -i eth0
드라이버가 오래된 경우 Checksum Offload 관련 문제가 발생할 수 있으므로 최신 버전 사용을 권장합니다.
10. 커널 로그 확인하기
dmesg | grep -Ei "checksum|eth|net"
또는
journalctl -k | grep -Ei "checksum|driver"
드라이버 오류나 Offload 관련 메시지가 있는지 확인합니다.
Checksum Offload 점검 순서
실무에서는 다음 순서대로 점검하는 것이 효율적입니다.
- Checksum Offload 상태 확인
- RX/TX 활성화 여부 확인
- CPU 사용률 확인
- NIC 기능 확인
- 네트워크 처리량 측정
- 인터럽트 확인
- SoftIRQ 확인
- NIC 드라이버 확인
- 커널 로그 확인
- 성능 비교 테스트
Checksum Offload 사용 시 주의사항
다음 사항을 고려해야 합니다.
- 최신 NIC 드라이버 사용
- 최신 펌웨어 유지
- 패킷 분석 시 비활성화 고려
- 가상화 환경 호환성 확인
- 다른 Offload 기능과 함께 사용
- 운영 환경 적용 전 성능 테스트 수행
패킷 캡처 도구(tcpdump, Wireshark)를 사용할 때는 Checksum 오류가 보일 수 있는데, 이는 Offload 기능 때문에 발생하는 정상적인 현상일 수 있습니다.
자주 묻는 질문
Checksum Offload는 기본적으로 활성화되어 있나요?
대부분의 최신 Linux 배포판과 서버용 NIC에서는 기본적으로 활성화되어 있습니다.
패킷 캡처에서 Checksum 오류가 보이는 이유는 무엇인가요?
Checksum 계산이 NIC에서 전송 직전에 수행되기 때문에, 캡처 시점에서는 아직 계산되지 않아 오류처럼 보일 수 있습니다. 실제 네트워크 오류가 아닌 경우가 많습니다.
Checksum Offload를 비활성화하면 어떤 영향이 있나요?
CPU가 직접 Checksum을 계산해야 하므로 CPU 사용률이 증가할 수 있습니다. 따라서 운영 환경에서는 특별한 이유가 없다면 활성화 상태를 유지하는 것이 좋습니다.
마무리
Checksum Offload는 CPU 대신 네트워크 카드가 Checksum 계산과 검증을 수행하여 CPU 부하를 줄이는 핵심 네트워크 최적화 기술입니다. ethtool, mpstat, iperf3, /proc/interrupts 등을 활용하면 기능 활성화 여부와 성능 효과를 확인할 수 있으며, TSO, GSO, GRO 등 다른 Offload 기능과 함께 사용하면 대규모 트래픽 환경에서도 효율적인 네트워크 성능을 유지할 수 있습니다.