LINUX.ORG.RU

Упаковка .zip использует одинпоток из 12-и, и скорость — менее 39 MB/s

 , , ,


0

3

Что можно сделать для того, чтобы архивы паковались всеми 12-ю потоками?

[dragonserw@fedora ~]$ inxi -b
System:
  Host: fedora Kernel: 6.2.13-300.fc38.x86_64 arch: x86_64 bits: 64
    Desktop: GNOME v: 44.1 Distro: Fedora release 38 (Thirty Eight)
Machine:
  Type: Desktop System: Dell product: OptiPlex 3080 v: N/A
    serial: <superuser required>
  Mobo: Dell model: 0J2J3Y v: A00 serial: <superuser required> UEFI: Dell
    v: 2.18.0 date: 03/08/2023
CPU:
  Info: 6-core Intel Core i5-10500T [MT MCP] speed (MHz): avg: 1675
    min/max: 800/3800
Graphics:
  Device-1: Intel CometLake-S GT2 [UHD Graphics 630] driver: i915 v: kernel
  Device-2: Logitech B525 HD Webcam type: USB driver: snd-usb-audio,uvcvideo
  Display: wayland server: X.Org v: 22.1.9 with: Xwayland v: 22.1.9
    compositor: gnome-shell driver: dri: iris gpu: i915
    resolution: 1920x1080~60Hz
  API: OpenGL v: 4.6 Mesa 23.0.3 renderer: Mesa Intel UHD Graphics 630 (CML
    GT2)
Network:
  Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
    driver: r8169
  Device-2: Intel Wi-Fi 6 AX200 driver: iwlwifi
Drives:
  Local Storage: total: 462.05 GiB used: 70.93 GiB (15.4%)
Info:
  Processes: 354 Uptime: 5h 7m Memory: 15.36 GiB used: 4.7 GiB (30.6%)
  Shell: Bash inxi: 3.3.26
[dragonserw@fedora ~]$ 

что интересно 7zip игнорирует свитчи типа mmt и сажает всегда свои по-умолчанию 16 тредов


[jtad@li]$ ~/Downloads/7zz -mmt8 -mx6   a test2.zip ostrov.mkv 

7-Zip (z) 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15
 64-bit locale=de_DE.UTF-8 Threads:16, ASM



ps а топ показывает вообче всегда один поток ). Как там сделанно программно я не знаю, но факт что без разницы что делаешь всегда видишь один поток

monkdt
()
Последнее исправление: monkdt (всего исправлений: 2)
Ответ на: комментарий от Jameson

У меня в системе до-установлены только такие пакеты: p7zip p7zip-plugins.

Я пакую по правой кнопке мыши в файловом менеджере Гном, как его там?..

SerW
() автор топика

taskset говорит, что раскидал процесс на 4 ядра, но насколько это соответсвует истине не известно

Top всегда показывает 1 thread, хотя у того же фокса их 106 )

 [jtad@li ~]$ taskset -p 4 20102
     aktuelle Bezugsmaske für PID 20102: f
     neue Bezugsmaske für PID 20102: 4

monkdt
()
Ответ на: комментарий от monkdt

Потому что pid это process id, а не thread id.

Зайди в /proc/PID/tasks - там будут id потоков.

И либо запускай top с нужными ключами, либо запускай htop

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от Dimez

только один, хотя сам 7z говорит у меня их целых 16. В принципе так тоже можно посмотреть колличество тредов

ps -o nlwp 21041

cat /proc/21754/status | grep Threads

Threads:	1
monkdt
()
Последнее исправление: monkdt (всего исправлений: 1)
Ответ на: комментарий от Jameson

lbzip2 или pigz

Эти библиотеки поддерживают архивирование в обычный .zip, чтобы на любой шарманке можно было распаковать архив?

SerW
() автор топика
Последнее исправление: SerW (всего исправлений: 1)

Мда, дожили, уже синглтред программу за баг считают. Автор, zip всегда использует один поток, и не знаю даже зачем тебе нужно больше. Это программа для разового запуска и ей некуда торопиться.

firkax ★★★★★
()
Ответ на: комментарий от Jameson

Хорошо, вот допустим я нахожусь в директории:

cd $HOME/Public/Playground/DevilutionX/org.diasurgical.devilutionx

С какими параметрами мне нужно запустить 7z, чтобы он упаковал в .zip всё содержимое этой директории и обозвал архив по имени материнской директории, то есть org.diasurgical.devilutionx.zip?

SerW
() автор топика
Ответ на: комментарий от firkax

Это программа для разового запуска и ей некуда торопиться.

Ну да, подумаешь, вместо пяти минут будет работать час, делов-то. Программе-то может и некуда торопиться, а пользователю есть куда.

Просто надо использовать современный софт. Выше всё уже ответили.

CrX ★★★
()
Ответ на: комментарий от CrX

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

firkax ★★★★★
()
Ответ на: комментарий от CrX

Просто надо использовать современный софт.

