모든 파일을 mv에 전달하는 것이 더 낫습니까, 아니면 여러 mv 프로세스를 병렬로 실행하는 것이 더 낫습니까?

모든 파일을 mv에 전달하는 것이 더 낫습니까, 아니면 여러 mv 프로세스를 병렬로 실행하는 것이 더 낫습니까?

나는 세 가지 달리기 스타일을 가지고 있습니다 mv. 첫 번째:

mv /db/dbfile1 /db/dbfile2 /db/dbfile3  /usb_storage/

두번째:

mv /db/dbfile1  /usb_storage/ &
mv /db/dbfile2  /usb_storage/ &
mv /db/dbfile3  /usb_storage/ &

세 번째 (제가 먼저 생각했는데 이것도 똑같나요?)

mv /db/dbfile1  /usb_storage/ 
mv /db/dbfile2  /usb_storage/ 
mv /db/dbfile3  /usb_storage/ 

다음 중 어떤 방법이 더 낫나요? 왜?

답변1

파일을 병렬로 이동하는 데 이점이 있는 경우 mv이미 기본적으로 수행하고 있거나 유사한 도구가 존재할 가능성이 있습니다. ;)

mv어쨌든 일반적으로 저장 미디어의 속도에 따라 제한되기 때문에 동일한 소스/대상 디스크에서 병렬로 실행하는 것은 의미가 없습니다. USB 스틱인 경우 /usb_storage/스틱이 더 빠르게 실행되지 않습니다.

mv /db/dbfile1 /db/dbfile2 /db/dbfile3 /usb_storage/

완료될 때까지 원하는 작업을 수행하므로 최선의 접근 방식이어야 합니다(대안을 대략 동일하게 만들려면 wait끝에 a를 추가해야 합니다). 파일을 병렬이 아닌 순차적으로 작성하면 불필요한 파일 조각화를 방지하는 데에도 도움이 됩니다.

또한 /usb_storage/파일 크기가 이동하려는 모든 파일을 수용할 만큼 크지 않은 경우 병렬로 작업할 때 세 개의 불완전하거나 복사본이 없는 대신 적어도 하나의 완전한 파일이 생성될 것입니다. 평행한.

답변2

mv를 병렬로 실행하면 성능이 향상될 수 있습니다. 한 프로세스가 읽기가 반환되기를 기다리는 동안 다른 파일이 캐시에 있으면 다른 I/O 요청을 직접 수행할 수 있습니다. 또한 IO 스케줄러는 이동하려는 모든 파일에 대한 섹터 요청을 다시 정렬하여 HDD의 읽기/쓰기 헤드(분명히 USB 키의 헤드는 많지 않음)가 가능한 한 적게 또는 많이 이동할 수 있도록 할 수 있습니다.

즉, 파일 시스템 조각화가 많이 발생하지 않는 한(읽기/쓰기 헤드가 돌아다니지 않는 이점을 얻기 위해) 병렬 실행으로 인한 성능상의 이점은 매우 작습니다.

하지만 성능에 관심이 있다면 USB 키의 스케줄러가 "noop"인지 확인하여 읽기/쓰기가 없는 매체에 대한 일회성 샷이 중요하지 않을 때 재정렬하는 데 시간을 소비하지 않도록 할 것입니다. 요청 헤더입니다. 일반 HDD 스케줄러가 cfq인 경우 ionice Magic을 사용하여 시스템에서 발생하는 다른 작업보다 mv 작업의 우선 순위를 지정할 수도 있습니다.

관련 정보