Сайт | Скачать | Видео | Wiki

Автор Тема: Алгоритмы сжатия/распаковки  (Прочитано 28890 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
  • Автор темы
Алгоритмы сжатия/распаковки
« : 20 Январь 2019, 19:53:00 »
mkpfs сжатие
Тесты squashfs zstd
https://forum.puppyrus.org/index.php?topic=16494.0

и решаю медлительность пережатием в более легкий для распаковки алгоритм, LZO или LZ4.
Когда в squash tools придет zstd еще можно будет подумать, так как по размеру он не сильно уступает xz, за то распаковка судя по тестам быстрее чем у lzo.
Я тут обратил внимание что у нас в PRA все алгоритмы сжатия/распаковки не используют многопоточность. Не знаю как с этим в Magos.
Для примера возьмем xz:
Код
% du -h skype.tar                           
229M skype.tar
Цитата
% xz -c skype.tar > skype.tar.xz && du -h skype.tar.xz
xz -c skype.tar > skype.tar.xz  140,95s user 0,55s system 99% cpu 2:22,50 total
71M   skype.tar.xz
Цитата
% xz -c -T 0 skype.tar > skype.tar.xz && du -h skype.tar.xz
xz -c -T 0 skype.tar > skype.tar.xz  134,52s user 0,86s system 349% cpu 38,694 total
71M   skype.tar.xz
(У меня zsh, команда time по умолчанию)

P.s. Lz4 вроде использует многопоточность по умолчанию? Не нашел четкого ответа в сети.
« Последнее редактирование: 25 Декабрь 2021, 12:16:51 от sfs »

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #1 : 20 Январь 2019, 21:03:25 »
Я тут обратил внимание что у нас в PRA все алгоритмы сжатия/распаковки не используют многопоточность.
Это вы в отдельности компрессоры смотрите. Они обычно по умолчанию в один поток сжимают. У zstd есть что-то вроде алиаса - zstdmt, он жмет сразу с опцией -T0. А вот squashfs просто обязан в многопоточном режиме работать)

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
  • Автор темы
