scp
느린 업로드 연결(~100kb/s)을 사용하여 파일을 업로드 하려고 할 때마다 다음과 같은 내용이 표시됩니다.
test 27% 2208KB 2.2MB/s 00:02 ETA
첫 번째 순간에 나는 시작했습니다.
분명히 2208KB를 전송하지 않으며 확실히 2.2MB/s로 전송하지도 않습니다. 몇 초 후에 올바른 속도로 느려지지만 이전 위치로 돌아가지는 않습니다. 대신 전송이 완료되면 전송이 완료될 때까지 몇 초(또는 몇 분) 동안 정지됩니다. .진짜완전한.
나는 모든 Linux에서 scp를 사용할 때마다 전송 속도가 1MB/s 미만이라는 것을 발견했습니다.
SCP는 어떻게 됐나요?
답변1
scp
데이터가 통과하는 속도 측정그것.
기본적으로 scp
디스크에서 일부 데이터를 읽고 ssh
. 그런 다음 ssh
암호화되어 커널로 전달되어 네트워크를 통해 전송됩니다. 이 버퍼는 상당히 클 수 있습니다.
모든 버퍼링은 애플리케이션에 상당히 투명합니다. 단지 write
파이프나 소켓을 호출하기만 하면 됩니다. 커널은 데이터를 받아들이고 해당 데이터가 버퍼에 있는지 또는 실제로 원격 측에서 전송되고 승인되었는지 여부를 애플리케이션에 나타내지 않습니다. 애플리케이션이 물어볼 수 있는 방법이 있습니다. 그러나 동일한 작업이 실제로 소켓을 사용하여 수행되므로 scp
그렇게 하기가 어렵습니다.ssh
그러면 모든 버퍼(주로 TCP 전송 버퍼)의 초기 채우기가 매우 빠르게 발생하고 scp가 이를 전송 속도로 표시한다는 것을 알 수 있습니다. 마지막으로 scp
파일 읽기를 마치고 ssh
파이프로 보낸 후 SSH가 완료될 때까지 기다립니다. 전송 완료를 ssh
확인 하고 커널이 TCP 버퍼 플러시를 완료할 때까지 기다립니다. scp
이것이 마지막 일시 정지입니다.
내 생각에 "무시"를 제외한 유일한 두 가지 해결책은 더 빠른 링크를 얻거나 TCP 전송 버퍼 크기를 줄이는 것입니다.