네트워크 정보확인 (ethtool)
ethtool & 네트워크 링버퍼 핵심 요약
1. ethtool 주요 옵션
명령어 내용
| ethtool eth0 | 링크 속도, 연결 상태 |
| ethtool -g eth0 | 링버퍼 크기 확인 |
| ethtool -G eth0 rx 8192 tx 4096 | 링버퍼 크기 변경 |
| ethtool -k eth0 | Offload 기능 확인 |
| ethtool -S eth0 | 패킷 드롭/에러 통계 |
| ethtool -i eth0 | 드라이버 정보 |
2. 링버퍼 (Ring Buffer)
- NIC와 커널 사이의 원형 큐 형태 메모리
- 단위는 MB가 아닌 패킷 슬롯 개수
- RX = 수신 버퍼, TX = 송신 버퍼
Pre-set maximums vs Current
- Pre-set maximums = 하드웨어가 지원하는 최대 슬롯 수
- Current = 현재 실제 사용 중인 슬롯 수
- 두 값을 일치시켜야 하드웨어 능력을 100% 활용 가능
링버퍼가 작으면?
트래픽 폭주 → 링버퍼 가득 참 → 패킷 DROP → TCP 재전송 → 성능 저하
주의사항
- 링버퍼를 늘려도 대역폭 자체가 늘어나진 않음
- 링버퍼 튜닝 = 안정성 향상 (드롭 방지)
- 대역폭 확장 = 속도 향상
- 재부팅 시 초기화 → systemd 서비스로 영구 적용 필요
3. 어떤 인터페이스를 튜닝해야 하나?
ip route show | grep default
# dev 뒤에 나오는 인터페이스가 튜닝 대상
- metric 숫자가 낮을수록 우선순위 높음
- 게이트웨이로 나가는 메인 인터페이스를 튜닝해야 효과 있음
4. TCP Offload (-k)
CPU 대신 NIC가 직접 처리해주는 기능들
기능 역할
| rx/tx-checksumming | 패킷 오류 검증 |
| TSO | MTU 초과 패킷 분할을 NIC가 처리 |
| GRO | 작은 패킷들을 NIC가 합쳐서 CPU에 전달 |
| GSO | TSO 미지원 시 커널이 대신 처리 |
[fixed] = 하드웨어 고정값, 변경 불가
5. MTU (Maximum Transmission Unit)
- 한 번에 전송 가능한 최대 패킷 크기 (단위: bytes)
- 기본값 = 1500 bytes (이더넷 표준)
- MTU 초과 시 패킷을 분할(단편화) 하여 전송
- TSO = 이 분할 작업을 CPU 대신 NIC가 처리
링버퍼 슬롯과 MTU 관계
슬롯 1개 = 최대 MTU(1500bytes)까지 저장 가능
총 용량 = 슬롯 수 × MTU = 8192 × 1500 ≈ 12MB