如何确定性地改变 netem 等程序的延迟?

如何确定性地改变 netem 等程序的延迟?

我正在尝试设置一个网络场景,其中两个节点之间存在可变延迟。 Netem 允许设置固定延迟并根据某种概率分布添加抖动。但是,我希望实现根据类似法律而变化的延迟:

在此输入图像描述

有没有办法使用 netem 或类似软件来获得这个?

答案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

导致测量的延迟如下:

在此输入图像描述

我已经在具有不同规格的多台机器上对此进行了测试,并且所有机器的计时行为似乎都是相同的。

相关内容