Як зробити 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, але тоді воно не є частиною архіву.
afrazier

Відповіді:


36

Якщо ви отримуєте бета-версію 7-Zip 9.13, ви можете змінити тип архіву на LZMA2 і, таким чином, мати можливість використовувати стільки потоків, скільки вам подобається, хоча використання пам'яті збільшується надзвичайно.

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

Це має потенціал значно підвищити продуктивність на> 2-х основних процесорах, оскільки це можна краще налаштувати на вашу систему, а звичайний метод стиснення може обробляти лише 2 потоки максимум.

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

alt текст


Anandtech.com використовує 7-Zip, щоб допомогти порівняти ефективність роботи в багатоядерних та багатопотокових процесорах, що в іншому випадку є більш теоретичним для більшості програмного забезпечення цього покоління.
кмарш

5
Що таке аргумент командного рядка для включення LZMA2?
djangofan

@Monkubai: В i7 4c-8t в моєму кабінеті я не можу отримати 7-zip запуск повного 8-ядерного режиму в режимі LZMA2 незалежно від налаштування. Тільки метод дозволяє запустити всі 8-потоки, використовуючи алгоритми BZip2 (з випадаючого меню), який має нижчий коефіцієнт стиснення.
Едвард

@Edward яку версію ви використовуєте? Якщо я виберу lzma2 зі списку о 9.20, я отримую можливість використовувати до 8 ядер.
Мокубай

2
@Mokubai 9.20 офіційна версія. І з графічним інтерфейсом нічого поганого, він все ще відображає параметр 8/8 ядер на панелі налаштувань, але при обробці він використовує лише <20% процесор. Я зробив швидке дослідження в SU для цього питання, але ще не з'ясував причину цього дивного. Просто знайте, що якщо я використовую командний рядок 7z з таким параметром, як -m0 = lzma2 -mmt = 8, тоді стиснення вивільняє ~ 100% процесора, але як тільки я переключаюсь на GUI, він повертається в режим однопотокового зв’язку або щось подібне ... яке використовувати процесор дуже неефективно (<20%).
Едвард

31

Оскільки, здається, кожен потік одночасно стискає кілька файлів, найкраще, що ви можете зробити для підвищення продуктивності дуже великих завдань на Zip, це встановити потоки на 1, щоб бути впевненим, що ваш жорсткий диск буде шукати один файл одночасно.

Ми покращуємо ефективність усіх наших щоденних процедур резервного копіювання, додаючи -mmt=offдо командного рядка 7-zip. Наше резервне копіювання "візуального сховища SVN", яке складається з декількох невеликих файлів, займало від 50 до 60 хвилин.

Тепер -mmt=offми завжди працюємо менше ніж за п'ять хвилин! І за ці 50 хвилин усі наші сервери були дуже повільними через пошук жорстких дисків. Тепер все залишається дуже швидко протягом цих п’яти хвилин.

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

Також краще читати з disk1 і писати свій ZIP на disk2, оскільки фізична голова не рухається від читання до запису.

Зразок лінії для отримання максимальної швидкості ZIP при збереженні продуктивності машини:

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

D:і T:є двома різними фізичними дисками


5
Дивно, що це якраз протилежна запропонованій відповіді, але насправді правильна. Щойно я зробив операцію з архівом з 12 годин на 2, змінивши використання однієї нитки.
N Jones

2
Правда. Це працювало і для мене. Напевно, це має сенс, оскільки він використовує -mx=1(що майже не стискається). Якщо ви не стискаєте, більшу частину роботи виконує HDD. Якщо встановити -mx=9процесори дійсно потрібно працювати над стисканням файлу. Мені потрібно було б спробувати, але залежно від того, що вузьке місце (HDD або процесор), може бути краще чи гірше.
Дієго Янчич

9
Ця відповідь дуже специфічна для технології старіння. Мабуть, не корисно спробувати це з SSD, оскільки час пошуку набагато нижчий. Випадковий IOPS рідше є вузьким місцем. Ваш випадок був досить особливим, оскільки ви виконували дуже малу компресію. В основному ви робили копію файлів. Тож так, послідовний доступ до обертового HD очевидно є переможцем. Типові випадки використання 7zip, ймовірно, пов'язані з процесором, а не зв'язані з IO. Для цього необхідне використання всіх ядер процесора. Але для тих, хто в подібній ситуації, ваша порада дуже цінна.
dss539

1
Використання -mmt=offшвидше навіть з -m0=lzma2 -mx=5. (Без -mmt=off: реальні 1м27.811с, користувач 2м4.976с, сис 0м3.729с . З -mmt=off: реальні 1м18.896с, користувач 1м17.160с, сис 0м1.661с )
ostrokach

Здається, мені набагато повільніше скорочення потоків до 1. З 1 потоком для 20 ГБ файлів вона оброблялася зі швидкістю близько 2 Мб / сек. З 16 потоками вона оброблялася зі швидкістю 16 Мб / сек.
Lightyear Buzz

0

Усі алгоритми стиснення, які я нещодавно використовував (ZIP, RAR, 7z, tar / bzip2), пов'язані введенням / виводом, а не пов'язані з процесором. Перегляд MenuMeters на моєму ноутбуці Mac демонструє постійну активність диска, але лише 50% або менше процесорної активності.

Таким чином, спосіб прискорити стиснення / декомпресію - пришвидшити ваш диск. Це не завжди можливо.

Моє "рішення" цього - просто робити щось інше, поки я щось стискаю. :-)


2
Якщо проблема вводу / виводу диска була проблемою Метта, це означало б, що WinRAR якимось чином здатний читати з диска швидше, ніж 7Zip у своїй системі ... Це мені здається малоймовірним.
foraidt

1
Можливо, що WinRAR використовує розумніші дискові введення / виведення; Я знаю, що поштовий індекс Info-ZIP перешкоджає його справді невеликим буферам вводу-виводу. Але так, це може бути різницею між алгоритмами стиснення.
Кріш

7z, звичайно, не пов'язаний вводу / виводу навіть у швидкому режимі.
Sarge Borsch

Більшість описаних вами методів не стискаються паралельно, тому лише 1 ядро ​​вашого процесора використовується, отже, на 2-х основній машині ви отримуєте 50%. Я боюся, що CPU пов'язаний з вашим mac, не пов'язаний з IO, і більшість Mac мають 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-бітну), продуктивність значно знизилася, тому я вирішив повернутися до старої версії.


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 перелічені каталоги за розміром, від найменшого до найбільшого. Це відбувається тому, що на кожному циклі передбачення 7zip створює тимчасовий файл, який є таким же великим (або більшим), ніж вихідний, а потім додає до них новий файл. Я спробував у випадках, коли є два або більше каталогів великим деяким Мб і одним великим багато ГБ, і економія часу складає близько декількох хвилин.


Я вважаю, що це стосується лише додавання файлів до наявного архіву. При додаванні декількох файлів одночасно буде використовуватися лише один тимчасовий файл. При створенні нового архіву тимчасовий файл взагалі не використовувався.
Даніель Б

-1

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


6
Не зовсім правда. Ви можете швидко прискорити 7-zip, просто змінивши його за замовчуванням. Фактично налаштування за замовчуванням налаштовуються на найменший розмір файлу (і найповільніший алгоритм стиснення - BZip2). Якщо змінити його на стиснення ZIP та LZMA на "Найшвидший", це робить його значно швидшим.
NickG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.