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

95402
Mella

Обычно я использую 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 Главная.

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

6 ответов на вопрос

31
Mokubai

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

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

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

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

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

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

Поскольку каждый поток, по-видимому, сжимает несколько файлов одновременно, лучшее, что вы можете сделать для повышения производительности очень больших заданий 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 разных физических диска

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

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

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

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

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

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

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

В моей компании мы работаем со старой версией 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-разрядной) производительность сильно упала, поэтому я решил вернуться к старой версии.

0
Max Monterumisi

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

$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 создает временный файл, который больше (или больше) исходного, а затем добавляет новый файл внутри них. Я пробовал в случаях, когда есть два или более каталогов размером несколько МБ и один большой много ГБ, и экономия времени составляет порядка нескольких минут.

Я считаю, что это применимо только при добавлении файлов в существующий архив. При добавлении нескольких файлов одновременно будет использоваться только один временный файл. При создании нового архива временный файл не будет использоваться вообще. Daniel B 5 лет назад 0