Contents
see List개요
고트래픽 서버 환경에서 Linux 네트워크 성능은 애플리케이션 전체 성능에 직접적인 영향을 미칩니다. 커널 파라미터 튜닝만으로도 수십 퍼센트의 성능 향상이 가능하며, eBPF(extended Berkeley Packet Filter)를 활용하면 커널 수준에서 네트워크 트래픽을 관찰하고 제어할 수 있습니다. 이 글에서는 실전에서 바로 적용할 수 있는 네트워크 튜닝 기법과 eBPF 기반 도구 활용법을 소개합니다.
핵심 개념
커널 네트워크 스택: Linux의 네트워크 패킷은 NIC → 인터럽트 → softirq → 프로토콜 스택 → 소켓 버퍼 → 애플리케이션 순서로 처리됩니다. 각 단계에서 병목이 발생할 수 있으며, 이를 식별하고 해결하는 것이 튜닝의 핵심입니다.
eBPF: 커널 공간에서 안전하게 실행되는 샌드박스 프로그램입니다. 네트워크 패킷 필터링, 성능 추적, 보안 모니터링 등에 활용됩니다. 커널 모듈 개발 없이도 커널 수준의 기능을 구현할 수 있어 혁신적인 기술로 평가됩니다.
XDP(eXpress Data Path): eBPF 기반의 고성능 패킷 처리 프레임워크입니다. NIC 드라이버 수준에서 패킷을 처리하여 iptables 대비 10배 이상의 처리 성능을 제공합니다.
TCP BBR: Google이 개발한 TCP 혼잡 제어 알고리즘으로, 기존 CUBIC 대비 높은 대역폭 활용률과 낮은 지연 시간을 제공합니다.
실전 예제
네트워크 성능 튜닝 파라미터입니다.
# /etc/sysctl.d/99-network-tuning.conf
sudo tee /etc/sysctl.d/99-network-tuning.conf <<EOF
# TCP BBR 혼잡 제어 활성화
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# 소켓 버퍼 크기 확대
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# 연결 큐 확대
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# TIME_WAIT 최적화
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# TCP keepalive 설정
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
# 포트 범위 확대
net.ipv4.ip_local_port_range = 1024 65535
EOF
sudo sysctl --system
eBPF 기반 네트워크 분석 도구 활용입니다.
# bcc-tools 설치 (Ubuntu)
sudo apt install bpfcc-tools linux-headers-$(uname -r)
# TCP 연결 추적 (실시간)
sudo tcpconnect-bpfcc
# TCP 연결별 지연 시간 측정
sudo tcptracer-bpfcc
# 네트워크 인터페이스별 패킷 분석
sudo funccount-bpfcc 'tcp_*'
# bpftrace로 커스텀 추적
sudo bpftrace -e '
tracepoint:tcp:tcp_retransmit_skb {
printf("Retransmit: %s:%d -> %s:%d
",
ntop(args->saddr), args->sport,
ntop(args->daddr), args->dport);
}'
# ss로 소켓 상태 확인 (netstat 대체)
ss -tunap | head -20
ss -s # 요약 통계
활용 팁
- BBR 확인: sysctl net.ipv4.tcp_congestion_control로 현재 알고리즘을 확인하세요. BBR v3가 커널 6.x에서 사용 가능합니다.
- NIC 오프로드: ethtool -k eth0로 TSO, GRO, GSO 등 하드웨어 오프로드 상태를 확인하세요. 대부분 활성화하면 성능이 향상됩니다.
- IRQ 밸런싱: 고트래픽 환경에서는 irqbalance 서비스와 함께 NIC의 멀티큐를 활용하여 CPU 코어별로 인터럽트를 분산하세요.
- Cilium 활용: Kubernetes 환경에서는 eBPF 기반 CNI인 Cilium을 사용하면 kube-proxy 없이 고성능 서비스 메시를 구현할 수 있습니다.
- 점진적 적용: sysctl 파라미터 변경은 한 번에 하나씩 적용하고 벤치마크로 효과를 확인하세요. 모든 환경에 동일한 설정이 최적은 아닙니다.
마무리
Linux 네트워크 성능 튜닝은 sysctl 파라미터 최적화부터 eBPF 기반의 고급 패킷 처리까지 넓은 스펙트럼을 가집니다. 대부분의 서버는 TCP BBR 적용과 버퍼 크기 조정만으로도 체감 가능한 성능 향상을 얻을 수 있습니다. eBPF는 네트워크 문제 진단과 성능 분석의 핵심 도구로 자리잡고 있으므로, bcc-tools와 bpftrace에 익숙해지면 운영 역량이 크게 향상될 것입니다.