実現したいこと
回線遅延の状態をエミュレートしたく、Raspberry Pi 3 Model B上でtcコマンドを用いてネットワーク遅延を疑似的に発生させたい
聞きたいこと
- tcコマンドの使い方
- tcコマンド利用にあたり、パーミッションの設定、有効化等、何か必要な手順があるのか
試したこと
- 200msの遅延を発生させようとした
sudo tc qdisc add dev eth0 root netem delay 200ms
しかし、いくつかの宛先にpingを打ってRTTを計測したところ、値は反映されていませんでした
※なお、以下の通り確認したところ、設定上では、値が反映されているようでした
$ sudo tc qdisc show dev eth0 qdisc netem 8005: root refcnt 2 limit 1000 delay 200.0ms
備考
以下、使用環境(Debianのバージョン)です。
$ cat /etc/debian_version 8.0
ご教示頂きたく、お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
tc
コマンドは、LinuxカーネルのTraffic control
と言う機能を利用しているようで、raspberry piのLinuxカーネルをビルドしたときのカーネルコンフィグレーションの設定次第で、使えたり使えなかったりしそうです。
Tc is used to configure Traffic Control in the Linux kernel. Traffic Control consists of the following:
質問者さんと同じ環境ではないですが、私の持っているRaspberry Pi Model B では動作しました。
sh
1pi@raspberrypi ~ $ uname -a 2Linux raspberrypi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux 3pi@raspberrypi ~ $ cat /etc/debian_version 47.11 5pi@raspberrypi ~ $ cat /etc/issue 6Raspbian GNU/Linux 7 \n \l 7 8# 何もしていない状態でping 9ping -c 3 h5 http:www.google.com 10PING www.google.com (216.58.197.228) 56(84) bytes of data. 1164 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=1 ttl=54 time=4.41 ms 1264 bytes from nrt13s49-in-f4.1e100.net (216.58.197.228): icmp_req=2 ttl=54 time=4.48 ms 1364 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=3 ttl=54 time=4.36 ms 1464 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=4 ttl=54 time=4.54 ms 1564 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=5 ttl=54 time=4.58 ms 16 17--- www.google.com ping statistics --- 185 packets transmitted, 5 received, 0% packet loss, time 4006ms 19rtt min/avg/max/mdev = 4.364/4.479/4.585/0.100 ms 20 21# 400m秒の遅延をセット 22pi@raspberrypi ~ $ sudo tc qdisc add dev eth0 root netem delay 400ms 23pi@raspberrypi ~ $ ping -c 5 www.google.com 24PING www.google.com (216.58.197.228) 56(84) bytes of data. 2564 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=1 ttl=54 time=404 ms 2664 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=2 ttl=54 time=404 ms 2764 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=3 ttl=54 time=404 ms 2864 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=4 ttl=54 time=404 ms 2964 bytes from nrt13s49-in-f4.1e100.net (216.58.197.228): icmp_req=5 ttl=54 time=404 ms 30 31--- www.google.com ping statistics --- 325 packets transmitted, 5 received, 0% packet loss, time 3999ms 33rtt min/avg/max/mdev = 404.265/404.354/404.452/0.573 ms 34 35# 400m秒の遅延を解除 36pi@raspberrypi ~ $ sudo tc qdisc del dev eth0 root 37 38# 再度試す。(元に戻っている) 39pi@raspberrypi ~ $ ping -c 5 www.google.com 40PING www.google.com (172.217.161.68) 56(84) bytes of data. 4164 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=1 ttl=54 time=4.32 ms 4264 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=2 ttl=54 time=4.29 ms 4364 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=3 ttl=54 time=4.26 ms 4464 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=4 ttl=54 time=4.42 ms 4564 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=5 ttl=54 time=4.30 ms 46 47--- www.google.com ping statistics --- 485 packets transmitted, 5 received, 0% packet loss, time 4007ms 49rtt min/avg/max/mdev = 4.269/4.322/4.425/0.079 ms 50pi@raspberrypi ~ $
LinuxカーネルのTraffic control
に関するコンフィグレーションですが、以下の記事によると
How to configure the Linux kernel/net/sched
Option: NET_CLS_ACT
Kernel Versions: 2.6.15.6 ...
(on/off) Actions
depends on EXPERIMENTAL
select NET_ESTIMATOR
Say Y here if you want to use traffic control actions. Actions get attached to classifiers and are invoked after a successful classification. They are used to overwrite the classification result, instantly drop or redirect packets, etc.
A recent version of the iproute2 package is required to use extended matches.
あたりがそれっぽそうです。(※あくまで私の思うところの「それっぽい」なので、ご注意ください)
実際に今、動いているLinuxカーネルにそれが当たっているかは、以下の記事をみると、modprob configs
で情報が得られるようです。
How to get a Kernel .config file from a Pi(b) - www.raspberrypi.org
この方法で確認してみたところ、確かに(私のラズパイLinuxカーネルでは)カーネルに組み込まれていました。
sh
1pi@raspberrypi ~ $ sudo modprobe configs 2 3pi@raspberrypi ~ $ zcat /proc/config.gz > kernel.config 4 5pi@raspberrypi ~ $ grep "NET_CLS_ACT" kernel.config 6CONFIG_NET_CLS_ACT=y 7 8pi@raspberrypi ~ $
質問者さんのケースでは、組み込まれていない場合にtc
コマンド実行時にエラーになっても良さそうなものですが、そのあたりの事情は分かりません。カーネルコンフィグレーションが私と同等だったのであれば原因はまた別のところにあるでしょうし、同じでなかったならば、ご自分でLinuxカーネルのリビルドをする必要があるかもしれません。そもそも、上記が絶対に関係しているとは限りませんが、以上、ご参考までの回答でした。
投稿2019/11/15 02:39
総合スコア9256
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/15 23:31
2019/11/15 23:53
2019/11/16 05:18
2019/11/16 05:51