gzip 프로세스 속도를 높이고 싶습니다. (서버는 AIX 7.1입니다.)
보다 구체적으로 현재 구현을 gzip *.txt
완료하는 데 최대 1시간이 걸립니다. (추출된 파일은 대용량, 총 10개 파일입니다)
Q: 달리기가 더 효율적일까요?
pids=""
gzip file1.txt &
pids+=" $!"
gzip file2.txt &
pids+=" $!"
wait $pids
비교하다
gzip *.txt
병렬성, CPU 소비 등의 측면에서 gzip *txt
백그라운드(&)에서 gzip과 동일하게 작동합니까, 아니면 다른 옵션이 더 효율적입니까?
답변1
바퀴를 재발명하지 마세요. 을 사용할 수 pigz
있으며 병렬 구현은 gzip
배포 저장소에 있어야 합니다. 그렇지 않다면 다음과 같이 시작할 수 있습니다.여기.
일단 설치되면 pigz
다음과 같이 사용하십시오 gzip
:
pigz *txt
다음을 사용하여 생성된 5개의 30M 파일에 대해 이것을 테스트했습니다 for i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done
.
## Non-parallel gzip
$ time gzip *txt
real 0m8.853s
user 0m8.607s
sys 0m0.243s
## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)
real 0m2.214s
user 0m10.230s
sys 0m0.250s
## pigz
$ time pigz *txt
real 0m1.689s
user 0m11.580s
sys 0m0.317s
답변2
유일한 실제 방법은 시간을 맞추는 것입니다. gzip *.txt
별도의 파일이기 때문에 한 번에 하나씩 수행하고 싶습니다 .
병렬로 실행( gzip file1.txt
등을 사용하여)가능한더 빠르지만 메모리 양, CPU 코어 수 등에 따라 다릅니다. 가장 중요한 요소는 이 작업을 수행하는 동안 디스크 경합이 발생하여 속도가 느려질 수 있다는 것입니다(SSD가 아닌 한 어느 정도). 그들은 함께 비슷한 양의 CPU 시간을 사용합니다.
나는 보통 gzip *.txt
또는 유사한 것을 사용합니다.