答え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
その結果、測定が遅れると次のようになります。
仕様が異なる複数のコンピュータでこれをテストしましたが、タイミング動作はすべてのコンピュータで同じようです。