Tôi tìm thấy nó:
Lý do là gzip
hoạt động trên (về tốc độ CPU so với tốc độ tìm kiếm HD hiện nay) kích thước bộ đệm cực thấp .
Nó đọc một vài KB từ tệp đầu vào, nén nó và xóa nó sang tệp đầu ra. Với thực tế là điều này đòi hỏi phải tìm kiếm ổ cứng, chỉ một vài thao tác có thể được thực hiện mỗi giây.
Lý do hiệu suất của tôi không mở rộng là vì đã có người gzip
tìm kiếm như điên.
Tôi đã giải quyết vấn đề này bằng cách sử dụng buffer
tiện ích unix :
buffer -s 100000 -m 10000000 -p 100 < file1.json | gzip > file1.json.gz
Bằng cách đệm rất nhiều đầu vào trước khi gửi nó đến gzip, số lượng tìm kiếm nhỏ có thể giảm đáng kể. Các tùy chọn:
-s
và -m
phải chỉ định kích thước của bộ đệm (tôi tin rằng nó được tính bằng KB, nhưng không chắc chắn)
-p 100
đảm bảo rằng dữ liệu chỉ được chuyển đến gzip sau khi bộ đệm được lấp đầy 100%
Chạy song song bốn trong số này, tôi có thể nhận được thông lượng 4 * 25 MB / s, như mong đợi.
Tôi vẫn tự hỏi tại sao gzip không cho phép tăng kích thước bộ đệm - theo cách này, nó khá vô dụng nếu chạy trên đĩa quay.
EDIT : Tôi đã thử một vài hành vi chương trình nén:
bzip2
chỉ xử lý 2 MB / s do nén mạnh hơn / nhiều CPU hơn
lzop
dường như cho phép bộ đệm lớn hơn: 70 MB / s mỗi lõi và 2 lõi có thể tối đa hóa HD của tôi mà không cần tìm kiếm quá nhiều
dd
làm như vậy?