SSHの速度を測定しようと思い立った。
なんかネットワークが遅いので、SSHでの速度測定をしてみることに。
速度測定するコマンド
ファイルの準備
dd if=/dev/urandom of=test.img bs=1k count=1000000
転送
cat test.img | ssh host.tld 'dd of=/dev/null '
ssh でパイプする
ssh でパイプするとファイル転送ができる。
cat test.img | ssh host ' cat - > test.img'
dd は of だけ指定すると標準入力
dd は if / of で指定するけど、標準入力からもととれる。
実際にやってみた例
takuya@:Desktop$ dd if=/dev/urandom of=test.img bs=1k count=1000000 1000000+0 レコード入力 1000000+0 レコード出力 1024000000 bytes (1.0 GB, 977 MiB) copied, 39.8002 s, 25.7 MB/s takuya@:Desktop$ cat test.img | ssh myhost 'dd of=/dev/null ' sign_and_send_pubkey: signing failed: agent refused operation 2000000+0 レコード入力 2000000+0 レコード出力 1024000000 bytes (1.0 GB, 977 MiB) copied, 9.16781 s, 112 MB/s
ファイル書き込みがボトルネックになっていないか
先程の例は、純粋にネットワーク速度に近いものが出ているはず。ファイルに書き込んでみたいと思う
この場合は、ファイルIOがメモリキャッシュされないように結構な量を書き込む必要がある。たぶん3GBくらい
SSD 相手に書き込んだとき
takuya@:Desktop$ cat test.img test.img test.img | ssh host.tld ' dd of=test.img' sign_and_send_pubkey: signing failed: agent refused operation 6000000+0 レコード入力 6000000+0 レコード出力 3072000000 bytes (3.1 GB, 2.9 GiB) copied, 30.6751 s, 100 MB/s
HDDを相手に書き込んだとき
takuya@:Desktop$ cat test.img test.img test.img | ssh host.tld ' dd of=./mount/96.作業用/test.img' sign_and_send_pubkey: signing failed: agent refused operation 6000000+0 レコード入力 6000000+0 レコード出力 3072000000 bytes (3.1 GB, 2.9 GiB) copied, 35.9622 s, 85.4 MB/s
メモリキャッシュがきいてる気もする。が、まぁ実際に使ってる速度に近い測定結果ナノではないでしょうか。
あくまで概算
ssh は圧縮されたりするので、本当のネットワークの速度よりも若干高くなる。 /dev/urandom を使うことで圧縮されないようにはしてるけど。
我が家の環境では 111 MB/s でているようである。
ところが、Samba経由したり WebDAV 経由すると 3MB/s くらいしかでない。こまった。
curl でもできる
curl を使ってもできる
これはSFTPで速度測定になる。
takuya@:~$ curl sftp://192.168.11.125/home/takuya/test.img > /dev/null % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2929M 100 2929M 0 0 42.3M 0 0:01:09 0:01:09 --:--:-- 44.0M 100 2929M 100 2929M 0 0 42.3M 0 0:01:09 0:01:09 --:--:-- 42.3M
/dev/urandom の速度
ちなみに、/dev/uramdom でdd したときの速度が 25MB/s 程度のCPUで測定しました