Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Руководства, вопросы, обсуждения
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
StarMAUGLI
Сообщения: 1557
Зарегистрирован: 10 сен 2016, 07:16
Решено: 16
Откуда: Москва
Благодарил (а): 641 раз
Поблагодарили: 181 раз

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение StarMAUGLI » 31 июл 2019, 21:25

Начиная с третьего ядра, большинство линуксоидов как-то сошлись на мнении, что конфигурация и компиляция ядра, в большинстве случаев, не нужна: в любом домашнем компьютере ресурсов (места на хдд, оперативы и процессорного времени) для любого ядра Линукс в избытке. Так что сборка ядер осталась уделом гиков, узких профессионалов и учеников на курсах, где преподаватели иногда показывают, как это делается. Будем считать, что я "вечный ученик", поэтому периодически ковыряюсь в азах.

Если залезть в конфигуратор ядра (у меня для экспериментов оказалось ядро 4.4), то уже в самом начале предлагается выбрать каким алгоритмом сжимать ядро. На выбор предлагаются gzip, bzip, lzma, xz, lzo, lz4.
Естественно сразу же захотелось узнать чем они отличаются.

Неожиданно для меня, в интернете найти сразу все алгоритмы в какой-нибудь одной статье-сравнении мне не удалось. Лучшая из них, на мой взгляд эта https://interface31.ru/tech_it/2014/09/ ... linux.html.

Однако, по скольку и там оказалось не все, то я решил свести все заинтересовавшее меня алгоритмы в одно место. Может еще кому-нибудь кроме меня пригодится.

Как не трудно догадаться все алгоритмы сжатия имеют три основных параметра для сравнения: время сжатия, время декомпрессии и эффективность сжатия (отношение исходного размера сжимаемого к уже сжатому). Еще интересный параметр указан в статье по ссылке выше - это требовательность к ресурсам (процессору и памяти) во время работы.

Собственно в самой документации линукса можно почерпнуть эти ответы (как их себе представляют Линус с командой - думаю это достаточно авторитетное мнение).

Под спойлером некий компилят из английского текста нарытого по вышеозначенной теме в разных пунктах конфигуратора nconfig (по кнопке F2)
The linux kernel is a kind of self-extracting executable. Several compression algorithms are available, which differ in efficiency, compression and decompression speed. Compression speed is only relevant when building a kernel. Decompression speed is relevant at each boot.

If you have any problems with bzip2 or lzma compressed kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older version of this functionality (bzip2 only), for 2.4, was supplied by Christian Ludwig)

High compression options are mostly useful for users, who are low on disk space (embedded systems), but for whom ram size matters less.

If in doubt, select 'gzip'
______________
gzip
The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed.
_____________
bzip2
Its compression ratio and speed is intermediate. Decompression speed is slowest among the choices. The kernel size is about 10% smaller with bzip2, in comparison to gzip. Bzip2 uses a large amount of memory. For modern kernels you will need at least 8MB RAM or more for booting.
_______________
LZMA
This compression algorithm's ratio is best. Decompression speed is between gzip and bzip2. Compression is slowest. The kernel size is about 33% smaller with LZMA in comparison to gzip.
______________
XZ
XZ uses the LZMA2 algorithm and instruction set specific BCJ filters which can improve compression ratio of executable code. The size of the kernel is about 30% smaller with XZ in comparison to gzip. On architectures for which there is a BCJ filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ will create a few percent smaller kernel than plain LZMA.

The speed is about the same as with LZMA: The decompression speed of XZ is better than that of bzip2 but worse than gzip and LZO. Compression is slow.
________________
LZO
Its compression ratio is the poorest among the choices. The kernel size is about 10% bigger than gzip; however its speed (both compression and decompression) is the fastest.
_________________
LZ4
The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed.
А ниже тоже самое в машинном гуглопереводе:
Ядро linux является своего рода самораспаковывающимся исполняемым файлом. Доступно несколько алгоритмов сжатия, которые отличаются эффективностью, скоростью сжатия и декомпрессии. Скорость сжатия важна только при сборке ядра. Скорость распаковки важна при каждой загрузке.

Если у вас возникли проблемы со сжатыми ядрами bzip2 или lzma, напишите мне (Ален Кнафф) <alain@knaff.lu>. (Старая версия этой функциональности (только bzip2), для 2.4, была предоставлена ​​Кристианом Людвигом)

Варианты высокой степени сжатия в основном полезны для пользователей, у которых мало места на диске (встроенные системы), но для которых размер оперативной памяти имеет меньшее значение.

Если сомневаетесь, выберите «gzip»
______________
GZIP
Старое и проверенное сжатие gzip. Это обеспечивает хороший баланс между степенью сжатия и скоростью распаковки.
_____________
bzip2
Его степень сжатия и скорость промежуточны. Скорость декомпрессии самая низкая среди вариантов. Размер ядра примерно на 10% меньше с bzip2, по сравнению с gzip. Bzip2 использует большой объем памяти. Для современных ядер вам понадобится как минимум 8 МБ ОЗУ или больше для загрузки.
_______________
LZMA
Этот алгоритм сжатия является лучшим. Скорость распаковки находится между gzip и bzip2. Сжатие самое медленное. Размер ядра примерно на 33% меньше с LZMA по сравнению с gzip.
______________
XZ
XZ использует алгоритм BCZ для алгоритма LZMA2 и набора команд, который может улучшить степень сжатия исполняемого кода. Размер ядра на XZ меньше примерно на 30% по сравнению с gzip. На архитектурах, для которых имеется фильтр BCJ (i386, x86_64, ARM, IA-64, PowerPC и SPARC), XZ создаст ядро ​​на несколько процентов меньше, чем обычная LZMA.

