netemのようなプログラムの待ち時間を決定的に変更するには?

netemのようなプログラムの待ち時間を決定的に変更するには?

2つのノード間に可変遅延があるネットワークシナリオを設定しようとしています。 Netemを使用すると、固定遅延を設定し、確率分布に基づいてジッタを追加できます。しかし、以下の法律に基づいてさまざまな遅延を実装したいと思います。

ここに画像の説明を入力してください。

netemや同様のソフトウェアを使ってこれを得る方法はありますか?

答え1

netemでは時間の経過に伴う待ち時間を直接設定することはできませんが、tcは変更に素早く(約100ミリ秒以下)応答できます。これを知っていれば、必要な機能を追跡するために遅延を変更するプログラムを書くことができます。

たとえば、bashを使用して1秒あたりの遅延時間を増やすと、次のようになります(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

その結果、測定が遅れると次のようになります。

ここに画像の説明を入力してください。

仕様が異なる複数のコンピュータでこれをテストしましたが、タイミング動作はすべてのコンピュータで同じようです。

関連情報