Как сделать 7-Zip быстрее

35

Обычно я использую WinRAR вместо 7-Zip просто потому, что он быстрее и только немного менее эффективен при сжатии. Я провел несколько тестов для файлов разных типов и размеров, сравнивая настройки по умолчанию для 7-Zip и WinRAR с их обычным сжатием и наилучшим сжатием, и во многих случаях WinRAR был на 50% быстрее, а в некоторых - на 100% быстрее. Но мне больше нравится FOSS. Итак, вот мои вопросы:

  1. Есть ли способ ускорить 7-Zip? Я хотел бы, чтобы это было по крайней мере на одном уровне со скоростью WinRAR
  2. Есть ли способ сделать сегменты восстановления в 7-Zip, как вы можете в WinRAR? Я ничего не видел, но, думаю, это может быть из командной строки.
  3. Я протестировал WinRAR и 7-Zip, используя последнюю стабильную версию каждого (4-точечный что-то с 7-Zip). Бета-версия 9.x заметно быстрее при сжатии?

Я говорю о более быстром при сопоставимой настройке в WinRAR, а не просто о снижении до минимума сжатия.

Если это имеет значение, я использую четырехъядерный процессор Intel i7 720 (1,6 ГГц) / (2,8 ГГц) с 4 ГБ оперативной памяти DDR3, а также 64-разрядную версию 7-Zip и двухзагрузочную версию Debian x64 5.0.4 и Windows 7 Главная.

Кефка
источник
1
Относительно # 2 - 7-zip в настоящее время не имеет какой-либо способности «запись восстановления» или «ecc». Вам потребуется стороннее программное обеспечение, такое как QuickPar / MultiPar или ICE ECC, но тогда оно не является частью архива.
Размягчитель

Ответы:

36

Если вы получите бета-версию 7-Zip 9.13, вы можете изменить тип архива на LZMA2 и, таким образом, сможете использовать столько потоков, сколько захотите, хотя использование памяти феноменально возрастает.

Установите бета-версию, щелкните правой кнопкой мыши материал, который вы хотите заархивировать, затем в контекстном меню 7-Zip нажмите «Добавить в архив ...», и вы получите нечто похожее на окно ниже. В левой части под «Compression Method» вы найдете «LZMA2», который позволит вам изменить количество потоков, что будет опцией чуть ниже.

Это может значительно увеличить производительность на> двухядерных процессорах, так как его можно лучше настроить для вашей системы, а обычный метод сжатия может обрабатывать максимум 2 потока.

«/ 1», которое вы видите справа от поля выбора количества потоков на изображении, - это количество процессоров в вашей системе и, следовательно, рекомендуемое количество потоков. Мой i7 является четырехъядерным процессором, но имеет гиперпоточность (что на самом деле помогает здесь, кстати), поэтому он отображается как "/ 8"

альтернативный текст

Мокубай
источник
Anandtech.com использует 7-Zip, чтобы помочь в улучшении производительности, обнаруживаемой в многоядерных и многопоточных процессорах, что в других случаях является более теоретическим в большинстве программ этого поколения.
kmarsh
5
Что такое командная строка arg для включения LZMA2?
Джангофан
@Monkubai: В i7 4c-8t в моем офисе я не могу получить полный 8-ядерный 7-zip в режиме LZMA2 независимо от того, какая настройка установлена. Единственный метод, позволяющий запустить все 8 потоков, использует алгоритмы BZip2 (из выпадающего меню), которые имеют более низкую степень сжатия.
Эдвард
@ Эдвард, какую версию вы используете? 9.20, если я выберу lzma2 из этого списка, я получу возможность использовать до 8 ядер.
Мокубай
2
@Mokubai 9.20 официальная версия. И в графическом интерфейсе нет ничего плохого, он по-прежнему отображает параметр 8/8 ядер на панели настроек, но при обработке он использует только <20% ЦП. Я провел быстрое исследование в SU для этой проблемы, но еще не выяснил причину этого странного. Просто знайте, что если я использую командную строку 7z с таким параметром, как -m0 = lzma2 -mmt = 8, тогда сжатие будет использовать ~ 100% ЦП, но как только я переключусь на GUI, он вернется в однопоточный режим или что-то в этом роде ... использовать процессор очень неэффективно (<20%).
Эдвард
31

Поскольку каждый поток, по-видимому, сжимает несколько файлов одновременно, лучшее, что вы можете сделать для увеличения производительности очень больших zip-заданий, это установить потоки равными 1, чтобы быть уверенным, что ваш жесткий диск будет искать по одному файлу за раз.

Мы повышаем производительность всех наших ежедневных процедур резервного копирования в zip-архивы, добавляя -mmt=offв командную строку 7-zip. Наша резервная копия «визуального репозитория SVN», которая состоит из нескольких небольших файлов, занимала от 50 до 60 минут.

С -mmt=off, мы теперь всегда делаем менее чем за пять минут! И в течение этих 50 минут все наши серверы работали очень медленно из-за поиска жестких дисков. Теперь все остается очень быстро в течение этих пяти минут.

Для всего, что вы делаете на компьютере, активность жесткого диска всегда будет ниже, чем ваш процессор. Вы можете повысить производительность диска, отключив параллельные операции и убедившись, что жесткий диск последовательно читает (и записывает) ваши файлы.

