scpが実際のアップロード速度を表示しないのはなぜですか?

scpが実際のアップロード速度を表示しないのはなぜですか?

scp遅いアップロード接続(〜100 kb / s)を使用してファイルをアップロードしようとするたびに、次の内容が表示されます。

test                           27% 2208KB   2.2MB/s   00:02 ETA

最初の瞬間に私は始めました。

明らかに2208 KBを送信せず、確かに2.2 MB / sで転送しません。数秒後に正しい速度で遅くなりますが、前の位置に戻りません。代わりに、転送が完了すると、転送が完了するまで数秒(または数分)停止します。 。本物完全な。

私はすべてのLinuxでscpを使用するたびに転送速度が1MB / s未満であることを発見しました。

SCPはどうなりましたか?

答え1

scpデータが通過する速度測定それ

デフォルトでは、scpディスクからいくつかのデータを読み込みますssh。その後、ssh暗号化されカーネルに渡され、ネットワーク経由で送信されます。このバッファはかなり大きくてもよい。

すべてのバッファリングはアプリケーションにかなり透過的です。writeパイプやソケットを呼び出すだけです。カーネルはデータを受け入れ、そのデータがバッファにあるのか、実際にリモート側で送信され承認されたのかをアプリケーションに示しません。アプリケーションが尋ねる方法があります。しかし、同じことが実際にソケットを使って行われるので、scpそうするのは難しいです。ssh

これにより、すべてのバッファ(主にTCP転送バッファ)の初期塗りつぶしが非常に速く発生し、scpがそれを転送速度で表示することがわかります。最後に、scpファイルの読み取りが完了し、sshパイプに送信された後にSSHが完了するのを待ちます。転送完了をssh確認し、カーネルがTCPバッファフラッシュを完了するのを待ちます。scpこれが最後の一時停止です。

私の考えでは、「無視」を除く唯一の2つの解決策は、より高速なリンクを取得するか、TCP転送バッファサイズを減らすことです。

関連情報