Network Performance

John·2025년 6월 14일

system programming

목록 보기
11/11

네트워크 성능에 영향을 미치는 요인은 여러가지가 있다.

  • user process (blocking - nonblocking)
  • linux kernel networking stack
  • network 내부 딜레이 등...

sources of overhead

  • 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 매커니즘 사용(커널-유저 간 데이터 바로 참조하게 만들기)

관련 측정 metric

Throughput (처리량)

  • 초당 얼마나 많은 데이터가 처리되는지에 대한 값. e.g. bit/s , byte/s
    => (처리된 데이터) / (시간)
  • bandwidh(대역폭) 이랑은 다른 개념. 대역폭은 최대 처리량(maximum capacity)를 말함. 즉, 대역폭은 안바뀜

처리 가능한 throughput을 넘으면 병목현상 발생 가능.

delay/latency

  • 처리하는데 걸리는 시간
  • round-trip-time(RTT) e.g. ping(1) 찍어서 확인

jitter

  • jitter : RTT가 안정적인지 나타내는 지표. RTT가 왔다갔다하면 불안정

packet loss

  • (전체 패킷 수 - 받은 패킷 수) / (보낸 패킷 수) 로 계산
  • congestion이나 안정성 측정 도구

CPU utilization

  • 패킷 처리하는 동안 얼마나 CPU를 쓰는지 확인하는 것도 지표가 될 수 있음.
  • softirq cpu cycle을 측정함으로써 측정 가능
  • interrupt 수, softirq 수로도 측정 가능

How to Measure Performance?

Monitoring tools

  • os 또는 네트워크 상태가 나타내는 지표 확인.

Benchmarking tools

  • 특정 상황을 임의로 만들어 지표 측정.
  • 실제 상황을 기반으로 한 벤치마킹 툴도 존재.

in Linux

$ 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 등도 사용 가능

Network Traffic Monitoring

tcpdump -i (NIC 인터페이스 이름) tcp -vv
: libpcap 사용해서 패킷 캡처. wireshark 또한 이 라이브러리 사용

Benchmark Tools

iperf/iperf3 : 조건을 설정(프로토콜, 패킷 크기 등등)해서 네트워크 트래픽 생성

profile
¡Salid y Disfrutad!

0개의 댓글