LAN経由でファイルをコピーする速度をテストしています。 1GBの/dev/urandomデータを生成し、1Gbpsネットワークを介して別のシステムにコピーしました。
rsync転送速度(-aオプションのみ)は約17 MB / sです。 -W を追加した rsync 転送速度は 110MB/s で安定しています。
私の特別なケースは、コピーする前に毎回ファイルを生成するので、ファイル全体をコピーしたいということです。 -aオプションがない場合、合計4つのコアのうちの1つの使用量が100%で表示されます。私の考えでは、rsyncが送信するデルタを計算するので、ボトルネックが発生しているようです。
質問:増分計算を「マルチコア」にすることは可能ですか?これでCPUの25%しか使用されません。
答え1
1つのファイルに対して帯域幅の最適化を取得できない場合、または計算に複数のコアを使用しない場合がありますが、より多くのファイル、特に何千ものファイルがあり、それらのいくつかを更新する必要がある場合は、次のようにxargsを使用できます。
ls /your/local/folder/ | xargs -n1 -P4 -I% rsync -Pa % ursrv.com:/remote/folder/
このコマンドラインはすべてのフォルダ/ファイルを一覧表示し、入力パラメータをフォルダまたはファイルとして使用して4つのrsyncインスタンスを実行します。これは直接的なマルチコアではありませんが、rsyncの複数のインスタンスを実行するので、確実にCPUをより効率的にロードできます。
答え2
最初に、ユーザーは単一ファイルそしてランダムデータソースサーバーから:
Delta Transfer はアルゴリズムを使用してあるコンピュータのファイルを更新し、他のリモートコンピュータのファイルと同じにします。このアルゴリズムは、ターゲットファイルの特定の部分と同じソースファイルの一部を識別し、この方法で一致しない部分のみを送信します。。実際、アルゴリズムは、同じシステム上に両方のファイルを置かずに差分セットを計算します。一般に、Delta Transferは、両方のシステムが低帯域幅、高レイテンシ通信リンクで接続されている場合、非常にうまく機能します。この場合、2つのシステム間の接続がシステム全体の主なボトルネックになります。リンクを介して送信されるバイト量を大幅に削減することで、運用効率が大幅に向上します。 -ソースはどこにでもあります
ユーザーはリモートサーバーにファイルなしで転送するため、ファイルが同期されていない状態にコピーされ、初期転送が--whole-file
より効率的になります。
-z
CPUサイクルをネットワークオーバーヘッドに置き換えるには、圧縮オプションを使用することをお勧めします。圧縮の種類とレベルも調整できます。
--compress-choice= |
--compress-level= |
---|---|
これが標準です | 0-9 |
lz4 | 0-9 |
zlibx | 0-9 |
宿 | 0-9 |
サポートされているファイルシステムでは、パブリックデータはユーザーのランダムデータとは異なり、スイッチを設定し、その後--sparse
のrsyncで--inplace
スイッチをwrite-in-placeに設定してスパースファイルとして保存できます。
スイッチを追加すると、--update
シンクの最新のファイルをスキップして無駄な書き込みを節約できます。
この--append
スイッチを使用すると、ユーザーはより短いファイルにデータを追加できます。
次の設定が役に立ちます。全体的な冗長さを高めます。テスト中:
--verbose, -v increase verbosity
--stats give some file-transfer stats
--human-readable, -h output numbers in a human-readable format
--progress show progress during transfer