네트워크 성능에 영향을 미치는 요인은 여러가지가 있다.
per interrupt overhead
: NIC가 발생시키는 interrupt
해결방안 : NAPI
per packet overhead
: layer간 이동 시, buffer(메모리)alloc, free 시, 패킷 감싸고, 해석할 시 발생
해결방안 : 패킷 수 자체 줄이기 (GRO:한번에 처리), 패킷 batching(단, batch 될때까지 패킷 모으는 동안 delay발생 가능)
per byte overhead
: checksum 시, 커널-유저 사이 데이터 cp
해결방안 : NIC에서 checksum 진행, zero-copy 매커니즘 사용(커널-유저 간 데이터 바로 참조하게 만들기)
(처리된 데이터) / (시간)처리 가능한 throughput을 넘으면 병목현상 발생 가능.
ping(1) 찍어서 확인(전체 패킷 수 - 받은 패킷 수) / (보낸 패킷 수) 로 계산$ cat /proc/net/dev/
: 인터페이스 별 데이터 송수신 값 확인 가능
$ ethtool -S (NIC 인터페이스 이름 e.g. ens6f0)
: NIC 상태(패킷, 큐 현황 등) 확인 가능
$ cat /proc/interrupts | grep (NIC 인터페이스 이름)
: 코어 별 NIC 인터페이스의 interrupt 개수 확인 가능
$ cat /proc/softirqs | grep NET
: NET_TX, NET_RX에 대한 softirq 개수 확인 가능
top , mpstat , pidstat, perf stat 등도 사용 가능
tcpdump -i (NIC 인터페이스 이름) tcp -vv
: libpcap 사용해서 패킷 캡처. wireshark 또한 이 라이브러리 사용
iperf/iperf3 : 조건을 설정(프로토콜, 패킷 크기 등등)해서 네트워크 트래픽 생성