Также лучше читать с диска 1 и записывать ZIP на диск 2, так как физическая голова не переходит от чтения к записи.

Пример строки, чтобы получить максимальную скорость ZIP при сохранении производительности вашего аппарата:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D:и T:2 разных физических диска

Фредерик Маленфант
источник
5
Удивительно, что это полная противоположность предложенному ответу, но на самом деле это правильно. Я только что сделал операцию архивирования с 12 часов до 2, перейдя на использование одного потока.
N Jones
2
Правда. Это сработало и для меня. Вероятно, это имеет смысл, потому что он использует -mx=1(который почти не сжат). Если вы не сжимаете, большая часть работы выполняется с жесткого диска. Если вы установите -mx=9процессоры действительно нужно работать, чтобы сжать файл. Я должен был бы попробовать это, но в зависимости от того, что является узким местом (жесткий диск или процессор), это могло бы быть лучше или хуже.
Диего Янчич
9
Этот ответ очень специфичен для технологии старения. Вероятно, бесполезно пробовать это с твердотельными накопителями, потому что время поиска намного меньше. Случайное IOPS менее вероятно, будет узким местом. Ваш случай был довольно особенным, потому что вы выполняли очень небольшое сжатие. В основном вы делали копию файла. Так что да, последовательный доступ к крутящемуся HD явно выиграл. Типичные сценарии использования 7zip, скорее всего, будут связаны с процессором, а не с IO. Для этого необходимо использовать все ядра процессора. Но для тех, кто находится в подобной ситуации, ваш совет очень ценен.
dss539
1
Использование -mmt=offбыстрее даже с -m0=lzma2 -mx=5. (Без -mmt=off: реальный 1m27.811s, пользователь 2m4.976s, sys 0m3.729s . С -mmt=off: real 1m18.896s, пользователь 1m17.160s, sys 0m1.661s )
ostrokach
Кажется, мне намного медленнее уменьшать потоки до 1. При 1 потоке для 20 ГБ файлов он обрабатывал со скоростью около 2 МБ / с. С 16 потоками он обрабатывался со скоростью около 16 МБ / с.
Lightyear Buzz
0

Все алгоритмы сжатия, которые я использовал недавно (ZIP, RAR, 7z, tar / bzip2), связаны с вводом-выводом, а не с процессором. Наблюдение за MenuMeters на моем ноутбуке Mac показывает постоянную активность диска, но только 50% или меньше активности процессора.

Таким образом, способ ускорить сжатие / распаковку состоит в том, чтобы ускорить ваш диск. Это не всегда возможно.

Мое «решение» этого состоит в том, чтобы просто сделать что-то еще, пока я что-то сжимаю. :-)

chrish
источник
2
Если бы дисковый ввод-вывод был проблемой Мэтта, это означало бы, что WinRAR каким-то образом способен читать с диска быстрее, чем 7Zip в его системе ... Это звучит маловероятно для меня.
Foraidt
1
Возможно, что WinRAR использует более умный дисковый ввод-вывод; Я знаю, что ZIP-архиву Info-ZIP мешают очень маленькие буферы ввода / вывода. Но да, это может быть разница между алгоритмами сжатия.
26
7z, конечно, не связан с вводом / выводом даже в быстром режиме.
Сардж Борщ
Большинство описанных вами методов не сжимают параллельно, поэтому используется только 1 ядро ​​вашего процессора, следовательно, на 2-ядерном компьютере вы получаете 50%. Я боюсь, что процессор Mac связан с вашим Mac, а не IO, и большинство компьютеров имеют SSD, которые не страдают от поиска дисков. 7z может сжимать параллельно, если вы выберете опцию для этого. (tar, zip, bzip, gzip, xs обычно нет)
Мартин,
0

В моей компании мы работаем со старой версией 7-zip (бета-версия 4.52) и выполняем следующую команду:

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

Это работает нормально, но после обновления до новой версии 16.04 (32-разрядной) производительность сильно упала, поэтому я решил вернуться к старой версии.

Dominique
источник
0

Еще один маленький трюк для повышения производительности при использовании кода, подобного этому примеру:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

если возможно, в массиве $ ListDir перечислены каталоги по размеру, от наименьшего к наибольшему. Это происходит потому, что в каждом цикле foreach 7zip создает временный файл, который больше (или больше) исходного, а затем добавляет в него новый файл. Я пробовал в случаях, когда есть два или более каталогов размером несколько МБ и один большой много ГБ, и экономия времени составляет порядка нескольких минут.

Макс Монтерумиси
источник
Я считаю, что это применимо только при добавлении файлов в существующий архив. При добавлении нескольких файлов одновременно будет использоваться только один временный файл. При создании нового архива временный файл не будет использоваться вообще.
Даниэль Б.
-1

Я предполагаю, что ускорение 7-Zip невозможно без переписывания его алгоритмов сжатия / распаковки, может быть какая-то подстройка, которая увеличивает скорость, но это, вероятно, будет только увеличением на 10 или 15%, а не массовым Увеличение на 50-100%, что вы ищете.

Joshkunz
источник
6
Совсем не правда. Вы можете значительно ускорить 7-zip, просто изменив настройки по умолчанию. На самом деле настройки по умолчанию настроены на самый маленький размер файла (и самый медленный алгоритм сжатия - BZip2). Изменение его на ZIP и сжатие LZMA, установленное на «Самый быстрый», значительно ускоряет его.
NickG