mkpfs сжатие (https://forum.puppyrus.org/index.php?topic=19669.0)
Тесты squashfs zstd (https://forum.puppyrus.org/index.php?topic=21412.msg180003#msg180003)
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 вроде использует многопоточность по умолчанию? Не нашел четкого ответа в сети.
Он не призван жать также хорошо как 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. )
У вас в 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
Степени компрессии по умолчанию
Какие рекомендации? Модули сжатые с этим алгоритмом, а не с xz - лучше?
Ну это смотря для кого что лучше. Надо тестировать.
Вот ещё пожал в lzo для сравнения, который у меня на флешке работает наиболее быстро.
# du -m usr_share.lzo.xzm
464 usr_share.lzo.xzm
real 224,51
user 372,47
sys 36,36
Примерно так.
squashtest lzo, gzip, xz, lz4 --dirs /opt /var
live@pc:~$ squashtest lzo, gzip, xz, lz4 --dirs /opt /var
/usr/local/bin/squashtest: строка 2: /etc/initvars: Нет такого файла или каталога
(пра6408-1-de-ice+rox [gtk2, наверное НЕ-sistemd])
под рутом - тоже самое
Pentium(R) Dual-Core CPU E5200 @ 2.50GHz
Винт Seagate 160G ST3160811AS
write /memory/bundles/42-x-network.xzm zstd -b 512K 178M 45.11 sec
write /memory/bundles/42-x-network.xzm lzo -b 512K 203M 75.21 sec
write /memory/bundles/42-x-network.xzm lz4 -b 512K 260M 8.79 sec
write /memory/bundles/42-x-network.xzm lz4 -Xhc -b 512K 216M 20.00 sec
write /memory/bundles/43-x-multimedia.xzm zstd -b 512K 252M 67.69 sec
write /memory/bundles/43-x-multimedia.xzm lzo -b 512K 284M 102.16 sec
write /memory/bundles/43-x-multimedia.xzm lz4 -b 512K 345M 11.05 sec
write /memory/bundles/43-x-multimedia.xzm lz4 -Xhc -b 512K 298M 25.09 sec
write /memory/bundles/44-x-office.xzm zstd -b 512K 198M 48.39 sec
write /memory/bundles/44-x-office.xzm lzo -b 512K 227M 83.84 sec
write /memory/bundles/44-x-office.xzm lz4 -b 512K 280M 9.65 sec
write /memory/bundles/44-x-office.xzm lz4 -Xhc -b 512K 240M 22.14 sec
write /memory/bundles/45-x-java.xzm zstd -b 512K 50M 12.94 sec
write /memory/bundles/45-x-java.xzm lzo -b 512K 57M 17.77 sec
write /memory/bundles/45-x-java.xzm lz4 -b 512K 71M 3.23 sec
write /memory/bundles/45-x-java.xzm lz4 -Xhc -b 512K 60M 5.19 sec
==========================================================
read all zstd -b 512K 31.53 sec
read all lzo -b 512K 31.34 sec
read all lz4 -b 512K 32.29 sec
read all lz4 -Xhc -b 512K 30.96 sec
write all zstd -b 512K 174.13 sec
write all lzo -b 512K 278.98 sec
write all lz4 -b 512K 32.72 sec
write all lz4 -Xhc -b 512K 72.42 sec
==========================================================
Best read speed -- lz4 -Xhc -b 512K
Best write speed -- lz4 -b 512K
Best compression -- zstd -b 512K
==========================================================
Вот еще тестик. Тут уже столкнул лбами xz и zstd:
sudo squashtest xz -b 512K, zstd -b 512K --dirs /memory/bundles/43*
write /memory/bundles/43-x-multimedia.xzm xz -b 512K 214M 193.82 sec
write /memory/bundles/43-x-multimedia.xzm zstd -b 512K 252M 66.81 sec
==========================================================
read all xz -b 512K 60.02 sec
read all zstd -b 512K 11.38 sec
write all xz -b 512K 193.82 sec
write all zstd -b 512K 66.81 sec
==========================================================
Best read speed -- zstd -b 512K
Best write speed -- zstd -b 512K
Best compression -- xz -b 512K
==========================================================
Тяжелый xz все-таки.
запускать скрипт с тестируемого носителя.
пока запускал до этого: скопировал скрипт в /usr/local/bin (условия загрузки/рабоы системы как и "см. выше" )- результат (на закрытом браузере :)):
live@pc:~$ sudo squashtest lzo, gzip, xz, lz4 --dirs /opt /var
write /opt lzo 16M 7.36 sec
write /opt gzip 14M 5.37 sec
write /opt xz 12M 9.22 sec
write /opt lz4 19M 0.60 sec
write /var lzo 460K 0.85 sec
write /var gzip 360K 0.72 sec
write /var xz 300K 1.32 sec
write /var lz4 596K 0.52 sec
==========================================================
read all lzo 0.07 sec
read all gzip 0.06 sec
read all xz 0.06 sec
read all lz4 0.07 sec
write all lzo/usr/local/bin/squashtest: строка 87: bc: команда не найдена
sec
write all gzip/usr/local/bin/squashtest: строка 87: bc: команда не найдена
sec
write all xz/usr/local/bin/squashtest: строка 87: bc: команда не найдена
sec
write all lz4/usr/local/bin/squashtest: строка 87: bc: команда не найдена
sec
==========================================================
Best read speed -- gzip
Best write speed -- lz4
Best compression -- xz
==========================================================
- что-то не то: write all lz4/usr/local/bin/squashtest: строка 87: bc: команда не найдена
sec
[ Читать далее ]
Ох уж эти ваши спойлеры, кошмар Хромых. Ниче не вижу.
- что-то не то:
Цена легкости ПРА )) Установите bc. Пакманом.
Сравнил степени сжатия zstd, стандартный 15 и максимальный 22, на размер все-таки влияет, а вот скорость распаковки почти одинаковая:
sudo squashtest zstd -b 512K, zstd -Xcompression-level 22 -b 512K --dirs /memory/bundles/43*
write /memory/bundles/43-x-multimedia.xzm zstd -b 512K 252M 66.89 sec
write /memory/bundles/43-x-multimedia.xzmzstd -Xcompression-level 22 -b 512K 238M 169.57 sec
==========================================================
read all zstd -b 512K 11.88 sec
read allzstd -Xcompression-level 22 -b 512K 12.43 sec
write all zstd -b 512K 66.89 sec
write allzstd -Xcompression-level 22 -b 512K 169.57 sec
==========================================================
Best read speed -- zstd -b 512K
Best write speed -- zstd -b 512K
Best compression -- zstd -Xcompression-level 22 -b 512K
==========================================================
У меня какой-то нонсенс. Xz бьет zstd по всем параметрам. Конечно старенький HDD, но все же.
zstd -Xcompression-level 22
% sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 22 -b 512k --dirs /opt /var
./squashtest: строка 2: /etc/initvars: Нет такого файла или каталога
write /opt xz -Xbcj x86 -b 512k 53M 35.09 sec
write /opt zstd -Xcompression-level 22 -b 512k 58M 20.81 sec
write /var xz -Xbcj x86 -b 512k 30M 47.37 sec
write /var zstd -Xcompression-level 22 -b 512k 30M 78.40 sec
==========================================================
read all xz -Xbcj x86 -b 512k 0.15 sec
read all zstd -Xcompression-level 22 -b 512k 0.16 sec
write all xz -Xbcj x86 -b 512k 82.46 sec
write all zstd -Xcompression-level 22 -b 512k 99.21 sec
==========================================================
Best read speed -- xz -Xbcj x86 -b 512k
Best write speed -- xz -Xbcj x86 -b 512k
Best compression -- xz -Xbcj x86 -b 512k
==========================================================
sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 22 -b 512k 686,19s user 17,92s system 350% cpu 3:21,03 total
Параметры для теста брал те, которые проверял sfs http://forum.puppyrus.org/index.php?topic=21412.msg154208#msg154208
upd. zstd -Xcompression-level 18
% sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 18 -b 512k --dirs /opt /var
./squashtest: строка 2: /etc/initvars: Нет такого файла или каталога
write /opt xz -Xbcj x86 -b 512k 53M 34.17 sec
write /optzstd -Xcompression-level 18 -b 512k 58M 16.19 sec
write /var xz -Xbcj x86 -b 512k 30M 47.34 sec
write /varzstd -Xcompression-level 18 -b 512k 32M 29.50 sec
==========================================================
read all xz -Xbcj x86 -b 512k 0.21 sec
read allzstd -Xcompression-level 18 -b 512k 0.14 sec
write all xz -Xbcj x86 -b 512k 81.51 sec
write allzstd -Xcompression-level 18 -b 512k 45.69 sec
==========================================================
Best read speed -- zstd -Xcompression-level 18 -b 512k
Best write speed -- zstd -Xcompression-level 18 -b 512k
Best compression -- xz -Xbcj x86 -b 512k
==========================================================
sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 18 -b 512k 471,18s user 15,69s system 338% cpu 2:23,75 total
upd2. Еще небольшой тест. Из которого видно, что скорость чтения у xz и zstd на моем железе примерно одинаковые.
% sudo du -sh /mnt/live/memory/images/001-prar1811-kr1.pfs
613M /mnt/live/memory/images/001-prar1811-kr1.pfs
% sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 18 -b 512k --dirs /mnt/live/memory/images/001-prar1811-kr1.pfs
./squashtest: строка 2: /etc/initvars: Нет такого файла или каталога
write/mnt/live/memory/images/001-prar1811-kr1.pfs xz -Xbcj x86 -b 512k 131M 120.36 sec
write/mnt/live/memory/images/001-prar1811-kr1.pfszstd -Xcompression-level 18 -b 512k 147M 49.01 sec
==========================================================
read all xz -Xbcj x86 -b 512k 0.21 sec
read allzstd -Xcompression-level 18 -b 512k 0.20 sec
write all xz -Xbcj x86 -b 512k 120.36 sec
write allzstd -Xcompression-level 18 -b 512k 49.01 sec
==========================================================
Best read speed -- zstd -Xcompression-level 18 -b 512k
Best write speed -- zstd -Xcompression-level 18 -b 512k
Best compression -- xz -Xbcj x86 -b 512k
==========================================================
sudo ./squashtest xz -Xbcj x86 -b 512k,zstd -Xcompression-level 18 -b 512k 648,75s user 26,42s system 343% cpu 3:16,51 total
А проц какой?
% inxi -Cxx
CPU: Quad core Intel Xeon E5450 (-MT-MCP-) arch: Penryn rev.10 cache: 6144 KB
flags: (lm nx sse sse2 sse3 sse4_1 ssse3 vmx) bmips: 23999
clock speeds: min/max: 1998/2997 MHz 1: 1997 MHz 2: 1999 MHz 3: 2764 MHz
4: 2511 MHz
подключил bc-1.07.1-2_6408-1.pfs (48К) - заработало:
Еще, чтобы проверить с zstd, подключить ftp://ftp.yandex.ru/puppyrus/puppyrus-a64/pfs-portable/squashfs-tools-zstd-p-4.3-8_64-sf01.pfs
Сам zstd тоже должен быть в системе:
% zstd -V
*** zstd command line interface 64-bits v1.3.7, by Yann Collet ***
upd. Уже zstd 1.3.8-1 https://www.archlinux.org/packages/core/x86_64/zstd/
Изменения в 1.3.8 https://github.com/facebook/zstd/releases/tag/v1.3.8
Почему бы не попробовать на нашем PRA6408-01
Распаковать iso на раздел. В menu.lst прописать:
title PRA64 OLS.
set d=pra64
set k=4.15.4-pf
kernel /%d%/vmlinuz-%k%_64 dir=%d% rw quiet load=mesa;theme-pop;-gtk2-;palemoon
initrd /%d%/initrd.xz
Добавить ftp://ftp.yandex.ru/puppyrus/puppyrus-a64/pfs-portable/squashfs-tools-zstd-p-4.3-8_64-sf01.pfs
И установить zstd (не знал, что он отсутствует :)):
sudo pacman2pfs zstd
Для правильной работы тестового скрипта squashtest, доустановить bc:
sudo pacman2pfs bc
Перепаковал себе систему в zstd, потестирую, посмотрю.
$ cat /etc/pfs.cfg
compression="-b 512K -comp zstd -Xcompression-level 18"
Пример скрипта (https://forum.puppyrus.org/index.php?topic=21704.msg157271#msg157271) перепаковки, без учета подмодулей.
Пробовал выдрать куски из pfsrebuild, но там черт ногу сломает. :) Да и подумал, для пользователя нет никакой нужды в этих субмодулях, если только для удобства разработчика, при добавлении/удалении пакетов. Но, если разрабы оптимизируют упомянутый скрипт, хуже не будет, думаю. )
Что заметил уже.
- У меня нет рабочего стола и меню опенбокса по ПКМ теперь быстрее прорисовывается/перечитывается, раньше была ощутимая задержка.
- Быстрее запускается второе окно mpv, к уже воспроизводящему видео/аудио первому.
- Быстрее читается папка /usr/bin, там около 2000 файлов.
- Так же осознал, что gtk3 приложения тормозные и им ничем не поможешь. Наглядный пример spacefm, как не убыстряй чтение, он всегда будет запускаться с небольшой задержкой, и первый раз и второй и десятый.... Так же transmission-gtk. При этом AzPainter вылетает как чертик из табакерки. ) Я не говорю что это хорошо и должно быть для всех приложений, но это пример.
Такие вот несколько мелочей, для начала.
И да, у меня из prar2103/de-ovs взята только /base, остальное доустановил в монолит по списку своих пакетов:
$ sudo pacman2pfs $(cat /mnt/sda3/мои_пакеты_pfs-test.txt)
$ inxi -C
CPU: Quad core Intel Xeon E5450 (-MT-MCP-) cache: 6144 KB
clock speeds: max: 2997 MHz 1: 1998 MHz 2: 2098 MHz 3: 1998 MHz 4: 1998 MHz
p.s. Сначала пробовал -b 1M -comp zstd -Xcompression-level 22, он не настолько разрастается в размере, но по быстродействию показалось, что это близко к xz.
Помимо этой темы, алгоритмы еще обсуждались в mkpfs сжатие (https://forum.puppyrus.org/index.php?topic=19669.0). И здесь Changes/OptimizeSquash (https://fedoraproject.org/wiki/Changes/OptimizeSquashFS), там хорошие скрины.
p.s.2. Ну и повторюсь по поводу dwarfs, который zstd, но жмет в меньший размер, чем xz. Раньше я выражал неудовольствие медленным сканированием, но если поместить папку в /tmp или ~/live, то пролетает быстрее молнии. )
Пример скрипта (https://forum.puppyrus.org/index.php?topic=21704.msg157271#msg157271) перепаковки, без учета подмодулей.
Был неправ, все же mkpfs считывает инфу о подмодулях.
live@roll2103 % pfsinfo 000-kernel-5.13.0-pf5-lf5_64.pfs
cryptsetup-static-1.4.3-1-any
linux-pf-generic-5.13.5-4-x86_64
linux-pf-preset-default-5.11.0.pf2-1-x86_64
uksmd-git-0.0.0.r19.b6af35c-1-x86_64
z-kern
live@roll2103 % unsquashfs -s 000-kernel-5.13.0-pf5-lf5_64.pfs | grep -E 'zstd|compression'
Compression zstd
compression-level 18
upd. Просто привык, что в гуи pfs-mk, если не выбрать "Склеить", то соберет в монолит. А тут получается, что консольный вариант справился без всяких доп. ключей.
Или сыграло, что в качестве исходной папки используется bundles. Но я не знал о таком замечательном эффекте. )