Dowiedziałem się:
Powodem jest to, że obecnie gzip
dział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ż gzip
szukałem jak szalony.
Obejrzałem to za pomocą buffer
narzę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:
-s
i -m
mają 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
dd
zrobić to samo?