Armadilloフォーラム

Armadilloで通信の帯域を制限した状態下での動作検証方法について

satoshi.sa.aoki

2023年8月30日 13時32分

お世話になっております。

Armadilloで通信の帯域を制限した状態下での動作検証を行うため、Armadilloにて低速の通信環境を再現しようと試みています。
その際、Armadilloログイン後にTeraTermで以下の tc コマンドによって帯域制限を行おうとしたところ、原因の特定できないエラーに遭遇しました。

具体的には以下のコマンドを入力すると、

sudo tc qdisc add dev wlan0 root handle 1:0 netem delay 100ms

下記のエラーメッセージのみが出力されます。

RTNETLINK answers: Operation not supported

こちらのwiki( https://wiki.debian.org/TrafficControl )を参考に、以下のコマンドを入力してパッケージをインストール後に再度実行してみましたが、全く同じエラーメッセージが出る結果となりました。

sudo apt-get install iproute2

`which tc` コマンドで確認したところ、tc コマンド自体は `usr/sbin/tc` に登録されており、コマンドの操作方法も以下のように確認できています。

tc -help
 
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
       tc [-force] -batch filename
where  OBJECT := { qdisc | class | filter | chain |
                   action | monitor | exec }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[aw] |
                    -o[neline] | -j[son] | -p[retty] | -c[olor]
                    -b[atch] [filename] | -n[etns] name |
                    -nm | -nam[es] | { -cf | -conf } path }

ただし help 以外の操作は一律で上記のエラーメッセージが表示され、実行ができない状態となっています。`qdisc` の箇所を他のOBJECTに変えても同様でした。

こちらの事象の原因として、何かしらの心当たりはございますでしょうか。
また、 tc コマンドを正常に扱うことのできる条件等をもしご存じであればご教授いただけないでしょうか。
その他、tcコマンド以外での実現方法などノウハウがございましたら合わせてご教授いただけますと幸いです。

ご確認の程、よろしくお願いいたします。

コメント

at_dominique.m…

2023年8月30日 14時08分

satoshi.sa.aokiさん

お世話になっています、
マルティネです。

> $ sudo tc qdisc add dev wlan0 root handle 1:0 netem delay 100ms
> RTNETLINK answers: Operation not supported

tc を使うにはカーネルに CONFIG_NET_SCHED を有効する必要があります。
また、netem も別の CONFIG_NET_SCH_NETEM で制御されています。

https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro… を参考にして、「3. コンフィギュレーション」の x1_defconfig の設定の後は「make ARCH=arm menuconfig」でメニューを開いて、設定してください。
そのメニューで「/」キーを使うと検索モードに入りますので、順番にNET_SCHED と NET_SCH_NETEM を検索して「y」キーで有効にしてから、コンフィグを保存してください。コンフィグ変更ができたら、「grep NET_SCHED .config」などで設定の確認ができます。

カーネルを入れ替えた後に tc を使えるようになると思いますが、最後まで確認してませんので何かあればまた聞いてください。

よろしくお願いします。

satoshi.sa.aoki

2023年9月1日 20時12分

お世話になっております。
ご回答ありがとうございます!

ATDE 環境にてご教授いただいた手順でカーネルの設定を変更し、その内容で生成した uImage と armadillo_iotg_g3_m1.dtb を使ってインストールディスクを作成し、 Armadillo へと適用しました。
しかしながら、上記を行っても `RTNETLINK answers: Operation not supported` が表示されてしまいました。
また、iproute2 を改めてインストールしてみましたが結果は変わりませんでした。

以下はその際に config ファイルに設定になります。

