Я дізнався це:
Причина полягає в тому, що gzip
функціонує на (з точки зору швидкості процесора порівняно з високою швидкістю пошуку в наші дні) надзвичайно низькі розміри буфера .
Він зчитує кілька КБ з вхідного файлу, стискає його і передає у вихідний файл. Зважаючи на той факт, що для цього потрібно шукати жорсткий диск, за секунди можна зробити лише кілька операцій.
Причина мого виступу не масштабувалась в тому, що вже хтось gzip
шукав, як божевільний.
Я працював над цим за допомогою buffer
утиліти unix :
buffer -s 100000 -m 10000000 -p 100 < file1.json | gzip > file1.json.gz
Буферизуючи велику кількість вхідних даних, перш ніж надсилати їх у gzip, кількість дрібних запитів може бути різко зменшена. Варіанти:
-s
і -m
мають вказати розмір буфера (я вважаю, що він є в КБ, але не впевнений)
-p 100
гарантує, що дані передаються в gzip лише після того, як буфер на 100% заповнений
Запустивши чотири з них паралельно, я міг отримати пропускну здатність 4 * 25 Мб / с, як очікувалося.
Мені все ще цікаво, чому gzip не дозволяє збільшити розмір буфера - таким чином, це досить марно, якщо працювати на спінінг-диску.
EDIT : Я випробував ще кілька поведінкових програм стиснення:
bzip2
обробляє лише 2 Мб / с завдяки сильнішому / більш інтенсивному стисненню процесора
lzop
Схоже, дозволяють більші буфери: 70 Мб / с на ядро, і 2 ядра можуть максимально збільшити мій HD без надмірного пошуку
dd
зробити те ж саме?