Мне вот стало интересно - а что в контексте архивации в принципе можно распараллелить? Начать жать разные файлы в разных потоках, и потом по мере завершения конкатенировать? Не факт что будет быстрее, по крайней мере я с ходу могу придумать контр-примеры когда будет хуже. Я наверное что-то фундаментальное упускаю…

bugfixer ★★★★
()
Ответ на: комментарий от bugfixer

Мне вот стало интересно - а что в контексте архивации в принципе можно распараллелить? Начать жать разные файлы в разных потоках, и потом по мере завершения конкатенировать?

Ну да.

Не факт что будет быстрее, по крайней мере я с ходу могу придумать контр-примеры когда будет хуже.

На практике будет. Просто сравни сжатие тем же zstd или 7z (lzma2) в один поток и по количеству ядер. Получается быстрее почти во столько раз, сколько ядер использовано.


upd: Ну может с «почти во столько же раз» я немного погорячился, тем не менее:

% time zstd -19 -T1 books-fb2.tar                                         
books-fb2.tar        : 64.99%   (   653 MiB =>    425 MiB, books-fb2.tar.zst)  
zstd -19 -T1 books-fb2.tar  190.78s user 2.32s system 99% cpu 3:14.92 total

% time zstd -19 -T4 books-fb2.tar 
books-fb2.tar        : 64.99%   (   653 MiB =>    425 MiB, books-fb2.tar.zst)  
zstd -19 -T4 books-fb2.tar  240.15s user 1.96s system 340% cpu 1:11.06 total
CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от tommy

Просто .tar.xz даёт лучшую степень сжатия, чем большинство других, при адекватном времени сжатия и распаковки. Никакого фанатства. Появится что-либо лучше, буду пользоваться им.

QsUPt7S
()
Ответ на: комментарий от QsUPt7S

Вообще с временем распаковки у xz как раз не очень…

Попробуй .tar.zst. У zstd него время и степень сжатия близки к xz, но время распаковки намного лучше. Тут, конечно, от юзкейса зависит: если это что-то для бэкапа, то время распаковки неважно, но если это что-то, например, для распространения, что упаковываешь ты один раз, а распаковывают потом сотни людей, то я предпочитаю zstd. Одно дело распаковывать пять минут что-то, другое дело 40 секунд. Ощущается совсем по-разному.

CrX ★★★
()
Ответ на: комментарий от CrX

Меня больше интересует степень сжатия при адекватном времени упаковки, так как распаковываю архивы я не так часто. A вот в этом xz показывает себя лучше, чем zstd:

$ time zstd --compress --threads=4 -19 --keep initramfs-6.2-x86_64.img
initramfs-6.2-x86_64.img : 27.77%   (  32.2 MiB =>   8.94 MiB, initramfs-6.2-x86_64.img.zst)

real    0m12,337s
user    0m13,938s
sys     0m0,129s
$ time xz --verbose --compress --threads=4 -6 --keep initramfs-6.2-x86_64.img
initramfs-6.2-x86_64.img (1/1)
  100 %      8 414,7 KiB / 32,2 MiB = 0,255   3,3 MiB/s       0:09

real    0m9,761s
user    0m13,262s
sys     0m0,157s

P.S.: Использовался заранее распакованный образ initrd.

QsUPt7S
()
Последнее исправление: QsUPt7S (всего исправлений: 1)
Ответ на: комментарий от QsUPt7S

А зачем нужно большее сжатие? Обычно нужно просто удобно упаковать и потом где-то распаковать архив. А про удобство посмотреть отдельный файлик из tar.чегототам особая тема. Другие вот уверяют что zst надо. Вот фанатство и есть. Для себя я упакую в 7zip, другим дам zip. Но особо разницы нет. Главное поддержка на всех платформах и удобство использование. Мне удобна 7zip.

tommy ★★★★★
()
Ответ на: комментарий от QsUPt7S

Ну да, если распаковывать нечасто, то xz лучший вариант. Сам юзаю его для таких случаев, и zstd для тех случаев, когда время распаковки таки имеет значение.

P.S. Ещё я нередко юзаю --ultra -21, а не -19. Так время сжатия (но не распаковки) довольно сильно дольше, но и степень сжатия лучше.

CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Не путайте потоки и процессы. Раньше все потоки выполняли одно ядро, а теперь несколько. Так вот технически они используют другие процессы, в которых могут быть свои потоки. Программа не разбивает на процессы и поэтому не задействует все ядра. А то все вверху перепутались в понятиях.

xwicked ★★☆
()
Ответ на: комментарий от tommy

А зачем нужно большее сжатие?

Чтобы экономить место. // ваш кэп

Вот фанатство и есть. Для себя я упакую в 7zip

Мне удобна 7zip.

Ну да, оно самое, походу.

CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Стандартный zip с алгоритмами inflate/deflate не будет паралелиться, потому что там сжимают поток данных. Паралелятся легко алгоритмы которые делают это блоками. Поэтому даже если возьмете супер программу, которая делает все потоками и натравите на формат стандартного zip - у вас будет работать 1 ядро. Надеюсь это понятно?

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 2)