RasberryPiのtcで遅延発生器を作る¶
先にまとめ¶
CPUあんまり強くないので、使い物にならないかと思ったのですが、 今回は44Mbpsくらいまでの単なるdelayなどは問題なく使えました。 帯域制限などするとどうなるかはともかく、 一定のdelayいれたり、lossするならこれで十分っぽい。
準備¶
sudo apt-get install bridge-utils
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo brctl addif br0 eth1
sudo ifconfig eth0 0.0.0.0 up
sudo ifconfig eth1 0.0.0.0 up
sudo ifconfig br0 up
sudo dhclient br0
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto eth1
allow-hotplug eth1
iface eth1 inet manual
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0 eth1
試した¶
まずは本来のNWの状態¶
# 100ms ping
sudo ping -i.1 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 7.988/8.733/11.030/0.443 ms
# 10ms ping
sudo ping -i.01 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 7.949/8.945/12.754/0.990 ms
Raspi Bridge経由にした¶
変化なし。
sudo ping -i.1 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.693/9.262/11.924/0.479 ms
sudo ping -i.01 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.296/9.063/11.619/0.514 ms
down -> upに10msだけ¶
変化なし。
sudo tc qdisc add dev eth1 root netem delay 10ms
sudo ping -i.1 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 18.415/18.968/19.927/0.287 ms
sudo ping -i.01 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 18.398/19.044/20.919/0.409 ms
300msのディレイにした¶
あんまりかわらない。
sudo tc qdisc change dev eth1 root netem delay 300ms
sudo ping -i.01 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 308.500/308.975/310.234/0.308 ms
CPU負荷かける¶
あんまりかわらない。
apt-get install pi
pi 1000000
sudo ping -i.01 -c 100 www.hogetan.net
--- www.hogetan.net ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 18.635/19.352/23.389/0.613 ms
10ms delay + loss 10%かける¶
普通。
sudo tc qdisc change dev eth1 root netem drop 10% delay 10ms
--- www.hogetan.net ping statistics ---
100 packets transmitted, 92 packets received, 8.0% packet loss
round-trip min/avg/max/stddev = 18.611/19.199/20.949/0.378 ms
スピードテスト¶
VDSLで本来、44Mbpsくらいなのですが、 delayいれない普通のBridgeにして44Mbpsでました。
まとめ¶
あくまで簡易的なネットワークエミュレータくらいならこれで十分。
応用¶
tc filterを知っていますか?ということで、特定のパケットだけ遅延をかけます。 この例では、片側のdst 4.3.2.1/32だけ100msの遅延を入れます。
tc qdisc add dev eth0 root netem delay 200ms 20ms distribution normal
tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 \
match ip dst 4.3.2.1/32 flowid 10:1
tc qdisc add dev eth1 root handle 1:0 netem delay 100ms
tc qdisc add dev eth1 parent 1:0 handle 10: tbf limit 15Kb buffer 10Kb/8 rate 1000Kbi