atmark@atde7:~/linux-4.9-x1-at30$ grep NET_SCH .config
CONFIG_NET_SCHED=y
# CONFIG_NET_SCH_CBQ is not set
CONFIG_NET_SCH_HTB=y
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFB is not set
CONFIG_NET_SCH_SFQ=y
# CONFIG_NET_SCH_TEQL is not set
CONFIG_NET_SCH_TBF=y
# CONFIG_NET_SCH_DSMARK is not set
CONFIG_NET_SCH_NETEM=y
# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_MQPRIO is not set
# CONFIG_NET_SCH_CHOKE is not set
# CONFIG_NET_SCH_QFQ is not set
# CONFIG_NET_SCH_CODEL is not set
# CONFIG_NET_SCH_FQ_CODEL is not set
# CONFIG_NET_SCH_FQ is not set
# CONFIG_NET_SCH_HHF is not set
# CONFIG_NET_SCH_PIE is not set
# CONFIG_NET_SCH_PLUG is not set
CONFIG_NET_SCH_FIFO=y

なおインストールディスク作成の際は、uImage と armadillo_iotg_g3_m1.dtb 以外は、前回問い合わせした際に利用していたビルドファイルと同一のものを使用しています。

この内容で不備があれば変更箇所をご教授いただけないでしょうか。
また、この内容に不備がない場合、tc コマンドが使用できない理由として何が考えられるでしょうか。

よろしくお願いいたします。

at_dominique.m…

2023年9月4日 9時53分

satoshi.sa.aokiさん

> この内容で不備があれば変更箇所をご教授いただけないでしょうか。
> また、この内容に不備がない場合、tc コマンドが使用できない理由として何が考えられるでしょうか。

そうですね、この内容であっていると思います。
こちらもただいま同じ .config の変更を試して、tc を無事に使えることができました。

root@armadillo:~# zcat /proc/config.gz | grep NET_SCH
CONFIG_NET_SCHED=y
# CONFIG_NET_SCH_CBQ is not set
CONFIG_NET_SCH_HTB=y
# CONFIG_NET_SCH_HFSC is not set
# CONFIG_NET_SCH_PRIO is not set
# CONFIG_NET_SCH_MULTIQ is not set
# CONFIG_NET_SCH_RED is not set
# CONFIG_NET_SCH_SFB is not set
CONFIG_NET_SCH_SFQ=y
# CONFIG_NET_SCH_TEQL is not set
CONFIG_NET_SCH_TBF=y
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
CONFIG_NET_SCH_NETEM=y
# CONFIG_NET_SCH_DRR is not set
# CONFIG_NET_SCH_MQPRIO is not set
# CONFIG_NET_SCH_CHOKE is not set
# CONFIG_NET_SCH_QFQ is not set
# CONFIG_NET_SCH_CODEL is not set
# CONFIG_NET_SCH_FQ_CODEL is not set
# CONFIG_NET_SCH_FQ is not set
# CONFIG_NET_SCH_HHF is not set
# CONFIG_NET_SCH_PIE is not set
# CONFIG_NET_SCH_PLUG is not set
CONFIG_NET_SCH_FIFO=y
root@armadillo:~# tc qdisc add dev wlan0 root handle 1:0 netem delay 100ms
root@armadillo:~# tc qdisc
qdisc noqueue 0: dev lo root refcnt 2 
qdisc mq 0: dev eth0 root 
qdisc pfifo_fast 0: dev eth0 parent :3 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth0 parent :2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth0 parent :1 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc netem 1: dev wlan0 root refcnt 5 limit 1000 delay 100.0ms

カーネルも同じ 4.9.133-at30 で試しています。

なので、疑っているわけではありませんがあらかじめカーネルの更新ができているかの確認をさせていただければ幸いです。
返事でビルドしたディレクトリの .config を grep して NET_SCHED などの設定を確認していましたが、今回は起動している Armadillo の /proc/config.gz で確認をお願いします:

root@armadillo:~# zcat /proc/config.gz | grep NET_SCH

そちらに設定がなければ違うイメージを起動している可能性がありますので、ご確認ください。
そちらも NET_SCHED 等が設定されている場合には別の設定が足りない可能性もありますので、同じ「tc qdisc add dev wlan0 root handle 1:0 netem delay 100ms」で発生していることに間違いなければもう少し確認します。

よろしくお願いします。

satoshi.sa.aoki

2023年9月20日 13時07分

お世話になっております。
遅くなりましたが、上記ご教授頂いた手順にてtcコマンドでの帯域制限が確認できました。
ご回答ありがとうございました。