답변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
결과적으로 측정이 지연되면 다음과 같습니다.
사양이 다른 여러 컴퓨터에서 이것을 테스트했는데 타이밍 동작은 모든 컴퓨터에서 동일한 것 같습니다.