答案1
虽然 netem 不允许您直接设置随时间变化的延迟,但 tc 可以快速响应更改(大约 100 毫秒或更低)。知道了这一点,您只需编写一个程序来改变延迟,以跟踪您想要的功能。
例如,使用 bash 每秒增加延迟(以 root 身份运行):
# 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
导致测量的延迟如下:
我已经在具有不同规格的多台机器上对此进行了测试,并且所有机器的计时行为似乎都是相同的。