Linux Scatter-Gather(SG)란 무엇이며 NIC Offload 성능 최적화 방법

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 점검 순서

실무에서는 다음 순서대로 확인하는 것이 효율적입니다.

  1. SG 활성화 여부 확인
  2. SG 활성화 또는 비활성화
  3. CPU 사용률 확인
  4. 메모리 사용량 확인
  5. NIC Offload 기능 확인
  6. 네트워크 처리량 측정
  7. 인터럽트 확인
  8. SoftIRQ 확인
  9. NIC 드라이버 확인
  10. 성능 비교 테스트

Scatter-Gather 사용 시 주의사항

다음 사항을 고려해야 합니다.

  • 최신 NIC 드라이버 사용
  • 최신 펌웨어 유지
  • 다른 Offload 기능과 함께 사용
  • 가상화 환경 호환성 확인
  • 운영 환경 적용 전 성능 테스트 수행
  • 패킷 분석 시 Offload 기능 영향 고려

일부 오래된 NIC에서는 SG 기능이 제한적일 수 있으므로 하드웨어 지원 여부를 확인하는 것이 좋습니다.

Scatter-Gather와 Checksum Offload의 차이

항목Scatter-GatherChecksum 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 서버에서 최적의 네트워크 성능을 구현할 수 있습니다.

댓글 남기기