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

이를 통해 세 가지 프로세스 또는 스레드가 pstree있음을 발견했습니다 .rsync

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

rsync여러 개의 스레드나 프로세스가 있고 하나의 프로그램만 실행하는 이유는 무엇입니까 ?

stdout 출력에서 ​​여러 파일을 병렬로 스트리밍하는 것 같지 않습니다(추가 노력처럼 보입니까?동시/동시 파일 전송으로 rsync 속도 향상)?

dir1그러나 대상을 확인한 결과 전송된 파일의 전부가 아닌 일부만 포함된 일부 디렉터리(예: )가 있음을 발견했으며 rsyncstdout의 출력에서는 파일을 별도의 디렉터리(예: dir2다음이 포함된 디렉터리) 로 전송하고 있다고 말했습니다. 동일한 상위 디렉토리 dir1). 나중에 stdout으로 출력하여 dir1전체 파일이 아닌 일부 파일이 전송된 디렉터리(예: )의 나머지 파일을 전송할 것임을 나타냅니다 .

답변1

rsync 프로그램은 다음을 포함하여 많은 작업을 수행해야 합니다.

  • 원격 서버와 동기화되지 않은 파일 찾기
  • 어느 부분을 옮겨야 할지 결정하세요
  • "다른 쪽"이 업데이트될 수 있도록 델타를 전송합니다.

항상 그런 것은 아니지만 종종 전송 구성 요소가 대역폭을 제한하는 요소가 됩니다.

Rsync는 패치 데이터를 병렬로 전송하지 않습니다. 그러나 다른 데이터와 교환을 생성하여 전송해야 할 다른 델타에 대한 지식을 구축합니다. 이를 수행하기 위해 전송 중에 스레드를 사용하여 특정 증분의 전송이 완료되면 다음 증분을 전송할 준비가 됩니다.

더 간단한 접근 방식은 증분 전송이 완료될 때까지 기다린 후 필요한 전송에 대해 다음 파일을 비교하는 것입니다. 다음 다른 파일을 찾는 데 시간이 걸릴 수 있으므로 이 시간 동안에는 전송 대역폭이 활용되지 않습니다.

관련 정보