Come rendere 7-Zip più veloce


35

Normalmente utilizzo WinRAR su 7-Zip semplicemente perché è più veloce e solo un po 'meno efficiente con la compressione. Ho fatto alcuni test su diversi tipi di file e dimensioni confrontando le impostazioni predefinite di 7-Zip e WinRAR sulla loro normale compressione e la loro migliore compressione, e in molti casi WinRAR era più veloce del 50% e in alcuni era effettivamente più veloce del 100%. Ma mi piace di più FOSS. Quindi, ecco le mie domande:

  1. C'è un modo per accelerare 7-Zip? Vorrei che fosse almeno alla pari della velocità di WinRAR
  2. C'è un modo per creare segmenti di recupero in 7-Zip come puoi in WinRAR? Non ne ho visto nessuno, ma suppongo che potrebbe essere una cosa da riga di comando.
  3. Ho testato WinRAR e 7-Zip usando l'ultima versione stabile di ciascuno (4-dot-qualcosa con 7-Zip). La versione beta 9.x è notevolmente più veloce alla compressione?

Sto parlando più velocemente con un'impostazione simile in WinRAR, non solo abbassandomi alla minima compressione.

Se è importante, utilizzo un Intel i7 720 quad core (1,6 GHz) / (2,8 GHz) con 4 GB di RAM DDR3 e la versione a 64 bit di 7-Zip e Debian x64 5.0.4 a doppio avvio e Windows 7 Casa.


1
Per quanto riguarda # 2 - 7-zip attualmente non ha alcun tipo di capacità "record di recupero" o "ecc". Avrai bisogno di software di terze parti come QuickPar / MultiPar o ICE ECC, ma non fa parte dell'archivio.
Afrazier

Risposte:


36

Se ottieni la beta 9-Zip 9.13 puoi cambiare il tipo di archivio in LZMA2 e quindi essere in grado di usare tutti i thread che desideri, anche se l'utilizzo della memoria aumenta in modo fenomenale.

Installa la beta, fai clic con il pulsante destro del mouse sugli elementi che desideri archiviare, quindi nel menu contect 7-Zip fai clic su "Aggiungi all'archivio ..." e otterrai qualcosa di simile alla finestra in basso. Sul lato sinistro sotto Metodo di compressione dovresti trovare "LZMA2" che ti permetterà di cambiare il numero di thread che sarà un'opzione un po 'più in basso.

Ciò ha il potenziale di aumentare notevolmente le prestazioni su> 2 processori core in quanto può essere ottimizzato meglio per il tuo sistema e il normale metodo di compressione può gestire solo 2 thread al massimo.

Il "/ 1" che vedi a destra della casella di selezione del numero di thread nell'immagine è il numero di processori nel tuo sistema e quindi il numero raccomandato di thread. Il mio i7 è un processore quad core ma ha hyperthreading (che in realtà aiuta qui tra l'altro) quindi viene visualizzato come "/ 8"

testo alternativo


Anandtech.com ha utilizzato 7-Zip per aiutare a valutare i miglioramenti delle prestazioni che si possono trovare nelle CPU multi-core e multi-thread, che altrimenti sono più teoriche nella maggior parte dei software di questa generazione.
kmarsh

5
Qual è la riga di comando arg per abilitare LZMA2?
Djangofan,

@Monkubai: IN i7 4c-8t nel mio ufficio, non riesco a far funzionare il sistema a 7 core con 8 zip completo in modalità LZMA2 qualunque sia l'impostazione impostata. L'unico metodo che consente di eseguire tutti gli 8 thread è l'utilizzo degli algoritmi BZip2 (dal menu a discesa) con un rapporto di compressione inferiore.
Edward

@Edward quale versione stai usando? Su 9.20 se seleziono lzma2 da quell'elenco ottengo l'opzione per usare fino a 8 core.
Mokubai

2
@Mokubai 9.20 versione ufficiale. E non c'è niente di sbagliato nell'interfaccia utente grafica, mostra ancora il parametro 8/8 core nel pannello delle impostazioni ma durante l'elaborazione in realtà usa solo <20% cpu. Ho fatto una rapida ricerca su SU per il problema, ma non ho ancora capito il motivo di quello strano. Sappi solo che se uso la riga di comando 7z con parametri come -m0 = lzma2 -mmt = 8, la compressione ottimizza ~ 100% CPU ma una volta che passo alla GUI, ritorna alla modalità single thread o qualcosa del genere ... che utilizzare la CPU in modo molto inefficiente (<20%).
Edward,

31

Poiché ogni thread sembra comprimere più file contemporaneamente, la cosa migliore che puoi fare per aumentare le prestazioni di lavori zip di grandi dimensioni è impostare i thread su 1, per essere sicuro che il tuo disco rigido cercherà un file alla volta.

Miglioriamo le prestazioni su tutte le nostre procedure quotidiane di backup zip aggiungendo -mmt=offalla riga di comando 7-zip. Il nostro backup del "repository SVN visivo", che è composto da più file di piccole dimensioni, impiegava da 50 a 60 minuti.

Con -mmt=off, ora lo facciamo sempre in meno di cinque minuti! E, durante questi 50 minuti, tutti i nostri server sono stati molto lenti a causa della ricerca dei dischi rigidi. Ora, tutto rimane molto veloce in quei cinque minuti.

Per tutto ciò che fai su una macchina, l'attività del disco rigido sarà sempre più lenta della capacità della tua CPU. Puoi aumentare le prestazioni del disco disabilitando le attività parallele e assicurandoti che il disco rigido legga (e scriva) i tuoi file uno alla volta in serie.

Inoltre è meglio leggere da disk1 e scrivere il tuo ZIP su disk2, poiché la testa fisica non passa da lettura a scrittura.

