복사할 때 플래시 드라이브 속도가 느려지는 이유는 무엇입니까?

복사할 때 플래시 드라이브 속도가 느려지는 이유는 무엇입니까?

몇 분 동안 복사하면 속도가 점점 느려집니다. 왜?

예를 들어 20MByte/sec로 시작하여 끝나면 @10MByte/s가 됩니다.

크고 작은 파일 등 다양한 파일

업데이트: 질문은 다양한 운영 체제에 관한 것이므로 "일반적인 질문"입니다.

답변1

이 동작은 플래시 드라이브에만 국한된 것이 아니며 하드 드라이브에서도 볼 수 있습니다. 이는 대부분의 운영 체제 및 디스크가 소규모 쓰기 속도를 높이기 위해 사용하는 캐싱 메커니즘과 관련이 있습니다.

보이는 20mb/s는 디스크 캐시에 기록되는 데이터입니다(보통 빠르지만 작은 메모리). 이 캐시가 가득 차면 디스크로 플러시되어야 하며 이제 더 느린 디스크로 인해 병목 현상이 발생하게 됩니다.

예 1: 최대 500MB의 데이터를 디스크에 플러시하기 전에 빠르게 캐시할 수 있는 대규모 캐시가 있는 컨트롤러(예: 우수한 RAID5 컨트롤러)가 있는 경우 효과가 실제로 두드러집니다.

예 2: 파일 복사가 "완료"됨과 동시에 플래시 드라이브를 꺼내면 캐시가 재생되는 것을 볼 수 있습니다. 이 시점에서 파일은 디스크와 캐시 사이에 분할됩니다. 따라서 운영 체제에 관한 한 복사는 "완료"되지만 디스크 컨트롤러는 여전히 캐시에 남아 있는 내용을 디스크에 써야 합니다. 플래시 드라이브를 다시 넣고 파일을 검사하면 파일이 전부가 아니라는 것을 알 수 있습니다.

고지 사항: 운영 체제/디스크에서 쓰기 캐싱을 활성화하지 않은 경우 이러한 예는 작동하지 않습니다.

더 나아가 만약 그렇다면~ 아니다디스크 캐싱이 작동 중이라면 현재 보고 있는 것은 조각화의 효과일 가능성이 높습니다. 디스크가 점점 더 가득 차면 사용 가능한 연속 여유 공간이 줄어들고 파일 시스템은 파일을 저장할 장소를 찾기 위해 더 열심히 노력해야 합니다.

답변2

캐싱으로 인해 이러한 현상이 일부 발생하지만 이것이 유일한 요인은 아닙니다. 캐싱이 유일한 요인이라면 쓰기 속도가 수백 MB/s에서 드라이브의 실제 쓰기 속도로 매우 빠르게 떨어지고 나머지 쓰기 동안에는 그대로 유지될 것으로 예상할 수 있습니다. 그러나 이는 디스크와의 대규모 전송(예: 부팅 이미지 굽기)을 수행할 때 관찰된 것과는 다릅니다. 대신, 내가 관찰한 것은 전체 작업 과정에서 속도가 점차 감소한다는 것입니다.

이러한 속도 저하는 데이터를 저장하는 데 사용되는 플래시 칩의 데이터 잔류성으로 인해 발생하며 일부 블록을 두 번 이상 기록해야 합니다.

플래시 칩 내부에는 쓸 수 있는 데이터 블록이 있습니다. 쓸 때 컴퓨터가 할 수 있는 일은 두 가지뿐입니다. 전체 블록을 지우거나 블록의 일부(또는 전체) 비트를 0에서 1로 변경하는 것입니다.

그러나 이러한 블록 중 일부는 다른 블록보다 우수하며 특히 품질이 낮은 플래시 드라이브에서는 더욱 그렇습니다. 결과적으로 새 데이터를 쓸 때 일부 비트는 때때로 기록 직후 저절로 0으로 다시 전환될 수 있습니다. 변하지 않아. 따라서 블록에 쓸 때 OS는 모든 데이터가 올바르게 쓰여졌는지 확인해야 하고, 그렇지 않으면 같은 블록에 같은 데이터를 두세 번 써서 블록을 다시 실행해야 합니다. 데이터가 유지될 때까지.

따라서 컴퓨터가 플래시 드라이브에 많은 양의 데이터를 쓸 때 이를 수행하는 방법에 대한 (완전히 정확하지는 않지만 충분히 좋은) 설명은 다음과 같습니다.

  1. 기록할 첫 번째 블록 세트를 가져와서 모두 기록합니다.
  2. 방금 작성한 모든 블록을 다시 읽고 일치하지 않는 블록의 목록을 만듭니다.
  3. 지난번에 올바르게 작성되지 않은 블록과 함께 다음 블록 세트를 작성하십시오.
  4. 모든 블록이 올바르게 기록될 때까지 2-3을 반복합니다.

컴퓨터가 드라이브에 쓸 때 처음으로 드라이브에 블록을 쓰는 속도를 보고합니다. 이전 블록도 동시에 다시 작성해야 하므로, 다시 작성해야 하는 횟수가 증가함에 따라 처녀 블록에 사용할 수 있는 총 처리량은 감소합니다. 따라서 겉보기 쓰기 속도는 시간이 지남에 따라 감소합니다.

답변3

나는 OSX에서 이 문제를 겪고 있었고 상황을 크게 개선했습니다. 먼저 Spotlight Index가 대상 드라이브를 인덱싱하는 것을 중지했습니다. 그런 다음 대상 드라이브에서 썸네일 생성을 중지했습니다(55K 이미지 복사).

그리고 마침내 GUI 사용을 포기하고 rsync -a source target을 사용하여 명령줄로 전환했습니다.

이와 같은 방식으로 다른 운영 체제에서도 비슷한 작업을 수행할 수 있습니다.

답변4

플래시 USB 드라이브나 하드 드라이브 등 드라이브에 파일을 쓸 때 데이터가 일치하는지 확인하기 위해 다시 읽거나 읽지 않습니다. 그건 영원히 걸릴 것입니다. 쓰기 확인은 하드웨어에서 수행되며(순환 중복 검사) 오류가 발생하면 오류가 감지된 하드웨어에서 애플리케이션으로 다시 게시됩니다. 발생하고 느려지는 지연(일시 중지까지 포함)은 장치가 처리할 수 있는 것보다 CPU 쓰기 속도가 더 빠르기 때문에 발생합니다. 내부 하드 드라이브에서는 이런 일이 발생하지 않습니다. Windows OS에서는 실제로 무슨 일이 일어나고 있는지 결코 볼 수 없지만 Linux에서는 USB 하드웨어가 계속해도 괜찮다고 말할 때까지 CPU가 일시 중지되는 것을 실제로 볼 수 있습니다.

관련 정보