16

(Я сначала опубликовал это на сервере, но потом понял, что это, вероятно, здесь).

Я пытаюсь сжать очень большой текстовый файл, используя 7za (p7zip) 9.20. Опция -mmt, похоже, не имеет никакого эффекта. Я пробовал оба -mmt = on и -mmt = 2. Это 8-ядерный компьютер. Один человек предложил добавить -m0 = lzma2 в качестве аргумента, но это просто дает мне E_INVALIDARG. Кто-нибудь знает, как заставить это работать?

Это не имеет никакого эффекта:

7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt

И это не с ошибкой:

7za a -m0=lzma2 -mx=9 -mmt=2 -p myarchive.zip bigfile.txt


7-Zip (A) [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)
Scanning

Creating archive release_20120601-1-http.zip



System error:
E_INVALIDARG

2 ответа2

24

Согласно -m (Set Метод сжатия) Переключатель # ZipMultiThread - 7ZIP руководство и документация, mt по умолчанию on так что нет необходимости указывать его вообще.

Однако реализация алгоритма DEFLATE в 7zip не поддерживает многопоточность!

Как вы уже обнаружили,

7za a archive.zip bigfile

использует только одно ядро.

Но файлы .zip сжимают каждый файл индивидуально. При сжатии нескольких файлов опция многопоточности сжимает один файл на ядро одновременно.

Попробуйте, и вы увидите, что

7za a archive.zip bigfile1 ... bigfileN

будет использовать все доступные N ядер.

Если вы хотите ускорить сжатие одного файла, у вас есть два варианта:

  1. Разделите bigfile на куски.

  2. Используйте другой алгоритм сжатия.

    Например, реализация алгоритма BZip2 в 7zip поддерживает многопоточность.

    Синтаксис:

    7za a -mm=BZip2 archive.zip bigfile
    

Кроме того, синтаксическая ошибка вызвана вашей попыткой использовать алгоритм LZM для контейнера .zip . Это невозможно.

Возможные алгоритмы для .zip conatiners: DEFLATE(64), BZip2 и без сжатия.

Если вы хотите использовать алгоритм LZM, используйте контейнер .7z . Этот контейнер также обрабатывает следующие алгоритмы: PPMd, BZip2, DEFLATE, BCJ, BCJ2 и без сжатия.

5

Это старый вопрос, и не ответ на конкретный вопрос, а ответ на дух вопроса (Использование всех ядер для сжатия формата zip)

pigz (параллельный gzip с опцией .zip)

pigz -K -k archive.zip bigfile txt

Это даст вам zip-совместимый файл в 7 раз быстрее для того же уровня сжатия.

Быстрое сравнение zip-совместимых и не zip-компрессоров с использованием одного и нескольких ядер.

время на i7-2600k, чтобы сжать 1,0 ГБ TXT-файла на Fedora 20

67s (120mb) 7za (zip,1 thread)
15s (141mb) 7za -mx=4 (zip,1 thread)
17s (132mb) zip (zip,1 thread)
 5s (131mb) pigz -K -k (zip,8 threads)
 9s (106mb) bsc (libbsc.com) (not zip,8 threads)
 5s (130mb) zhuff -c2 (not zip,8 threads)
 2s (149mb) zhuff (not zip,8 threads)

настенные времена, чтобы распаковать

4.2s unzip -t
2.0s pigz -t
5.1s bsc d
0.5s zhuff -d

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .