Давно интересовало, какой же выигрыш дает zstd с разными параметрами.
По скорости сжатия, наверное, лидер. У меня он больше ограничивается скоростью диска, если брать какие-то небольшие степени компрессии, давайте посмотрим, что будет при их увеличении, как это соотносится со сжатием. Меня давно уже убеждают, что высокие степени компрессии особой роли не играют, только тормозят.
Итак, имеется в системе
*** Zstandard CLI (64-bit) v1.5.6, by Yann Collet ***
Для тестов взял журнал системы на полгига и накидал простейший скрипт
Код:
#!/bin/bash
# Проверяем, существует ли файл text.txt
if [[ ! -f "text.txt" ]]; then
echo "Файл text.txt не найден. Убедитесь, что он существует в текущей директории."
exit 1
fi
# Цикл по уровням компрессии от 1 до 15
for level in {1..15}; do
# Формируем имя выходного файла
output_file="${level}text.txt.zst"
# Архивируем файл с указанным уровнем компрессии
time zstd -q -${level} text.txt -o "$output_file"
# Проверяем результат команды
if [[ $? -eq 0 ]]; then
echo "Файл $output_file успешно создан с уровнем компрессии $level."
else
echo "Ошибка при создании $output_file с уровнем компрессии $level."
fi
done
echo "Архивация завершена."
И результат его работы:
Код:
real 0m0,295s
user 0m0,333s
sys 0m0,090s
Файл 1text.txt.zst успешно создан с уровнем компрессии 1.
real 0m0,358s
user 0m0,387s
sys 0m0,115s
Файл 2text.txt.zst успешно создан с уровнем компрессии 2.
real 0m0,398s
user 0m0,437s
sys 0m0,113s
Файл 3text.txt.zst успешно создан с уровнем компрессии 3.
real 0m0,431s
user 0m0,471s
sys 0m0,114s
Файл 4text.txt.zst успешно создан с уровнем компрессии 4.
real 0m1,091s
user 0m1,137s
sys 0m0,106s
Файл 5text.txt.zst успешно создан с уровнем компрессии 5.
real 0m1,343s
user 0m1,396s
sys 0m0,125s
Файл 6text.txt.zst успешно создан с уровнем компрессии 6.
real 0m1,425s
user 0m1,466s
sys 0m0,122s
Файл 7text.txt.zst успешно создан с уровнем компрессии 7.
real 0m1,745s
user 0m1,781s
sys 0m0,118s
Файл 8text.txt.zst успешно создан с уровнем компрессии 8.
real 0m1,863s
user 0m1,905s
sys 0m0,116s
Файл 9text.txt.zst успешно создан с уровнем компрессии 9.
real 0m2,251s
user 0m2,283s
sys 0m0,126s
Файл 10text.txt.zst успешно создан с уровнем компрессии 10.
real 0m2,925s
user 0m2,952s
sys 0m0,133s
Файл 11text.txt.zst успешно создан с уровнем компрессии 11.
real 0m3,174s
user 0m3,189s
sys 0m0,131s
Файл 12text.txt.zst успешно создан с уровнем компрессии 12.
real 0m6,579s
user 0m6,596s
sys 0m0,135s
Файл 13text.txt.zst успешно создан с уровнем компрессии 13.
real 0m9,366s
user 0m9,368s
sys 0m0,144s
Файл 14text.txt.zst успешно создан с уровнем компрессии 14.
real 0m14,333s
user 0m14,225s
sys 0m0,211s
Файл 15text.txt.zst успешно создан с уровнем компрессии 15.
Архивация завершена.
Видим, что после 12 степени компрессор начинает уже ощутимо тормозить.
Код:
ls -lS *.zst
-rw-r--r-- 1 olegon olegon 12640527 дек 6 19:37 1text.txt.zst
-rw-r--r-- 1 olegon olegon 12478899 дек 6 19:37 2text.txt.zst
-rw-r--r-- 1 olegon olegon 12001222 дек 6 19:37 3text.txt.zst
-rw-r--r-- 1 olegon olegon 11988390 дек 6 19:37 4text.txt.zst
-rw-r--r-- 1 olegon olegon 10133546 дек 6 19:37 5text.txt.zst
-rw-r--r-- 1 olegon olegon 9504993 дек 6 19:37 6text.txt.zst
-rw-r--r-- 1 olegon olegon 9244327 дек 6 19:37 7text.txt.zst
-rw-r--r-- 1 olegon olegon 9077772 дек 6 19:37 8text.txt.zst
-rw-r--r-- 1 olegon olegon 8882004 дек 6 19:37 9text.txt.zst
-rw-r--r-- 1 olegon olegon 8707963 дек 6 19:37 10text.txt.zst
-rw-r--r-- 1 olegon olegon 8583645 дек 6 19:37 12text.txt.zst
-rw-r--r-- 1 olegon olegon 8583169 дек 6 19:37 11text.txt.zst
-rw-r--r-- 1 olegon olegon 8566222 дек 6 19:37 13text.txt.zst
-rw-r--r-- 1 olegon olegon 8364558 дек 6 19:37 14text.txt.zst
-rw-r--r-- 1 olegon olegon 8230907 дек 6 19:37 15text.txt.zst
Любопытно, что 11 степень сжала лучше, чем 12 :)
То есть, получилось, что если брать 6 степень компрессии вместо 15, то на 1Тб я потеряю 2609328128 байт (2Гб, кому лень считать) и потеряю 26624 секунд (больше 7 часов времени)... Для меня выбор очевиден...