Tôi thấy mình phải nén một số tệp rất lớn (80 GB) và tôi ngạc nhiên về tốc độ (thiếu) mà hệ thống của tôi đang thể hiện. Tôi nhận được khoảng 500 MB / phút tốc độ chuyển đổi; bằng cách sử dụng top
, tôi dường như đang sử dụng một CPU với tỷ lệ xấp xỉ 100%.
Tôi khá chắc chắn rằng nó không (chỉ) tốc độ truy cập đĩa, vì việc tạo tar
tệp (đó là cách tạo tệp 80G) chỉ mất vài phút (có thể là 5 hoặc 10), nhưng sau hơn 2 giờ, lệnh gzip đơn giản của tôi vẫn còn không được thực hiện.
Tóm tắt:
tar -cvf myStuff.tar myDir/*
Mất <5 phút để tạo tệp tar 87 G
gzip myStuff.tar
Mất hai giờ 10 phút, tạo tệp zip 55G.
Câu hỏi của tôi: Điều này có bình thường không? Có những lựa chọn nhất định gzip
để tăng tốc mọi thứ? Nó sẽ nhanh hơn để nối các lệnh và sử dụng tar -cvfz
? Tôi thấy tham chiếu đến pigz
- Triển khai song song GZip - nhưng thật không may tôi không thể cài đặt phần mềm trên máy tôi đang sử dụng, vì vậy đó không phải là một tùy chọn cho tôi. Xem ví dụ câu hỏi trước đó .
Tôi dự định sẽ tự mình thử một số tùy chọn trong số các tùy chọn này - nhưng có khả năng là tôi sẽ không đạt được "sự kết hợp kỳ diệu" của các tùy chọn. Tôi hy vọng rằng ai đó trên trang web này biết mẹo phù hợp để tăng tốc mọi thứ.
Khi tôi có kết quả của các thử nghiệm khác, tôi sẽ cập nhật câu hỏi này - nhưng nếu có ai có một mẹo đặc biệt tốt, tôi thực sự sẽ đánh giá cao nó. Có lẽ gzip chỉ mất nhiều thời gian xử lý hơn tôi nhận ra ...
CẬP NHẬT
Như đã hứa, tôi đã thử các thủ thuật được khắc phục bên dưới: thay đổi mức độ nén và thay đổi đích của tệp. Tôi đã nhận được các kết quả sau cho một tar khoảng 4,1 GB:
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
Vì vậy, có, việc thay đổi cờ từ mặc định -6
thành nhanh nhất -1
giúp tôi tăng tốc 30%, với (đối với dữ liệu của tôi) hầu như không có bất kỳ thay đổi nào đối với kích thước của tệp zip. Cho dù tôi đang sử dụng cùng một đĩa hay một đĩa khác đều không có sự khác biệt (tôi sẽ phải chạy nó nhiều lần để có bất kỳ ý nghĩa thống kê nào).
Nếu bất cứ ai quan tâm, tôi đã tạo các điểm chuẩn thời gian này bằng hai tập lệnh sau:
#!/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
Và tập lệnh thứ hai ( 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
Ba điều cần lưu ý:
- Sử dụng
/usr/bin/time
thay vìtime
, vì lệnh tích hợpbash
có nhiều tùy chọn ít hơn lệnh GNU - Tôi không bận tâm sử dụng
--format
tùy chọn mặc dù điều đó sẽ làm cho tệp nhật ký dễ đọc hơn - Tôi đã sử dụng một tập lệnh trong tập lệnh vì
time
dường như chỉ hoạt động trên lệnh đầu tiên trong chuỗi được xử lý (vì vậy tôi đã làm cho nó trông giống như một lệnh duy nhất ...).
Với tất cả những gì đã học, kết luận của tôi là
- Tăng tốc mọi thứ với
-1
cờ (câu trả lời được chấp nhận) - Mất nhiều thời gian hơn để nén dữ liệu hơn là đọc từ đĩa
- Đầu tư vào phần mềm nén nhanh hơn (
pigz
có vẻ như là một lựa chọn tốt). - Nếu bạn có nhiều tệp để nén, bạn có thể đặt từng
gzip
lệnh trong luồng riêng của nó và sử dụng nhiều CPU có sẵn hơn (người nghèopigz
)
Cảm ơn tất cả mọi người đã giúp tôi tìm hiểu tất cả điều này!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
sẽ cho bạn thấy máy của bạn đang nén các công cụ nhanh như thế nào. side-note2: lưu kết quả vào một đĩa khác.
man
trang và tôi đã không đọc đến đó (vì nó được sắp xếp theo 'lệnh một chữ cái', đó là -#
) . Điều đó sẽ dạy tôi đến RTFM! Đây sẽ là điều tiếp theo tôi thử!
pigz
và chạy nó từ bất cứ nơi nào bạn có thể xây dựng nó mà không cần cài đặt nó. Nếu không có trình biên dịch, bạn có thể biên dịch chéo nó trên một máy tính khác, mặc dù điều đó bắt đầu có nhiều nỗ lực hơn mức có thể đáng giá. (Tùy thuộc vào mức độ bạn cần nén này để chạy nhanh hơn, tôi đoán vậy.)