Dowiedziałem się:
Powodem jest to, że obecnie gzipdziała (pod względem szybkości procesora w porównaniu do prędkości wyszukiwania HD) na bardzo małych rozmiarach buforów .
Odczytuje kilka KB z pliku wejściowego, kompresuje go i opróżnia do pliku wyjściowego. Biorąc pod uwagę fakt, że wymaga to wyszukiwania dysku twardego, można wykonać tylko kilka operacji na sekundę.
Powodem, dla którego mój występ się nie skalował, jest to, że już gzipszukałem jak szalony.
Obejrzałem to za pomocą buffernarzędzia unix :
buffer -s 100000 -m 10000000 -p 100 < file1.json | gzip > file1.json.gz
Buforując dużo danych wejściowych przed wysłaniem ich do gzip, można znacznie zmniejszyć liczbę małych wyszukiwań. Opcje:
-si -mmają określić rozmiar bufora (uważam , że jest w KB, ale nie jestem pewien)
-p 100 upewnia się, że dane są przekazywane do gzip dopiero po wypełnieniu bufora w 100%
Działając cztery z nich równolegle, mogłem uzyskać przepustowość 4 * 25 MB / s, zgodnie z oczekiwaniami.
Nadal zastanawiam się, dlaczego gzip nie pozwala na zwiększenie rozmiaru bufora - w ten sposób jest całkiem bezużyteczny, jeśli działa na wirującym dysku.
EDYCJA : Wypróbowałem jeszcze kilka zachowań programów do kompresji:
bzip2 przetwarza tylko 2 MB / s ze względu na silniejszą / bardziej intensywną kompresję procesora
lzop wydaje się zezwalać na większe bufory: 70 MB / s na rdzeń, a 2 rdzenie mogą maksymalnie powiększyć mój HD bez nadmiernego przeszukiwania
ddzrobić to samo?