(Сначала я опубликовал это на сервере, но потом понял, что это, вероятно, здесь).
Я пытаюсь сжать очень большой текстовый файл, используя 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
linux
compression
7-zip
Брайан Л
источник
источник
-mmt
, а не-mmt=2
. Также я считаю, что правильный синтаксис есть-mx9
, хотя оба могут работать.Ответы:
В соответствии с параметром -m (Установить метод сжатия) # ZipMultiThread - руководство и документация 7ZIP , по
mt
умолчанию используется значениеon
, поэтому указывать его вообще не нужно.Однако реализация алгоритма DEFLATE в 7zip не поддерживает многопоточность!
Как вы уже обнаружили,
использует только одно ядро.
Но
.zip
файлы сжимают каждый файл индивидуально. При сжатии нескольких файлов опция многопоточности сжимает один файл на ядро одновременно.Попробуйте, и вы увидите, что
будет использовать все доступные
N
ядра.Если вы хотите ускорить сжатие одного файла, у вас есть два варианта:
Разделить
bigfile
на куски.Используйте другой алгоритм сжатия.
Например, реализация алгоритма BZip2 в 7zip поддерживает многопоточность.
Синтаксис:
Кроме того, синтаксическая ошибка вызвана вашей попыткой использовать алгоритм LZM для
.zip
контейнера. Это невозможно.Возможные алгоритмы для
.zip
conatiners: DEFLATE (64), BZip2 и без сжатия.Если вы хотите использовать алгоритм LZM, используйте
.7z
контейнер. Этот контейнер также обрабатывает следующие алгоритмы: PPMd, BZip2, DEFLATE, BCJ, BCJ2 и без сжатия.источник
.zip
контейнером..ZIP
контейнер.Это старый вопрос, и не ответ на конкретный вопрос, а ответ на дух вопроса (Использование всех ядер для сжатия формата zip)
pigz (параллельный gzip с опцией .zip)
Это даст вам zip-совместимый файл в 7 раз быстрее для того же уровня сжатия.
Быстрое сравнение zip-совместимых и не zip-компрессоров с использованием одного и нескольких ядер.
время на i7-2600k, чтобы сжать 1,0 ГБ TXT-файла на Fedora 20
настенные времена, чтобы распаковать
источник
Просто используйте -mmt [N + 1]
Например: -mmt2 для одного потока, -mmt9 для восьми потоков
источник
Проверено и протестировано: для использования многопоточности на 7za параметр должен быть "-mmt #", а не "-mmt = #", а знак равенства заставляет его игнорировать.
Как я обнаружил? После того, как я запустил 7z без каких-либо параметров, он показывает информацию о параметрах, на переключателях он говорит «-mmt [N]», а не «-mmt = [N]»
Так что, если я хорошо понимаю, параметр, который вы вводите "-mmt = 2", может быть написан неправильно и может быть "-mmt2" без знака равенства.
Не уверен, хорошо ли я понимаю, мой английский очень плохой.
Кстати, почему вы используете «7za» вместо просто «7z»?
Таким образом, чтобы проверить параметр, я запустил набор команд, чтобы выполнить тесты, и это подтвердило ошибку опечатки в некоторой документации. Правильный параметр должен быть напечатан без знака равенства.
Команда для выполнения теста 7z только с одним потоком: 7z b -mmt1
Команда для выполнения теста 7z только с двумя потоками: 7z b -mmt2
Команда для выполнения теста с 7za только с двумя потоками: 7za b -mmt2
Команда для выполнения теста с 7za только с одним потоком: 7za b -mmt1
В параметре ˋ-mmt # sign знака равенства нет, ни для 7z, ни для 7za.
источник