LINUX.ORG.RU

xz: вопрос о многопоточности сжатия

 , , ,


1

1

Друзья!

Нашёл на нашем ЛОРе тему за 2012 (по моему) год, где человек показывал, как отличается сжатие xz в один поток и в восемь. Мол, «я счастливый обладатель восьми ядер», говорил он. Для этого он применил ключ -T8. Решил я сжать свою домашнюю папку в архивную копию тоже в несколько потоков. А раз так, то нужно прочесть man xz. И что же я увидел:

Multithreaded compression and decompression are not implemented yet, so this option has no effect for now.

И далее:

As of writing (2010-09-27), it hasn't been decided if threads will be used by default on multicore systems once support for threading has been implemented. Comments are welcome. The complicating factor is that using many threads will increase the memory usage dramatically. Note that if multithreading will be the default, it will probably be done so that single-threaded and multithreaded modes produce the same output, so compression ratio won't be significantly affected if threading will be enabled by default.

Друзья! Так что, как говорится в man, ваши Comments очень даже are welcome.

[ebuild   R    ] app-arch/xz-utils-5.2.1::gentoo  USE="nls threads -static-libs" ABI_X86="32 (64) (-x32)" 1,421 KiB

если он не умеет многопоток, то зачем флаг threads?

Alyssa
()

Тебе надо понять разницу между thread и worker в данном контексте. Дерзай! RTFM ждет тебя!

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

Цитата из man

DO NOT USE the 7-zip format for backup purpose on Linux/Unix because : - 7-zip does not store the owner/group of the file.

Меня это оттолкнуло. Я не прав?

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

Тебе надо понять разницу между thread и worker в данном контексте. Дерзай!

Учитель мог бы указать путь? А то голова так забита проблемами, что ещё одной головоломки будет многовато :)

melcomtec
() автор топика
Ответ на: Цитата из man от melcomtec

Если ты бэкапишь хомяк, то я не вижу особых проблем. Ещё можно попробовать сделать backup.tar.7z.

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

«По дефолту» или нужно указывать -Т[число потоков]?

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

У меня речь идёт об Ubuntu 14.04 LTS. Тут:

$ xz -V
xz (XZ Utils) 5.1.0alpha
liblzma 5.1.0alpha
melcomtec
() автор топика

Что мешает взять и проверить? Запускаешь сжатие чего-нибудь большого и смотришь по *top, сколько ядер занято, сколько потоков у xz.

tiandrey ★★★★★
()
Ответ на: Цитата из man от melcomtec

7-zip does not store the owner/group of the file.

Если делаешь бекап, запакуй всё в tar (который на самом деле просто делает один файл из многих и сохраняет всю информацию о правах, атрибутах и так далее) и уже tar сожми в 7Zip.

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

5.2.1 - сжатие в два потока, но только с опцией -T2, без неё - в один поток.

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

Огромное спасибо!

Я правильно понимаю, что для сжатия домашнего каталога нужно писать так:

sudo tar -cvf myname.tar /home/myname | pxz -9 -T2 > myname.tar.xz

?

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

Этот флаг, судя по всему, был добавлен «на будущее», потому что в 5.0.8 такой функциональности ещё нет, а флаг - есть.

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

C xz можно так: XZ_OPT="-9 -T2" tar cJf tarfile.tar.xz directory

A pxz видимо скоро закопают, раз уж в xz доделали многопоточность

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

Во-первых, sudo тут, скорее всего, не нужен - у пользователя есть права на свою домашнюю директорию.

Во-вторых, надо ещё перенаправление на стандартный ввод-вывод - для tar это ключ -O, чтобы на стандартный выход сжимать данные.

И лучше тогда использовать xz, если он сам поддерживает многопоточность.

tiandrey ★★★★★
()

pixz

Нашёл интересную штуку: pixz. Описание её возможностей привлекло моё внимание. То, что надо! Особенно, если учесть мою задачу.

pixz - parallel, indexed xz compressor

pixz compresses and decompresses files using multiple processors. If the input looks like a tar archive, it also creates an index of all the files in the archive. This allows the extraction of only a small segment of the tarball, without needing to decompress the entire archive.

melcomtec
() автор топика
13 июня 2015 г.

Просто обнови xz. Долгое время версия, умеющая в многопоточность, была эксперементальной. Релизнулась в этом году (может в конце прошлого, не уверен). И сейчас (на актуальной версии) xz -T4 -9 --verbose жмёт в 3–4 раза быстрее, чем просто xz -9 --verbose, нагружая все ядра. Но есть некоторые особенности. Это работает только когда есть файл, например tar, на который запускается команда. Если данные приходят из пайпа, то жмёт всё равно в один поток. Поэтому если хочется сжать каталог с файлами побыстрее, уже нельзя сделать это в одно действие, надо сначала тарить, потом уже жать получившийся тар.

Psych218 ★★★★★
()
19 июля 2015 г.
Ответ на: комментарий от Psych218

Не совсем так, если изначально задать переменную для xz - то всё работает прекрасно, к примеру у меня это реализовано через переменные окружения в самосозданном файлике /etc/env.d/00arch который содержит такую вот начинку: XZ_OPT="-v -9 -e -T0" и всё работает на ура... :)

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

зачем пруф, когда можно проверить. а мне лень

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

Пруф?!?

[16:40] /tmp/tmp.ReYOx9b5Ta % diff librusec-Аб-*
[16:40] /tmp/tmp.ReYOx9b5Ta % ls
librusec-Аб-1.tar  librusec-Аб-2.tar
[16:40] /tmp/tmp.ReYOx9b5Ta % xz -v9 librusec-Аб-1.tar 
librusec-Аб-1.tar (1/1)
  100 %     379,1 MiB / 1 187,7 MiB = 0,319   2,0 MiB/s      10:03             
[16:50] /tmp/tmp.ReYOx9b5Ta % xz -v9 -T4 librusec-Аб-2.tar  
librusec-Аб-2.tar (1/1)
  100 %     385,3 MiB / 1 187,7 MiB = 0,324   5,2 MiB/s       3:46

385.3 > 379.1

Psych218 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.