답변:
내 생각 엔 캐시 (또는 원하는 경우 버퍼)입니다.
데이터의 첫 번째 청크는 캐시에 매우 빠르게 기록됩니다 (임시 디스크에 기록됨). 캐시가 가득 차서 전송 속도는 디스크에 대한 실제 전송 속도로 떨어집니다 (캐시 공간에서 디스크에 데이터가 기록되면 캐시에서 사용 가능 해짐)
표시되는 속도의 점진적인 감소는 전체 전송에서 평균 속도 일 수 있습니다. 전송 시간이 길어질수록 전송 비율이 실제 속도보다 낮으므로 평균 전송률이 낮아집니다.
그들은 그림이 1,000 개의 단어를 그립니다. 여기에 하나가 있습니다.
파란색 선은 실제 전송 속도이고 빨간색 선은 시작 이후 평균입니다. (이것들은 내가 머리에서 만든 예시 수치입니다).
위의 답변에서 언급 한 명백한 캐시 측면 외에도 Linux는 로컬 저장 장치와 USB 저장 장치를 다르게 처리합니다.
"클래식"디스크 (SATA를 통해 내부적으로 또는 eSATA를 통해 외부로 연결된)로 데이터를 전송할 때 Linux 커널은 DMA 모드를 사용합니다. 이는 전체 전송이 CPU를 포함하지 않고 RAM에서 디스크 컨트롤러로 직접 전송됨을 의미합니다.
이것이 SATA / eSATA 전송 속도가 빠른 이유입니다.
그러나 USB를 통해 동일한 디스크를 연결하면 각 킬로바이트의 데이터가 USB 디스크 케이스의 컴퓨터와 USB 컨트롤러간에 교환되는 64 바이트 패킷으로 분할됩니다. 이것은 DMA 모드가 아닌 CPU를 사용하여 수행해야합니다.
USB가 더 느린 이유입니다.
또한 Linux는 여러 측면 (디스크 / 파일 시스템 관련이 아닌)과 여러 계층에서 데이터를 캐싱하고 있다는 사실도 알고 있어야합니다. 100 개가 넘는 서로 다른 캐시가 있습니다.
따라서 더 큰 파일을 USB 디스크로 보내려고하면 프로세스 중에 더 많은 캐시가 채워집니다. 이는 비선형 전송 속도 저하의 원인입니다.