netem과 같은 프로그램의 대기 시간을 결정적으로 변경하는 방법은 무엇입니까?

netem과 같은 프로그램의 대기 시간을 결정적으로 변경하는 방법은 무엇입니까?

두 노드 사이에 가변 지연이 있는 네트워크 시나리오를 설정하려고 합니다. Netem을 사용하면 고정 지연을 설정하고 확률 분포에 따라 지터를 추가할 수 있습니다. 그러나 다음과 같은 법률에 따라 다양한 지연을 구현하고 싶습니다.

여기에 이미지 설명을 입력하세요.

netem이나 유사한 소프트웨어를 사용하여 이를 얻을 수 있는 방법이 있습니까?

답변1

netem에서는 시간 경과에 따른 대기 시간을 직접 설정할 수 없지만 tc는 변경 사항에 신속하게(대략 100밀리초 이하) 응답할 수 있습니다. 이를 알고 있으면 원하는 기능을 추적하기 위해 지연을 변경하는 프로그램을 작성할 수 있습니다.

예를 들어 bash를 사용하여 초당 지연 시간을 늘리면 다음과 같습니다(루트로 실행).

# Virtual ethernet for testing
ip netns add net1
ip netns add net2

ip link add name veth netns net1 type veth peer name veth netns net2

ip netns exec net1 ip addr add 10.0.0.1/24 dev veth
ip netns exec net2 ip addr add 10.0.0.2/24 dev veth

ip netns exec net1 ip link set dev veth up
ip netns exec net2 ip link set dev veth up

# Latency measurement
(ip netns exec net1 ping -c 40 -i 0.1 10.0.0.2 | awk -F'=' '/time=/{print "{\"latency_ms\": " substr($4, 1, length($4)-3) "}"}' | jq -s . > changing_latency.json) &

# Increment latency every second
seq 1 4 | while read -r i; do
    if [ "$i" = "1" ]; then
        (ip netns exec net1 tc qdisc add dev veth root netem delay ${i}ms) &
    else
        (ip netns exec net1 tc qdisc change dev veth root netem delay ${i}ms) &
    fi
    sleep 1
done
ip netns exec net1 tc qdisc del dev veth root

결과적으로 측정이 지연되면 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

사양이 다른 여러 컴퓨터에서 이것을 테스트했는데 타이밍 동작은 모든 컴퓨터에서 동일한 것 같습니다.

관련 정보