Скорость примерно такая же, как у LZMA: скорость распаковки XZ лучше, чем у bzip2, но хуже, чем у gzip и LZO. Сжатие идет медленно.
________________
LZO
Его степень сжатия является самой бедной среди вариантов. Размер ядра примерно на 10% больше, чем у gzip; однако его скорость (как сжатие, так и распаковка) самая высокая.
_________________
LZ4
Старое и проверенное сжатие gzip. Это обеспечивает хороший баланс между степенью сжатия и скоростью распаковки.
Из чего можно сделать пару выводов:

1) Если вы делаете какой-то узкоспециализированный дистрибутив для работы какого-нибудь одноплатника (медиа-центра, встроенной системы, коммутатора, распберри или еще чего-то такого подобного), то перед вами станет задача предельно уменьшить занимаемое в ПЗУ (ссд, флешке, диске или что вы для этого будете использовать) места. И в этом случае вам лучше всего подойдут алгоритмы LZMA или XZ - двющие наилучшее сжатие. +30-33%

2) Если вы "гик" и вас очень волнует, например, скорость загрузки ОС (а размер файла не так уж и важен), то лучшим выбором окажется алгоритм LZO. Конкретные цифры гуру, к сожалению, не указали, но у нас нет оснований сомневаться в их компетенции. )))

Во всех остальных случаях для пущей надежности и совместимости можно оставить GZIP, который и так стоит по умолчанию. LZ4 и bzip2 - аутсайдеры! преимуществ на фоне других алгоритмов сжатия у них нет.

Поскольку по планете уже победно шагает пятое ядро, то, возможно, в нем присутствует другой набор алгоритмов сжатия. К сожалению, на моем старье этот "другой набор" не "пощупать".
Если кто-нибудь возьмется дополнить эту информацию - милости прошу - в комментарии.

Аватара пользователя

FreeStyler
Сообщения: 483
Зарегистрирован: 23 июл 2018, 04:58
Решено: 2
Откуда: Сиб
Благодарил (а): 519 раз
Поблагодарили: 63 раза

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение FreeStyler » 01 авг 2019, 05:50

Ничего не понял :scratch:
Ядро каждый раз при загрузке распаковывается? :blink2:
deadmau5 - Harmonic Mix
■ Mint 19.2 KDE (initial Xfce) @ Intel NUC Skull Canyon, i7-6770HQ, 16Gb RAM, 512Gb SSD M2, Iris Graphics 580
■ KDE Neon (Ubuntu 18.04) @ Lenovo V110 15ISK, i3-6006u, 8Gb RAM, 32GB SSD, 640GB HDD, HD Graphics 520

Аватара пользователя

Chocobo
Сообщения: 9256
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2663 раза

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение Chocobo » 01 авг 2019, 06:35

FreeStyler, именно так. И поэтому загружается быстрей)

systemd-analyze plot - делимся, сравниваем... (Пост Chocobo #13526)
Изображение
   
Изображение

Аватара пользователя

FreeStyler
Сообщения: 483
Зарегистрирован: 23 июл 2018, 04:58
Решено: 2
Откуда: Сиб
Благодарил (а): 519 раз
Поблагодарили: 63 раза

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение FreeStyler » 01 авг 2019, 15:51

Chocobo, дык это ж бред, не? По идее должно быть сразу в распакованном виде... :scratch:
deadmau5 - Harmonic Mix
■ Mint 19.2 KDE (initial Xfce) @ Intel NUC Skull Canyon, i7-6770HQ, 16Gb RAM, 512Gb SSD M2, Iris Graphics 580
■ KDE Neon (Ubuntu 18.04) @ Lenovo V110 15ISK, i3-6006u, 8Gb RAM, 32GB SSD, 640GB HDD, HD Graphics 520

Аватара пользователя

WWolf
Сообщения: 1438
Зарегистрирован: 13 фев 2018, 21:51
Решено: 5
Откуда: Краснодар
Благодарил (а): 499 раз
Поблагодарили: 338 раз

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение WWolf » 01 авг 2019, 15:57

FreeStyler, двоякая ситуация :) быстрее в память грузануть меньше и там распаковать, чем нераспакованное грузить нудно в память...

Аватара пользователя

Автор темы
StarMAUGLI
Сообщения: 1557
Зарегистрирован: 10 сен 2016, 07:16
Решено: 16
Откуда: Москва
Благодарил (а): 641 раз
Поблагодарили: 181 раз

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение StarMAUGLI » 02 авг 2019, 01:27

Chocobo, насколько я понял из ссылки на пдф, есть какой-то секрет, который превращает аутсайдеровский LZ4 в лучший выбор? Но там оказалось слишком много английского текста. Может вкратце пояснишь? Или этот пдф касается только ARM?

UPD: кажется понял: у LZ4 получается наилучший баланс между суммарной скоростью загрузки сжатого ядра + распаковка его уже в памяти (красно-синяя диаграмма на 16 странице в найденном тобой пдф) по отношению к ближайшим претендентам.

Аватара пользователя

Chocobo
Сообщения: 9256
Зарегистрирован: 27 авг 2016, 19:57
Решено: 200
Откуда: НН
Благодарил (а): 645 раз
Поблагодарили: 2663 раза

Сравнение алгоритмов сжатия gzip, bzip, lzma, xz, lzo, lz4 (перевод)

Сообщение Chocobo » 02 авг 2019, 15:32

StarMAUGLI, у lz4 несколько меньшая степень компрессии по сравнению с xz/lzma и сжатый файл получается крупней, но при этом отличное время на его распаковку, что в итоге даёт выигрыш на буттайм ядра.
Изображение
   
Изображение

Вернуться в «Параметры и оптимизация»