圧縮ありのscpが圧縮なしの場合よりも遅いのはなぜですか?


10

CentOS 6.5 VMのルートファイルシステムを格納している20 GBのKVM vdiskファイルをあるラボサーバーから別のラボサーバーに転送する必要がありました。ファイルサイズが大きいことと、このようなvdiskファイルを数百メガバイトに圧縮しscpたことがあるという事実により、本能的に圧縮を有効にできましたが、転送速度がやや遅いことに驚きました。そして、私が試したbzip2との組み合わせでsshcatして驚きました。ここでは、メソッドと平均スループットの概要を示します。

  • scp -C vm1-root.img root@192.168.161.62:/mnt/vdisks/、11 MB /秒。
  • bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"、5 MB /秒。このさらに低い結果は、ネットでの検索を促しました。
  • scp -c arcfour -C vm1-root.img root@192.168.161.62:/mnt/vdisks/、13 MB /秒。この-c arcfourasの使用は、serverfaultの1つの回答で提案されました。それはほとんど役に立ちませんでした。最後に、圧縮を無効にしました。
  • scp vm1-root.img root@192.168.161.62:/mnt/vdisks/、23 MB /秒。

圧縮はもっと速くなるべきではないのですか?

編集:質問が反対票を投じられた理由がわかりません。ここで学ぶべきことがあると思いました。

ssh(1)@svenからmanページのヒントを受け取った後、私は圧縮を含まないファイル転送のいくつかの代替方法を試しましたが、どちらもより良い結果が得られました。

  • cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"、26 MB /秒。

  • nc -l 5678 > /mnt/vdisks/vm1-root.imgレシーバーとnc 192.168.161.62 5678 < vm1-root.imgトランスミッターでは、40 MB /秒。ポート5678は、利用可能であった任意のポート です。

使用ncすることが最速のコピー方法であることが判明しました!

過去にscp -Cは、私が思ったときはいつでも非常にうまく機能していました。たとえば/var/log/messages*、サイズが数GBのsyslog()を転送する場合。数百KB /秒の非圧縮転送速度は、1〜2 MB /秒に増加します。この例は、manページで指摘されているように、低速接続の場合には当てはまります。

20 GBのパーティション用に新しく作成されたvdiskイメージの圧縮サイズが200 MBしかない場合があります。転送速度が約25 MB /秒の場合、13分以上ではなく8秒でコピーを実行できます。明らかに、scpこの場合、圧縮なしでは効率が悪く、scp -Cさらに悪い結果になります。

ここで学んだ主な教訓はscp -C、便利であると考えるべきだということです。ファイルを大幅に圧縮できる場合は、最初にソースで圧縮し、圧縮されたフォームを転送して、最後に宛先でdcompressを実行することをお勧めします。圧縮と解凍をすばやく行うツール(たとえば、pbzip2)は、さらに役立ちます。

回答:


9

引用man ssh(が使用するベースscp):

モデム回線やその他の低速接続では圧縮が望ましいですが、高速ネットワークでは速度が遅くなるだけです。

問題は、データを圧縮すると、ネットワーク経由で送信するよりも時間がかかることです。


彼は転送速度が低い理由を具体的に尋ねましたが、sshは実際に、データサイズを操作全体にかかる合計時間で割り、データを圧縮する部分とそれを介してデータをコピーする部分を分離せずにこれを計算していると思います通信網。
アーニー

@Ernie:20 MB /秒の速度でデータを送信でき、圧縮が非常に遅いためにシステムが15 MB /秒でしか配信できない場合、15 MB /秒でのみ送信されます。これですべてです。
スヴェン

@Ernie:によって印刷さscpれた転送速度には、圧縮/解凍に費やされた時間が含まれます。これが当てはまらない場合、報告された値は驚くべきものになります。
pdp 2015年

0

また、圧縮に加えて、ncも暗号化しないため、最高のレートを取得します。また、非可逆圧縮は、データの冗長セクションを見つけることに依存しています。ネットワークレベルで行うと、最大で[buffer-size]バイトを確認できます。最初にファイル全体を処理すると、[file-size]バイトになります。その範囲内で、重複するバイト文を探してクランチします。

また、ディスクイメージを移動する場合は、ntfsclone / partcloneなどのファイルシステム対応ツールを使用する必要があります。圧縮を行っても、割り当てられていないブロックをスキップするだけでは不十分なので、データを転送する必要がない場合、転送速度は無限です。また、Windowsパーティションのスワップファイルとハイバネーションファイルを破棄することを忘れないでください。そうしないと、ジャンクファイルを捨ててしまい、とにかく再作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.