今やってる案件で帯域制限を行うのですが、計測の試験をしなければいけません。
事前に家の環境で試験の練習をしようと思います。
環境
本番はLinuxサーバなので家でもLinuxでやります。
Windows上のWSL(Ubuntu)から物理のUbuntuへ転送します。
家の構成は以下です。
[WSL Ubuntu] -- [RT] -- [Ubuntu]
簡単な構成です。
家では特にNWの制限は行っていません。
WSL
昔作ったWSL1の環境のままです。 ubuntuも16と古いですね。
masashi@DESKTOP-986MNSO:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial
WSL上からではインターフェース速度が見えませんでした。
masashi@DESKTOP-986MNSO:~$ ip a 15: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 group default qlen 1 link/ether 6c:62:6d:e9:5f:5f inet 192.168.0.23/24 brd 192.168.0.255 scope global dynamic valid_lft 3596sec preferred_lft 3596sec inet6 fe80::9a7:f03b:74e7:e259/64 scope link dynamic valid_lft forever preferred_lft forever 1: lo: <LOOPBACK,UP> mtu 1500 group default qlen 1 link/loopback 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope global dynamic valid_lft forever preferred_lft forever inet6 ::1/128 scope host dynamic valid_lft forever preferred_lft forever masashi@DESKTOP-986MNSO:~$ masashi@DESKTOP-986MNSO:~$ ethtool eth0 Settings for eth0: Cannot get device settings: Invalid argument Cannot get wake-on-lan settings: Invalid argument Cannot get message level: Invalid argument Cannot get link status: Invalid argument No data available
ホスト側で確認すると100Mでした。
アダプタ名にGbEってあるのに何故か100Mになります。
RT側のインターフェースが一部100Mなのでしょうか。
まあこのままでいきます。
PS C:\Users\tsuru> get-netadapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- イーサネット Realtek PCIe GbE Family Controller 15 Up 6C-62-6D-E9-5F-5F 100 Mbps
Ubuntu
こっちはデスクトップのUbuntu20です。
masashi@PC-ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal
100Mに引っ張られるので有効ではないですが、こっちは1G出てますね。
masashi@PC-ubuntu:~$ sudo ethtool enp2s0 | grep -A1 Speed: Speed: 1000Mb/s Duplex: Full
ダミーファイル作成
WSL Ubuntuでダミーファイルを作成します。
よくあるddコマンドを使います。
転送速度の計測にはある程度のサイズが必要なので今回は1G作成します。
masashi@DESKTOP-986MNSO:~$ dd if=/dev/zero of=dummyfile bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.35842 s, 772 MB/s masashi@DESKTOP-986MNSO:~$ ls -l dummyfile -rw-r--r-- 1 masashi masashi 1048576000 Jun 6 15:14 dummyfile
速度計測
ファイル転送速度の計測ですが、scpを使います。
サーバにはsshを入れるし、scpは転送速度が表示されるのでちょうどいいですね。
iperfも有名ですが、別途インストールが必要なので今回は行いません。
早速実行してみます。
masashi@DESKTOP-986MNSO:~$ scp dummyfile masashi@192.168.0.10:/home/masashi/ masashi@192.168.0.10's password: dummyfile 100% 1000MB 11.2MB/s 01:29
転送速度は11.2MByte/秒でした。
本番ではここが実際の絞った値になっていればOKですね。
送信側が100Mインターフェースですが、bit計算なのでbyteに直すと
1000000 / 8 = 125000
で毎秒12.5MByte送信できる計算になります。
11.2はいちおう近似値でOKかな…
まとめ
速度計測用のファイル作成とscpでの速度確認でした。
この手の記事はネットに転がっているので改めてやることも無かった気がしますが、
自分用メモで置いておきます。
おまけ
ダミーファイル作成はddコマンドを使いましたがfallocateコマンドでも作成できるようです。
こちらのコマンドはディスク領域を予約するのみでIOが発生しないそうなので作成が早いです。
1G指定でもブロックサイズの都合もありちょっとずれますね。
masashi@DESKTOP-986MNSO:~$ fallocate -l 1g dummyfile2 masashi@DESKTOP-986MNSO:~$ ls -l dummyfile* -rw-r--r-- 1 masashi masashi 1048576000 Jun 6 15:14 dummyfile -rw-r--r-- 1 masashi masashi 1073741824 Jun 6 17:05 dummyfile2
領域予約で作ったファイルだと計測が本来の値からずれそうなので上記の検証には使いませんでしたが、計測してみると同じ結果になりました。
マニュアル見たらfallocateも0埋めをしているようです。
ddも/dev/zeroから作ったので同じ様なものが作成されたのでしょうか?
masashi@DESKTOP-986MNSO:~$ scp dummyfile2 masashi@192.168.0.10:/home/masashi/ masashi@192.168.0.10's password: dummyfile2 100% 1024MB 11.3MB/s 01:31
fallocateコマンドもダミーファイル作成はいいとして、本来の用途が良くわかりません。
調べる価値ありですね。