paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

ダミーファイルとscpでNW速度を計測

今やってる案件で帯域制限を行うのですが、計測の試験をしなければいけません。
事前に家の環境で試験の練習をしようと思います。

環境

本番は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コマンドもダミーファイル作成はいいとして、本来の用途が良くわかりません。
調べる価値ありですね。

参考サイト

Linuxでサイズ指定してダミーファイルを作成する方法 - conf t

Man page of DD

Man page of FALLOCATE