У мене виникла ідея швидко порівняти деякі програми декомпресії. Наприклад, для gz, я би запустив команду:
timeout 10 zcat foo.gz | wc -c
Який міряв би кількість даних, які декомпресор міг витягти за 10 секунд.
Єдина проблема полягає в тому, що це не працює: коли zcat вбивається, wc також вбивається, тому я не отримую підрахунок байтів, а лише Terminated
повідомлення.
Отже, питання полягає в тому, чи є спосіб отримати підрахунок від wc , або блокуючи сигнал якось, або використовувати альтернативу замість wc, яка друкує результат навіть тоді, коли він отримує термінний сигнал.
Звичайно, є альтернативи:
Запис у тимчасовий файл:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
Проблема в цьому полягає в тому, що використовується багато пам'яті, а також може бути певна покарання за продуктивність.Використання ulimit замість цього:
ulimit -t 10; zcat foo.gz | wc -c
Це також працює, але вимірює лише процесорний час, тому сповільнення через I / O (наприклад, тим, що компресія гірша, і потрібно більше зчитувати з диска більше байтів) не вимірюється.Створення менших тестових файлів.
Це може бути зрозуміло, і це може бути найкращим рішенням. Однак це створює безліч тимчасових файлів.