SVX日記
2024-08-16(Fri) 測れ帯域・USBイーサたちの競演
実際にブリッジまで組んでみたものの、なぜか仕事PCにIPアドレスが付かないために通信ができない。ブリッジを挟んだってサブネット(172.28.0.0/16)は同じなんだから、既存のLinuxルータのDHCPからIPを振られることを期待してたんだが、なんでや? ……と、思ったが、ブリッジはブロードキャストを通さないのであった。DHCPはクライアントがブロードキャストで「オレのIPくれ〜」と叫ぶのが始まりであるから、それがLinuxルータまで届かなければ、そら付かん。
# dnf install dhcp-relay
# cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/
# vi /etc/systemd/system/dhcrelay.service
# diff /usr/lib/systemd/system/dhcrelay.service /etc/systemd/system/dhcrelay.service
< ExecStart=/usr/sbin/dhcrelay -d --no-pid
> ExecStart=/usr/sbin/dhcrelay -d --no-pid 172.28.0.1
# systemctl daemon-reload
# systemctl start dhcrelay
# systemctl status dhcrelay
# systemctl enable dhcrelay
どうやって情報を見つけたのか忘れたが、Linuxのブリッジにはなぜか「iptablesを通す(→結果、捨てられる)」という仕組みがあるらしい。セキュリティレベル強化の一環なのだろうが、機能の積み重ね(レイヤ)的におかしなことになっていないか、それは? 基本レイヤ3を扱い、ルータのレイヤに居る「ip」tablesなのだよね。まぁ、理屈は置いといて、その動作は以下で解除できるらしい。
# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
# echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
# cat /proc/sys/net/bridge/bridge-nf-call-iptables
0
# sysctl -p /etc/sysctl.d/50-bridge-nf-call.conf
# vi /etc/sysctl.d/50-bridge-nf-call.conf
# cat /etc/sysctl.d/50-bridge-nf-call.conf
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
無事、通信ができるようになった……と、ここで気づいたのだが、さっきの「dhcp-relay」って必要だったのか? ホントに「ブリッジはブロードキャストを通さない」んだっけ? と思って、改めて調べたら、ブロードキャストを通さないのはルータだ。ブリッジはブロードキャストを通す。「MACを学習して必要のないパケットをフィルタする」というブリッジ/スイッチの特性と混同していたようだ。
「dhcp-relay」はサブネットが異なる(ルータの先の)場所にDHCPサーバが置けるようにすることで、DHCPサーバを集約するためのものだ。「dhcp-relay」を落とした後も、仕事PCへのIPアドレスの付与に影響はなかった。「dhcp-relay」で改善したのも確かっぽいが、真の原因はブリッジがiptablesを通していたこと。ま、試行錯誤する中ではよくあることよ。
# dstat 1
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
4 3 89 0 0| 0 140k| 0 0 | 0 0 |8856 13k
3 2 93 0 0| 0 381k| 10k 12k| 0 0 |4999 6892
4 2 91 0 0| 0 384k| 33k 8780 | 0 0 |6221 8058
28 11 57 0 0| 0 0 | 206M 1409k| 0 0 | 59k 24k
27 11 58 0 0| 0 0 | 211M 1278k| 0 0 | 60k 24k
20 10 66 0 0| 0 0 | 118M 47M| 0 0 | 42k 21k
23 10 61 0 0| 0 4093B| 406k 239M| 0 0 | 22k 20k
25 11 59 0 0| 0 0 | 432k 240M| 0 0 | 22k 20k
23 10 60 0 0| 0 40k| 405k 235M| 0 0 | 22k 20k
24 10 59 0 0| 0 0 | 412k 238M| 0 0 | 22k 20k
23 11 59 0 0| 0 152k| 377k 238M| 0 0 | 22k 21k
20 10 63 0 0| 0 0 | 397k 217M| 0 0 | 21k 19k
22 11 61 0 0| 0 40k| 469k 217M| 0 0 | 21k 19k
20 10 64 0 0| 0 0 | 403k 232M| 0 0 | 21k 20k
27 13 54 0 0| 0 0 | 470k 236M| 0 0 | 22k 21k
17 8 70 0 0| 0 56k| 268k 136M| 0 0 | 16k 16k
6 3 89 0 0| 0 56k| 18k 9246 | 0 0 |7390 9949
4 2 92 0 0| 0 104k| 110 70 | 0 0 |5797 8192
3 2 93 0 0| 0 0 | 236 654 | 0 0 |4232 5827
recvが200M前後、sendが220M前後。前に書いた時はenp2s0とppp0との二重計上だったが、今回はenp3s0f0とbridge0とで二重計上されている。2で割ると、200Mなら100Mで800Mbps、220Mなら110Mで880Mbpsなのでだいたい合っている。usrが20%、sysが10%というCPU使用率も着目点だ。スピードテストはhttps/tcp通信っぽいが、十分に余裕があるといえよう。
# dstat 1
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
11 4 78 4 0| 0 100k| 386B 66B| 0 0 |2345 5408
13 5 77 2 0| 0 0 | 326B 66B| 0 0 |2716 7648
10 4 82 3 0| 0 0 | 386B 66B| 0 0 |2219 5155
30 13 55 1 0| 0 0 | 37M 96k| 0 0 | 19k 9051
28 24 45 2 0| 0 0 | 106M 183k| 0 0 | 46k 12k
27 23 48 1 0| 0 0 | 106M 184k| 0 0 | 46k 12k
25 18 54 2 0| 0 0 | 65M 12M| 0 0 | 37k 12k
25 13 61 1 0| 0 0 | 289k 110M| 0 0 | 71k 11k
24 11 62 2 0| 128k 140k| 316k 110M| 0 0 | 70k 10k
26 10 62 1 0| 0 0 | 309k 111M| 0 0 | 70k 10k
24 11 63 1 0| 0 0 | 312k 109M| 0 0 | 69k 10k
24 11 62 1 0| 0 0 | 322k 110M| 0 0 | 70k 10k
25 12 61 1 0| 0 0 | 327k 110M| 0 0 | 69k 10k
25 13 62 2 0| 0 0 | 351k 110M| 0 0 | 69k 11k
23 11 62 2 0| 0 60k| 309k 109M| 0 0 | 69k 10k
24 11 62 2 0| 0 0 | 294k 110M| 0 0 | 70k 11k
23 9 64 2 0| 0 16k| 294k 110M| 0 0 | 70k 10k
23 5 68 1 0| 0 0 | 60k 21M| 0 0 | 17k 7024
13 4 79 2 0| 0 0 | 326B 66B| 0 0 |2535 5668
18 6 73 2 0| 0 0 | 803B 2957B| 0 0 |3026 5645
10 4 83 3 0| 0 0 | 326B 66B| 0 0 |2197 4736
こっちに二重計上はない。recvが105M前後で840Mbps、sendが110M前後で880Mbpsなのでだいたい合っている。主力PCのそれよりもusrとsysはわずかに高いが、N100のCPU性能がわずかに低いということだ。とはいえ、こちらも十分に余裕があるといえよう。
中継をしているのでrecvとsendの両方に値が出ている。中継はカーネルの処理なのでsysが上がるかと思ったが、usrが上がるようだ。とはいえ、中継するだけの場合は、httpsの処理も、tcpの処理もないので、たいして上がることはない。
# dstat 1
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
1 1 97 0 0| 0 0 | 214 728 | 0 0 |1991 2843
1 1 97 0 0| 0 72k| 108 660 | 0 0 |2249 3181
1 1 97 0 0| 0 0 | 23k 21k| 0 0 |2524 3436
12 1 83 0 0| 0 0 | 105M 106M| 0 0 | 61k 5648
10 1 80 0 0| 0 459k| 112M 112M| 0 0 | 56k 5686
13 1 82 0 0| 0 0 | 111M 112M| 0 0 | 65k 5884
12 3 80 1 0| 0 2216k| 83M 83M| 0 0 | 25k 9690
7 1 82 0 0| 0 204k| 115M 117M| 0 0 | 28k 5127
7 1 83 0 0| 0 0 | 116M 117M| 0 0 | 28k 5053
6 1 83 0 0| 0 0 | 115M 116M| 0 0 | 28k 5260
10 2 78 0 0| 0 12k| 115M 117M| 0 0 | 31k 9722
7 1 83 0 0| 0 0 | 116M 117M| 0 0 | 28k 4925
7 0 83 0 0| 0 0 | 116M 117M| 0 0 | 29k 5037
6 1 83 0 0| 0 92k| 114M 116M| 0 0 | 28k 5648
6 0 84 0 0| 0 0 | 116M 117M| 0 0 | 27k 4842
5 1 84 0 0| 0 0 | 115M 117M| 0 0 | 27k 4545
3 0 90 0 0| 0 16k| 68M 70M| 0 0 | 17k 4062
1 1 97 0 0| 0 0 | 10k 6306 | 0 0 |2274 3165
1 1 98 0 0| 0 0 | 108 660 | 0 0 |2094 3088
1 1 97 0 0| 0 0 |3539 4139 | 0 0 |2362 3421
さらにオモシロ実験。先に「手元には100MbpsのUSBイーサしかない」と書いたが、実はもうひとつ「LUA-KTX」という100MbpsだがUSB1.1という珍妙なUSBイーサも手元にある。差込口の形状がちょっとカッコイイ。この際だ。全部いっぺんに挿して、全部ブリッジにしちゃって、スピードテストをしてみよう。LANの口が4つて、そりゃもうルータやがな。
まずは「USB-LAN100R」という100Mbpsのイーサ。結果は「下り91.6Mbps, 上り92.8Mbps」。LANの速度である100Mbpsが理論値になるから、その9割チョイというのは妥当だ。
$ dstat 1
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
23 7 67 2 0| 0 189k| 150B 132B| 0 0 |3680 7029
18 4 74 2 0| 0 24k|8262B 12k| 0 0 |3122 6281
32 10 54 1 0| 0 0 |8876k 140k| 0 0 | 20k 14k
24 10 61 2 0| 0 568k| 12M 122k| 0 0 | 25k 13k
24 11 61 2 0| 0 160k| 12M 97k| 0 0 | 24k 9948
22 11 63 2 0| 0 112k| 12M 116k| 0 0 | 24k 10k
23 11 63 2 0| 0 80k| 12M 128k| 0 0 | 24k 12k
25 11 61 1 0| 128k 0 | 12M 163k| 0 0 | 25k 15k
22 11 63 2 0| 0 0 | 12M 155k| 0 0 | 25k 15k
20 10 65 2 0| 0 0 | 12M 105k| 0 0 | 24k 11k
21 10 62 2 0| 0 112k| 12M 154k| 0 0 | 24k 14k
21 10 67 2 0| 0 0 | 12M 83k| 0 0 | 23k 9188
22 10 64 2 0| 64k 0 |5602k 1651k| 0 0 | 15k 13k
20 10 67 2 0| 0 0 | 70k 12M| 0 0 | 15k 9059
19 7 70 2 0| 0 0 | 72k 12M| 0 0 | 14k 8815
20 8 68 2 0| 0 100k| 71k 12M| 0 0 | 14k 8906
19 8 69 2 0| 0 192k| 73k 12M| 0 0 | 14k 8677
19 7 71 2 0| 0 0 | 72k 12M| 0 0 | 14k 8621
19 8 69 1 0| 0 0 | 70k 12M| 0 0 | 14k 8666
20 7 70 2 0| 0 0 | 76k 12M| 0 0 | 14k 8834
19 6 71 2 0| 0 0 | 68k 12M| 0 0 | 14k 8618
19 6 71 2 0| 0 0 | 67k 12M| 0 0 | 14k 8803
20 7 69 3 0| 0 32k| 71k 12M| 0 0 | 14k 8345
18 6 73 2 0| 0 0 | 65k 12M| 0 0 | 14k 7699
18 6 73 2 0| 0 0 | 68k 12M| 0 0 | 14k 7552
18 6 72 2 0| 0 0 | 68k 12M| 0 0 | 14k 7671
18 6 73 2 0| 0 0 | 67k 12M| 0 0 | 14k 7530
20 7 70 2 0| 0 40k| 55k 9391k| 0 0 | 12k 7368
21 5 71 2 0| 128k 0 | 804B 0 | 0 0 |3045 5925
13 4 80 1 0| 0 60k| 180B 0 | 0 0 |2279 5453
最後に「LUA-KTX」という100MbpsのイーサだがUSB1.1というもの。結果は「下り6.76Mbps, 上り7.62Mbps」。100Mbpsどころか10Mbpsにすら達していない。これはUSB1.1の上限が12Mbpsであることによるもの。
12Mbpsなら10Mbps以上は出てもいいと思うかもしれないが、それはUSB通信が半二重モードであるため、受取り確認(ACK)などの逆方向の通信で消費されているためだと推測する。それでも、半分(6Mbps)以上は出ているんだから、そんなもんなんだろう。とはいえ、端末作業やブラウザで探しモノする分には十分な速度だ。ADSLを思い出せば、だいぶ速い方だよね?
$ dstat 1
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
28 6 63 2 0| 0 0 | 0 0 | 0 0 |3186 6450
16 5 75 2 0| 0 0 | 0 0 | 0 0 |2783 6073
9 4 84 2 0| 0 0 | 0 0 | 0 0 |2053 4456
29 7 60 2 0| 0 76k| 174k 22k| 0 0 |4406 7780
24 6 66 1 0| 0 0 | 877k 41k| 0 0 |6371 8781
17 7 72 2 0| 0 0 | 872k 41k| 0 0 |6156 8867
16 7 73 2 0| 0 0 | 875k 38k| 0 0 |6014 9115
18 6 73 2 0| 0 0 | 870k 45k| 0 0 |6202 8721
17 7 70 3 0| 0 268k| 876k 37k| 0 0 |6081 9099
18 5 73 2 0| 0 0 | 878k 37k| 0 0 |6027 9076
17 6 73 2 0| 0 0 | 873k 43k| 0 0 |6086 8812
18 6 74 1 0| 0 0 | 872k 45k| 0 0 |6114 8808
17 6 73 1 0| 0 0 | 872k 43k| 0 0 |6088 8923
16 6 71 3 0| 0 160k| 799k 36k| 0 0 |5790 8879
17 7 72 2 0| 0 4097B| 857k 37k| 0 0 |5928 9079
18 6 72 2 0| 0 0 | 872k 43k| 0 0 |6237 9042
19 6 71 2 0| 0 0 | 234k 725k| 0 0 |5257 9144
18 6 72 2 0| 0 0 | 19k 991k| 0 0 |4632 8649
17 6 73 2 0| 0 0 | 20k 979k| 0 0 |4618 8607
17 6 73 2 0| 0 0 | 21k 986k| 0 0 |4539 8628
18 6 71 3 0| 0 12k| 21k 980k| 0 0 |4580 8440
16 6 74 2 0| 0 0 | 19k 984k| 0 0 |4605 8663
18 5 74 2 0| 0 0 | 23k 985k| 0 0 |4555 8589
17 6 74 2 0| 0 0 | 21k 977k| 0 0 |4552 8539
17 6 74 2 0| 0 0 | 19k 984k| 0 0 |4505 8515
17 7 73 2 0| 0 0 | 22k 986k| 0 0 |4639 8497
16 6 74 2 0| 0 0 | 24k 983k| 0 0 |4266 7642
17 5 74 2 0| 0 0 | 17k 986k| 0 0 |4183 7428
17 6 75 2 0| 0 0 | 16k 986k| 0 0 |4106 7359
15 5 74 2 0| 0 0 | 16k 994k| 0 0 |4296 7696
17 5 75 2 0| 0 0 | 16k 984k| 0 0 |4070 7295
22 6 69 2 0| 0 0 |6947B 309k| 0 0 |3674 6804
12 3 80 2 0| 0 0 | 0 0 | 0 0 |2376 4758
13 5 79 2 0| 0 0 | 60B 42B| 0 0 |2448 5640
16 5 76 2 0| 0 0 |3499B 6017B| 0 0 |2898 5357