Linea di esempio per ottenere la massima velocità ZIP mantenendo le prestazioni della macchina:

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

D:e T:sono 2 diversi dischi fisici


5
Incredibile che questo sia esattamente l'opposto della risposta suggerita, ma in realtà è corretto. Ho appena eseguito un'operazione di archiviazione da 12 ore a 2 passando a un singolo thread.
N Jones,

2
Vero. Questo ha funzionato anche per me. Probabilmente ha senso perché sta usando -mx=1(che è quasi nessuna compressione). Se non si esegue la compressione, la maggior parte del lavoro viene eseguita dall'HDD. Se imposti -mx=9i processori devi davvero lavorare per comprimere il file. Avrei bisogno di provarlo, ma a seconda di quale sia il collo di bottiglia (HDD o CPU), potrebbe essere migliore o peggiore.
Diego Jancic,

9
Questa risposta è molto specifica per una tecnologia che invecchia. Probabilmente non è utile provare questo con SSD perché il tempo di ricerca è molto più basso. Lo IOPS casuale ha meno probabilità di essere il collo di bottiglia. Il tuo caso era piuttosto speciale perché stavi eseguendo una compressione molto piccola. Fondamentalmente stavi facendo una copia del file. Quindi sì, l'accesso sequenziale su una HD rotante è chiaramente un vincitore. I casi d'uso tipici di 7zip saranno probabilmente associati alla CPU, non all'IO. Per questo, è essenziale utilizzare tutti i core della CPU. Ma per chi si trova in una situazione simile, il tuo consiglio è molto prezioso.
dss539,

1
L'uso -mmt=offè più veloce anche con -m0=lzma2 -mx=5. (Senza -mmt=off: reale 1m27.811s, utente 2m4.976s, sys 0m3.729s . Con -mmt=off: real 1m18.896s, user 1m17.160s, sys 0m1.661s )
ostrokach

Mi sembra molto più lento ridurre i thread a 1. Con 1 thread per 20 GB di file, è stato elaborato a una velocità di circa 2 MB / sec. Con 16 thread veniva elaborato a una velocità di circa 16 MB / sec.
Lightyear Buzz,

0

Tutti gli algoritmi di compressione che ho usato di recente (ZIP, RAR, 7z, tar / bzip2) sono associati a I / O, non a CPU. Guardare MenuMeters sul mio laptop Mac mostra un'attività costante del disco, ma solo il 50% o meno dell'attività della CPU.

Pertanto, il modo per accelerare la compressione / decompressione è accelerare il disco. Questo non è sempre possibile.

La mia "soluzione" a questo è semplicemente fare qualcos'altro mentre sto comprimendo qualcosa. :-)


2
Se l'I / O del disco fosse un problema di Matt, ciò significherebbe che WinRAR è in qualche modo in grado di leggere dal disco più velocemente di 7Zip sul suo sistema ... Mi sembra improbabile.
foraidt,

1
È possibile che WinRAR utilizzi l'I / O su disco più intelligente; So che la zip di Info-ZIP è ostacolata dai suoi buffer I / O davvero piccoli. Sì, potrebbe essere una differenza tra gli algoritmi di compressione.
chrish,

7z non è certamente associato agli I / O neanche in modalità veloce.
Sarge Borsch,

La maggior parte dei metodi descritti non si comprime in parallelo, pertanto viene utilizzato solo 1 core della CPU, quindi su una macchina a 2 core si ottiene il 50%. Temo che siano collegati alla CPU sul tuo mac, non legati all'IO e la maggior parte dei mac ha SSD che non soffre davvero di ricerche su disco. 7z può comprimere in parallelo se si sceglie l'opzione per farlo. (tar, zip, bzip, gzip, xs generalmente no)
Martin

0

Nella mia azienda, stiamo lavorando con una vecchia versione di 7-zip (4.52 beta) e stiamo eseguendo il seguente comando:

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

Funziona bene, ma dopo aver appena eseguito l'aggiornamento alla nuova versione 16.04 (32 bit), le prestazioni sono diminuite enormemente, quindi ho deciso di eseguire il downgrade alla versione precedente.


0

Un altro piccolo trucco per migliorare le prestazioni quando si utilizza il codice come questo esempio:

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

è, se possibile, nell'array $ ListDir elencato le directory per dimensione, dalla più piccola alla più grande. Ciò accade perché ad ogni ciclo di foreach 7zip crea un file temporaneo di dimensioni pari o superiori a quello originale, quindi aggiunge al suo interno un nuovo file. Ho provato con casi in cui ci sono due o più directory grandi alcuni MB e una grande molti GB e il risparmio di tempo è dell'ordine di alcuni minuti.


Credo che ciò si applichi solo quando si aggiungono file a un archivio esistente. Quando si aggiungono più file contemporaneamente, verrà utilizzato solo un file temporaneo. Quando si crea un nuovo archivio, un file temporaneo non verrà utilizzato affatto.
Daniel B,

-1

La mia ipotesi è che accelerare 7-Zip sia impossibile senza riscrivere i suoi algoritmi di compressione / decompressione, potrebbe esserci un qualche tipo di modifica che aumenta la velocità, ma probabilmente sarà solo un aumento del 10-15%, non un enorme Aumento del 50-100% che stai cercando.


6
Per niente vero. Puoi velocizzare enormemente 7-zip semplicemente cambiandolo dalle impostazioni predefinite. In effetti, le impostazioni predefinite sono ottimizzate per la dimensione del file più piccola (e l'algoritmo di compressione più lento - BZip2). Modificandolo su ZIP e la compressione LZMA impostata su "Più veloce" lo rende enormemente più veloce.
NickG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.