Linux 서버에서 대용량 데이터를 전송할 때 CPU는 여러 개의 메모리 버퍼를 하나의 연속된 버퍼로 복사한 뒤 네트워크 카드(NIC)에 전달하는 작업을 수행합니다. 이러한 메모리 복사 작업은 CPU 사용률을 높이고 네트워크 성능을 저하시킬 수 있습니다.
이를 해결하기 위해 대부분의 최신 NIC는 Scatter-Gather(SG) 기능을 제공합니다. SG는 여러 개의 메모리 버퍼를 하나로 복사하지 않고도 NIC가 직접 읽어 전송할 수 있도록 하여 CPU 부하를 줄이고 데이터 전송 효율을 높이는 기술입니다.
이번 글에서는 Scatter-Gather의 개념부터 동작 원리, 설정 방법, 성능 확인 방법, 실무 활용 방법까지 자세히 알아보겠습니다.
Scatter-Gather(SG)란?
Scatter-Gather는 여러 개의 메모리 버퍼를 하나로 복사하지 않고 NIC가 직접 읽어서 하나의 패킷으로 전송하는 Offload 기술입니다.
동작 과정은 다음과 같습니다.
Application
│
▼
Buffer A
Buffer B
Buffer C
│
▼
NIC(Scatter-Gather)
│
▼
하나의 Network Packet
CPU는 버퍼를 복사하는 작업을 수행하지 않아도 되므로 메모리 복사 비용과 CPU 사용률이 감소합니다.
Scatter-Gather를 사용하는 이유
다음과 같은 환경에서 효과가 큽니다.
- Nginx 웹 서버
- Apache 서버
- Kubernetes
- Docker Host
- NAS 서버
- 파일 서버
- 데이터베이스 서버
- 백업 서버
- CDN 서버
- 대용량 파일 전송 서버
실무에서는 대부분의 서버에서 기본적으로 활성화되어 있습니다.
1. Scatter-Gather 지원 여부 확인하기
현재 SG 기능을 확인합니다.
ethtool -k eth0
예시
scatter-gather: on
on이면 활성화된 상태입니다.
2. Scatter-Gather 활성화하기
비활성화되어 있다면 다음과 같이 활성화합니다.
ethtool -K eth0 sg on
설정 후 다시 확인합니다.
ethtool -k eth0
3. Scatter-Gather 비활성화하기
테스트를 위해 일시적으로 비활성화할 수 있습니다.
ethtool -K eth0 sg off
운영 서버에서는 특별한 이유가 없다면 활성화 상태를 유지하는 것이 좋습니다.
4. CPU 사용률 확인하기
적용 전후 CPU 사용률을 비교합니다.
mpstat -P ALL 1
또는
top
대용량 파일 전송 시 CPU 사용률 감소 여부를 확인합니다.
5. 메모리 사용량 확인하기
메모리 사용 상태도 함께 확인합니다.
free -h
또는
vmstat 1
메모리 복사 작업이 줄어들면서 시스템 자원 활용이 개선될 수 있습니다.
6. NIC Offload 기능 확인하기
다른 Offload 기능도 함께 확인합니다.
ethtool -k eth0
다음 항목을 함께 확인하는 것이 좋습니다.
- TSO
- GSO
- GRO
- LRO
- Checksum Offload
Offload 기능들은 함께 사용할 때 더욱 높은 성능을 기대할 수 있습니다.
7. 네트워크 처리량 확인하기
전송 성능을 측정합니다.
iperf3 -c 서버IP
또는
sar -n DEV 1
적용 전후 처리량을 비교합니다.
8. 인터럽트 및 SoftIRQ 확인하기
cat /proc/interrupts
cat /proc/softirqs
네트워크 처리 효율이 개선되었는지 확인합니다.
9. NIC 드라이버 확인하기
ethtool -i eth0
최신 드라이버에서는 SG 최적화가 더욱 잘 이루어져 있습니다.
10. 커널 로그 확인하기
dmesg | grep -Ei "scatter|sg|eth|net"
또는
journalctl -k | grep -Ei "scatter|driver"
드라이버 오류가 있는지 확인합니다.
Scatter-Gather 점검 순서
실무에서는 다음 순서대로 확인하는 것이 효율적입니다.
- SG 활성화 여부 확인
- SG 활성화 또는 비활성화
- CPU 사용률 확인
- 메모리 사용량 확인
- NIC Offload 기능 확인
- 네트워크 처리량 측정
- 인터럽트 확인
- SoftIRQ 확인
- NIC 드라이버 확인
- 성능 비교 테스트
Scatter-Gather 사용 시 주의사항
다음 사항을 고려해야 합니다.
- 최신 NIC 드라이버 사용
- 최신 펌웨어 유지
- 다른 Offload 기능과 함께 사용
- 가상화 환경 호환성 확인
- 운영 환경 적용 전 성능 테스트 수행
- 패킷 분석 시 Offload 기능 영향 고려
일부 오래된 NIC에서는 SG 기능이 제한적일 수 있으므로 하드웨어 지원 여부를 확인하는 것이 좋습니다.
Scatter-Gather와 Checksum Offload의 차이
| 항목 | Scatter-Gather | Checksum Offload |
|---|---|---|
| 목적 | 메모리 복사 최소화 | Checksum 계산 오프로드 |
| 처리 대상 | 메모리 버퍼 | TCP/IP Checksum |
| CPU 절감 | 메모리 복사 | 계산 작업 |
| 하드웨어 지원 | 필요 | 필요 |
두 기능은 서로 다른 역할을 수행하며 함께 활성화하는 것이 일반적입니다.
자주 묻는 질문
Scatter-Gather는 기본적으로 활성화되어 있나요?
대부분의 최신 Linux 서버와 서버용 NIC에서는 기본적으로 활성화되어 있습니다.
Scatter-Gather를 비활성화해야 하는 경우가 있나요?
일부 드라이버 문제를 분석하거나 특정 테스트를 수행하는 경우를 제외하면 일반적으로 비활성화할 필요는 없습니다.
Scatter-Gather와 TSO는 함께 사용할 수 있나요?
네. Scatter-Gather, TSO, GSO, GRO, Checksum Offload는 함께 동작하도록 설계되어 있으며, 대부분의 운영 서버에서는 모두 활성화되어 있습니다.
마무리
Scatter-Gather(SG)는 여러 개의 메모리 버퍼를 복사하지 않고 NIC가 직접 읽어 전송하도록 하여 CPU 부하를 줄이고 네트워크 성능을 향상시키는 핵심 Offload 기술입니다. ethtool, mpstat, iperf3, /proc/interrupts 등을 활용하면 동작 상태와 성능 효과를 확인할 수 있으며, TSO, GSO, GRO, Checksum Offload와 함께 사용하면 고성능 Linux 서버에서 최적의 네트워크 성능을 구현할 수 있습니다.