rsyncスレッドが複数ある理由は何ですか?

rsyncスレッドが複数ある理由は何ですか?

単一の rsyncプログラムを使用してファイルシステムをバックアップします。

これにより、ps4つのスレッドまたはプロセスがあることがわかりましたrsync。 2つはR状態(実行中)で、2つはS状態(中断?)です。

$ ps aux | grep rsync
root     14144  0.0  0.0   6008  1868 pts/1    S+   03:16   0:00 sudo rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14145 47.2  0.5  62424 46108 pts/1    R+   03:16 226:44 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14146  0.6  0.2  80052 20584 pts/1    S+   03:16   2:59 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
root     14147 11.4  0.2  49324 20264 pts/1    S+   03:16  55:02 rsync -azvv /windows-d/ ./2015.03.07_03:16:05/
ting     16986  0.0  0.0   4392   820 pts/4    S+   11:16   0:00 grep --color=auto rsync

これにより、3つのプロセスまたはスレッドがpstreeあることがわかりました。rsync

$ pstree | grep rsync
     |                |-bash---sudo---rsync---rsync---rsync

rsync複数のスレッドまたはプロセスがあり、1つのプログラムのみを実行するのはなぜですか?

stdout出力から複数のファイルを並列にストリーミングしているようではありません(追加の努力のように見えますか?同時/同時ファイル転送でrsync速度を向上)?

dir1しかし、宛先を確認したところ、送信されたファイルの全部ではなく一部のみを含む一部のディレクトリ(例:)があることがわかり、rsyncstdoutの出力ではファイルを別のディレクトリ(例:dir2以下を含むディレクトリ)に転送していると述べました。同じ親ディレクトリdir1)。後でstdoutに出力して、ファイルdir1全体ではなく一部のファイルが転送されたディレクトリ(たとえば)の残りのファイルを転送することを示します。

答え1

rsync プログラムは、以下を含む多くの作業を行う必要があります。

  • リモートサーバーと同期していないファイルを探す
  • どの部分を移動するかを決める
  • 「反対側」を更新できるようにデルタを送信します。

必ずしもそうではありませんが、しばしばトランスポートコンポーネントが帯域幅を制限する要素になります。

Rsync はパッチデータを並列に転送しません。しかし、他のデータとのやり取りを作成し、送信する必要がある他のデルタに関する知識を構築します。これを行うために、転送中にスレッドを使用して特定の増分の転送が完了したら、次の増分を転送する準備が整います。

より簡単な方法は、増分転送が完了するのを待ってから、必要な転送について次のファイルを比較することです。次の別のファイルを見つけるには時間がかかる可能性があるため、この間は送信帯域幅は利用されません。

関連情報