iPerfでネットワーク経由でのファイルコピーの速度を確認。

目的

ネットワーク経由でクライアントPCのバックアップを取りたい時に、
転送速度がとても遅いのを改善したい。
そのためにボトルネックがLANポート周りであることを確認したい。
(どこかのサイトの情報を見て、LANポートがボトルネックだろうとは思ったけど、実際そうなのか確認したい)

ネットワーク経由でのファイルコピーの速度を求める

【 サーバ側 】

> iperf -s -p ポート番号

【 クライアント側 】
> iperf -c サーバのIpアドレス -p ポート番号 -i 1 -t 30000

これでネットワーク経由でファイルをコピーしている時の
おおまかな速度が「Transfer」として表示される。

考え

TCP/IPの実効速度は、理論値の約7割出れば良いらしい。
1000BASE-Tの理論値は1000Mbpsなので、
(1000 / 8 = 125MByte/sec と計算すると)
125MByte/secが理論値になる。
なので、実効速度は87.5MByte/sec出れば良さそう、と目安にする。
(125MByte/sec * 0.7 = 87.5MByte/sec)

下記の結果を見ると、1対1での通信では普通レベルの速度は出ていると思っている。
もしかするとちょっと遅いかもだけど、テスト環境としてはとりあえず問題無いレベル、なはず。

実際に試したこと

サーバでPowerShellを複数個起動して、
それぞれ別のポート番号でiPerfを起動して試すと次のような結果になった。
(LANポートは全て1000BASE-Tで、各PCにLANポートは1個のみ)

サーバ1台に対してクライアント1台で行うと、Transferの値は約70MB/secだった。
サーバ1台に対してクライアント2台で行うと、Transferの値は平均すると約55MB/secだった。
サーバ1台に対してクライアント3台で行うと、Transferの値は平均すると約37MB/secだった。
サーバ1台に対してクライアント4台で行うと、Transferの値は平均すると約26MB/secだった。
サーバ1台に対してクライアント5台で行うと、Transferの値は平均すると約20MB/secだった。
(これらの値は記録したものを平均したのではなく、目視でパッと出したもの)

上記のサーバ1台 + クライアント5台の状態で、
クライアント1台(Aとする)で新たにPowerShellを起動して
iPerfをサーバモードで起動し、
別のクライアント1台(Bとする)からクライアントとして接続してみると、
次の結果になった。

AのサーバモードiPerfのTransferは約39MB/sec。
AのクライアントモードのiPerfのTransferはほぼ変化無し。

Bのサーバに対して接続しているiPerfのTransferは約10MB/secに下がった。
BのAに対して接続しているiPerfのTransferは約39MB/sec。

BがAにもiPerfで接続すると、サーバのTransferはBが下がり、
その分他のクライアントの速度があがった。

まとめ

サーバのLANポート周りがボトルネックとなっているため、
サーバに対してクライアント5台が接続すると、
Transferの値は約20MB/secまで下がっていると思われる。

ちなみに、手持ちのHDDとSSDの転送速度をCrystalDiskMarkで測定すると、
(全てシーケンシャルの値)
HDD(Read):80MB/sec
HDD(Write):65MB/sec
SSD(SATA)(Read):562MB/sec
SSD(SATA)(Write):520MB/sec
SSD(M.2)(Read):2910MB/sec
SSD(M.2)(Write):1240MB/sec
だったので、今回の自分の状況だとSSDを使った場合は
LANポート周りがボトルネックになるって結論になった。