많은 대용량 파일 (80GB)을 압축해야한다는 사실을 알게되었고 시스템이 보여주는 (부족한) 속도에 놀랐습니다. 약 500MB / 분의 변환 속도를 얻습니다. 를 top
사용하면 약 100 %의 단일 CPU를 사용하는 것 같습니다.
tar
파일 생성 (80G 파일 생성 방법)이 불과 몇 분 (아마도 5 또는 10) 걸렸기 때문에 디스크 액세스 속도가 아니라고 확신 하지만 2 시간 이상이 지난 후에도 간단한 gzip 명령은 여전히 완료되지 않았습니다.
요약해서 말하자면:
tar -cvf myStuff.tar myDir/*
87G tar 파일 생성에 5 분 미만 소요
gzip myStuff.tar
2 시간 10 분이 걸렸으며 55G zip 파일이 생성되었습니다.
내 질문 : 이것이 정상입니까? gzip
작업 속도를 높이기위한 특정 옵션이 있습니까? 명령을 연결하고 사용하는 것이 더 빠릅 tar -cvfz
니까? I 톱의 참조 pigz
- Gzip으로의 병렬 구현 -하지만 나를 위해 옵션이되지 않도록 불행히도 나는, 내가 사용하고있는 컴퓨터에 소프트웨어를 설치할 수 없습니다. 예를 들어이 이전 질문을 참조하십시오 .
나는 이러한 옵션 중 일부를 직접 시도하고 시간을 정하려고하지만 옵션의 "매직 조합"을 누르지 않을 가능성이 높습니다. 이 사이트의 누군가가 속도를 높이는 올바른 트릭을 알고 있기를 바랍니다.
사용 가능한 다른 시험의 결과가있을 때이 질문을 업데이트 할 것입니다. 그러나 특히 유용한 기술을 가진 사람이 있다면 정말 감사하겠습니다. 어쩌면 gzip은 내가 깨달은 것보다 처리 시간이 더 걸릴 수 있습니다 ...
최신 정보
약속 한대로 아래에서 제안하는 트릭을 시도했습니다. 압축 량을 변경하고 파일의 대상을 변경하십시오. 약 4.1GB 타르에 대해 다음과 같은 결과를 얻었습니다.
flag user system size sameDisk
-1 189.77s 13.64s 2.786G +7.2s
-2 197.20s 12.88s 2.776G +3.4s
-3 207.03s 10.49s 2.739G +1.2s
-4 223.28s 13.73s 2.735G +0.9s
-5 237.79s 9.28s 2.704G -0.4s
-6 271.69s 14.56s 2.700G +1.4s
-7 307.70s 10.97s 2.699G +0.9s
-8 528.66s 10.51s 2.698G -6.3s
-9 722.61s 12.24s 2.698G -4.0s
예, 플래그를 기본값 -6
에서 가장 빠른 것으로 변경하면 -1
(내 데이터의 경우) zip 파일의 크기가 거의 변경되지 않고 속도가 30 % 향상됩니다. 동일한 디스크를 사용하든 다른 디스크를 사용하든 본질적으로 차이가 없습니다 (통계적 의미를 얻으려면 여러 번 실행해야합니다).
관심이 있다면 다음 두 스크립트를 사용하여 이러한 타이밍 벤치 마크를 생성했습니다.
#!/bin/bash
# compare compression speeds with different options
sameDisk='./'
otherDisk='/tmp/'
sourceDir='/dirToCompress'
logFile='./timerOutput'
rm $logFile
for i in {1..9}
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $sameDisk $logFile
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $otherDisk $logFile
done
그리고 두 번째 스크립트 ( compressWith
) :
#!/bin/bash
# use: compressWith sourceDir compressionFlag destinationDisk logFile
echo "compressing $1 to $3 with setting $2" >> $4
tar -c $1 | gzip -$2 > $3test-$2.tar.gz
3 가지주의 사항 :
- 내장 명령 에는 GNU 명령보다 옵션 수가 적으므로을 사용
/usr/bin/time
하지 마십시오.time
bash
--format
로그 파일을 쉽게 읽을 수 있지만 옵션을 사용하지 않아도 됩니다.time
파이프 순서로 첫 번째 명령에서만 작동하는 것처럼 보이기 때문에 스크립트에서 스크립트를 사용했습니다 (따라서 단일 명령처럼 보이게했습니다 ...).
이 모든 학습을 통해 제 결론은
-1
깃발로 물건을 빠르게 (응답 허용)- 디스크에서 읽는 것보다 데이터를 압축하는 데 훨씬 더 많은 시간이 소요됩니다
- 더 빠른 압축 소프트웨어에 투자하십시오 (
pigz
좋은 선택 인 것 같습니다). - 압축 할 파일이 여러 개인 경우 각
gzip
명령을 자체 스레드에 넣고 사용 가능한 CPU를 더 많이 사용할 수 있습니다 (가난한 사람pigz
)
이 모든 것을 배우도록 도와 주신 모든 분들께 감사드립니다!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
기계가 재료를 얼마나 빨리 압축하는지 보여줍니다. side-note2 : 결과를 다른 디스크에 저장하십시오.
man
페이지의 마지막 옵션이며 멀리 읽지 않았습니다 ( '단일 문자 명령'으로 정렬되어 있기 때문에 -#
) . 그것은 RTFM을 가르쳐 줄 것입니다! 이것은 내가 시도하는 다음 일이 될 것입니다!
pigz
경우, 설치하지 않고도 빌드 한 위치에서 컴파일 하고 실행할 수 있습니다 . 컴파일러가없는 경우 다른 컴퓨터에서 컴파일러를 크로스 컴파일 할 수 있지만 가치가있는 것보다 더 많은 노력을 기울이고 있습니다. (빠르게 실행하려면이 압축이 얼마나