내 컴퓨터에 다운로드할 가상 머신에 일부 파일이 저장되어 있습니다. 약 1백만 개의 파일이 있으며 다음 명령을 사용하고 있습니다.
scp vm_user@IP:/home/vm_user/path_to_files /Users/documents
상상할 수 있듯이 파일을 하나씩 다운로드하기 때문에 속도가 느립니다. 파일을 비동기적으로 다운로드하거나 다운로드에 동시성을 적용하여 다운로드 속도를 높이는 더 빠른 대안이 있습니까?
답변1
상상할 수 있듯이 파일을 하나씩 다운로드하기 때문에 속도가 느립니다.
"하나씩" 정의: 각 파일 이후에 아무것도 다시 설정하지 않고 연결하는 것입니다. (덧붙여서, 프로그램 이름에도 불구하고 scp
사용된 프로토콜은 SCP가 아닌 SFTP인 것이 거의 확실합니다. SFTP는 더 현대적입니다.)
SFTP에 유의하세요.요청 대기열은 내가 아는 모든 구현에서 이미 사용되고 있습니다., 따라서 첫 번째 파일 전송을 완료하고 다음 파일 데이터/이름/속성 전송을 시작하는 사이에 "지연 시간"이 없습니다.
비동기적으로 파일을 다운로드하는 더 빠른 대안이 있습니까?
이 맥락에서 "비동기"는 무엇을 의미합니까? 백그라운드에서 무언가가 완료되기를 기다리는 것은 그것이 차단되기를 기다리는 것보다 빠르지 않기 때문에
아니면 다운로드 속도를 높이기 위해 다운로드에 동시성을 적용하시겠습니까?
동시성 자체로는 다운로드 속도가 전혀 증가하지 않습니다. 대신, 수신 측에 오버헤드와 잠재적인 파일 시스템 조각화를 추가할 뿐만 아니라 송신 측에 검색 시간/캐시 무효화를 추가합니다.
웹 서버가 각 연결 속도를 제한할 때 도움이 됩니다. 그러면 인위적인 한계를 우회하게 됩니다. 여기에서 각 연결을 인위적으로 제한하고 있다고 생각하지 않습니다.
여기서는 이러한 파일이 작고 크기가 몇 개의 네트워크 버퍼에 불과하다고 가정합니다. 그렇지 않은 경우 SSH가 상위 계층(SFTP)에 제공하는 내부 버퍼 아키텍처는 이 경우 처리량을 제한합니다. rsync
또는 유사한 것을 사용하십시오 ssh user@host tar -cf - --zstd folder/to/be/sent | tar -xf - --zstd
. (순서가 문제가 아니기 때문에 두 가지 옵션은 여전히 순차적입니다.)