Re: алгоритмы сжатия/распаковки
« Ответ #2 : 20 Январь 2019, 21:20:34 »
У zstd есть что-то вроде алиаса - zstdmt, он жмет сразу с опцией -T0
Xz по умолчанию жмет с -6. Чтобы в zstd хоть как то сравниться размерами выставил максимальное сжатие:
Цитата
% zstdmt -19 -c skype.tar > skype.tar.xz && du -h skype.tar.xz     
skype.tar            : 32.95%   (239933440 => 79061866 bytes, /*stdout*\)     
zstdmt -19 -c skype.tar > skype.tar.xz  137,09s user 1,15s system 342% cpu 40,313 total
76M   skype.tar.xz

И для примера xz из предыдущего сообщения (-T 0):
Цитата
% xz -c -T 0 skype.tar > skype.tar.xz && du -h skype.tar.xz
xz -c -T 0 skype.tar > skype.tar.xz  134,52s user 0,86s system 349% cpu 38,694 total
71M   skype.tar.xz
Код
% zstd -V    
*** zstd command line interface 64-bits v1.3.7, by Yann Collet ***
Код
% uname -a
Linux prar-1811 4.19.2-pf5 #1 SMP PREEMPT Thu Nov 15 07:49:57 MSK 2018 x86_64 GNU/Linux

P.s. Правда сам не понял о чем все это говорит. :)
« Последнее редактирование: 20 Январь 2019, 21:30:14 от krasnyh »

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #3 : 20 Январь 2019, 21:31:48 »
krasnyh, а теперь покажите тест на распаковку :)

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #4 : 20 Январь 2019, 21:37:56 »
Правда сам не понял о чем все это говорит
О том что zstd это золотая середина. Он не призван жать также хорошо как xz, скорее он призван при относительно хорошем сжатии быстро распаковывать. Где-то читал, что для zstd высокие цифры для опции сжатия дают скорость при распаковке, а на размер уже особо не влияют.
P.S. В режиме ультра -19 превращается в -23 -22
« Последнее редактирование: 20 Январь 2019, 22:06:08 от Ильфат »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
  • Автор темы
Re: алгоритмы сжатия/распаковки
« Ответ #5 : 20 Январь 2019, 22:30:50 »
Он не призван жать также хорошо как xz, скорее он призван при относительно хорошем сжатии быстро распаковывать.
Код
% du -h skype_XZ.tar.xz && du -h skype_ZSTD.tar.xz
71M skype_XZ.tar.xz
76M skype_ZSTD.tar.xz
Цитата
% xz -d -c -T 0 skype_XZ.tar.xz > skype_XZ.tar
xz -d -c -T 0 skype_XZ.tar.xz > skype_XZ.tar  6,21s user 0,41s system 99% cpu 6,653 total
Цитата
% time zstdmt -d -c skype_ZSTD.tar.xz > skype_ZSTD.tar
skype_ZSTD.tar.xz   : 239933440 bytes                                         
zstdmt -d -c skype_ZSTD.tar.xz > skype_ZSTD.tar  0,80s user 0,24s system 97% cpu 1,061 total

Цифры конечно безумные у zstd. )

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: алгоритмы сжатия/распаковки
« Ответ #6 : 21 Январь 2019, 10:53:41 »
Хорошо бы выработать инструкцию в вики - что чем актуально жать

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
  • Автор темы
Re: алгоритмы сжатия/распаковки
« Ответ #7 : 21 Январь 2019, 16:10:33 »
Я тут обратил внимание что у нас в PRA все алгоритмы сжатия/распаковки не используют многопоточность.
У нас при компиляции некоторые действия выполняются в один поток, а именно на последней стадии сжатие в пакет *.tar.xz.
https://wiki.archlinux.org/index.php/Makepkg#Utilizing_multiple_cores_on_compression

В spacefm команды архивации/распаковки тоже без учета количества ядер --> xz -cz %N > %O;  xz -cd %x > %G

Так же gzip и bzip2 не умеют в многопоточность. Для них есть аналоги pigz и pbzip2, но они вроде устаревшие. Хотя pigz рекомендован к применению в ссылке выше (арчвики) как замена gzip.

P.s. Алгоритм xz можно поправить алиасом в .bashrc (.zshrc) --> alias xz='xz -T0'
Правда это не сработает здесь --> tar -cvJf %o %N;  tar -xvJf %x (обработчики архивов из spacefm).

upd. Распараллеливаем процессы для ускорения вычислений и выполнения заданий в Linux
« Последнее редактирование: 21 Январь 2019, 16:52:24 от krasnyh »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: алгоритмы сжатия/распаковки
« Ответ #8 : 21 Январь 2019, 18:43:26 »
У нас при компиляции некоторые действия выполняются в один поток
ну так
in /etc/makepkg.conf:
COMPRESSXZ=(xz -c -z - --threads=0)
Надо попробовать. Догадываюсь почему там медленно жалось - в одно из 4 ядер

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #9 : 20 Февраль 2019, 22:13:07 »
У вас в PRA какая версия squashfs-tools?
В репах Арча 4.3-8 и умеет zstd.
Код
	zstd
  -Xcompression-level <compression-level>
<compression-level> should be 1 .. 22 (default 15)
Сжал /usr/share в xz и в zstd чисто посмотреть разницу:
Код
# du -m usr_share.*
358 usr_share.xz.xzm
399 usr_share.zst.xzm
Время упаковки:
xz:
real 332,77
user 514,12
sys 43,80
zstd:
real 147,02
user 181,86
sys 11,30
Степени компрессии по умолчанию

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
  • Автор темы
Re: алгоритмы сжатия/распаковки
« Ответ #10 : 20 Февраль 2019, 22:57:59 »
У вас в PRA какая версия squashfs-tools?
Цитата
% pacman -Qs squashfs-tools                                     
local/squashfs-tools 4.3-6
    Tools for squashfs, a highly compressed read-only filesystem for Linux
Поддержки zstd еще нет.
Код
			Compressors available:
gzip (default)
lzma
lzo
lz4
xz
В squashfs-tools_4.3-8 zstd уже появился https://www.archlinux.org/packages/community/x86_64/squashfs-tools/

Какие рекомендации?:)  Модули сжатые с этим алгоритмом, а не с xz - лучше?

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #11 : 21 Февраль 2019, 01:06:40 »
Какие рекомендации?  Модули сжатые с этим алгоритмом, а не с xz - лучше?
Ну это смотря для кого что лучше. Надо тестировать.
Вот ещё пожал в lzo для сравнения, который у меня на флешке работает наиболее быстро.
Код
# du -m usr_share.lzo.xzm
464     usr_share.lzo.xzm
real 224,51
user 372,47
sys 36,36

Оффлайн betcher

  • Ветеран
  • *****
  • Сообщений: 3019
  • Репутация: +35/-0
    • MagOS linux
Re: алгоритмы сжатия/распаковки
« Ответ #12 : 21 Февраль 2019, 06:10:22 »
А зачем скорость сжатия замерять. Это не особо важный параметр. Надо скорость чтения из смонтированного модуля сравнивать.

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #13 : 21 Февраль 2019, 07:07:58 »
А зачем скорость сжатия замерять.
Надо же изучить зверька со всех сторон)) Но вообще я хотел посмотреть разницу в размерах и по пути измерил скорости сжатия. Размер очень даже порадовал. Больше чем у xz всего на 11.5%. Теперь самое главное скорость распаковки. Днем или вечером сравню.

Оффлайн ilfat

  • Ветеран
  • *****
  • Сообщений: 438
  • Репутация: +11/-0
Re: алгоритмы сжатия/распаковки
« Ответ #14 : 21 Февраль 2019, 07:43:03 »
Днем или вечером сравню.
Не стал тянуть, нашел время)
Копирование из смонтированного модуля в tmpfs с предварительным полным сбросом дискового кэша. Делал по 2-3 теста на алгоритм. Сюда записал лучшие результаты. В одном из тестов lzo опередил zstd на 85 мс, в остальных уступил. Можно сказать разница между ними в пределах погрешности. Результаты на моем железе:
zstd:
real 17,43
user 0,60
sys 14,92
---------------
lzo:
real 17,92
user 0,51
sys 14,85
---------------
xz:
real 51,89
user 0,60
sys 49,44
---------------
Позже можно будет со степенями сжатия поэкспериментировать. Но уже сейчас понятно что zstd очень хорош.