Comment accélérer 7-Zip

35

J'utilise normalement WinRAR sur 7-Zip simplement parce qu'il est plus rapide et seulement un peu moins efficace avec la compression. J'ai fait quelques tests sur différents types et tailles de fichiers en comparant les paramètres par défaut 7-Zip et WinRAR sur leur compression normale et leur meilleure compression, et dans de nombreux cas, WinRAR était 50% plus rapide et dans certains cas, il était en fait 100% plus rapide. Mais j'aime plus les logiciels libres. Donc, voici mes questions:

  1. Existe-t-il un moyen d'accélérer 7-Zip? Je voudrais qu'il soit au moins à égalité avec la vitesse de WinRAR
  2. Existe-t-il un moyen de créer des segments de récupération dans 7-Zip comme vous le pouvez dans WinRAR? Je n'en ai pas vu, mais je suppose que cela pourrait être une chose en ligne de commande.
  3. J'ai testé WinRAR et 7-Zip en utilisant la dernière version stable de chacun (quelque chose à 4 points avec 7-Zip). La version bêta 9.x est-elle sensiblement plus rapide à la compression?

Je parle de plus rapide à un paramètre comparable dans WinRAR, pas seulement de réduire à la compression minimale.

Si cela importe, j'utilise un processeur quadricœur Intel i7 720 (1,6 GHz) / (2,8 GHz) avec 4 Go de RAM DDR3, et la version 64 bits de 7-Zip et Debian x64 5.0.4 à double démarrage et Windows 7 Accueil.

Kefka
la source
1
Concernant # 2 - 7-zip n'a actuellement aucune sorte de "record de récupération" ou de capacité "ecc". Vous aurez besoin d'un logiciel tiers comme QuickPar / MultiPar ou ICE ECC, mais cela ne fait pas partie de l'archive.
afrazier

Réponses:

36

Si vous obtenez la version bêta de 7-Zip 9.13, vous pouvez changer le type d'archive en LZMA2 et ainsi pouvoir utiliser autant de threads que vous le souhaitez, bien que l'utilisation de la mémoire augmente de façon phénoménale.

Installez la version bêta, faites un clic droit sur les éléments que vous souhaitez archiver, puis dans le menu contextuel 7-Zip, cliquez sur "Ajouter aux archives ..." et vous obtiendrez quelque chose de similaire à la fenêtre ci-dessous. Sur le côté gauche, sous Méthode de compression, vous devriez trouver "LZMA2" qui vous permettra de changer le nombre de threads qui sera une option un peu plus bas.

Cela a le potentiel d'augmenter considérablement les performances sur les processeurs de> 2 cœurs, car il peut être mieux réglé sur votre système, et la méthode de compression normale ne peut gérer que 2 threads au maximum.

Le "/ 1" que vous voyez à droite de la zone de sélection du nombre de threads dans l'image est le nombre de processeurs dans votre système et donc le nombre recommandé de threads. Mon i7 est un processeur quad core mais a un hyperthreading (qui aide réellement ici btw) donc il apparaît comme "/ 8"

texte alternatif

Mokubai
la source
Anandtech.com utilise 7-Zip pour aider à comparer les améliorations de performances que l'on trouve dans les processeurs multicœurs et multithreads, ce qui est autrement plus théorique dans la plupart des logiciels de cette génération.
kmarsh
5
Quelle est la ligne de commande arg pour activer LZMA2?
djangofan
@ Monkubai: DANS l'i7 4c-8t dans mon bureau, je ne peux pas faire fonctionner le 7-zip complet 8-core en mode LZMA2 quel que soit le paramètre défini. La seule méthode permettant d'exécuter tous les 8 threads utilise des algorithmes BZip2 (dans le menu déroulant) qui ont un taux de compression plus faible.
Edward
@Edward quelle version utilisez-vous? Sur 9.20 si je sélectionne lzma2 dans cette liste, j'ai la possibilité d'utiliser jusqu'à 8 cœurs.
Mokubai
2
@Mokubai 9.20 version officielle. Et il n'y a rien de mal avec l'interface graphique, elle affiche toujours le paramètre 8/8 cœurs dans le panneau de configuration, mais lors du traitement, elle n'utilise en fait que <20% de processeur. J'ai fait une recherche rapide dans SU pour le problème, mais je n'ai pas encore trouvé la raison de cette étrange. Sachez simplement que si j'utilise la ligne de commande 7z avec des paramètres tels que -m0 = lzma2 -mmt = 8, la compression finalise ~ 100% du processeur, mais une fois que je passe en GUI, elle revient en mode monofil ou quelque chose comme ça ... qui utiliser le CPU de manière très inefficace (<20%).
Edward
31

Comme chaque thread semble compresser plusieurs fichiers en même temps, la meilleure chose à faire pour augmenter les performances des très gros travaux zip est de définir les threads sur 1, pour être sûr que votre disque dur recherchera un fichier à la fois.

Nous améliorons les performances de toutes nos procédures quotidiennes de sauvegarde zip en ajoutant -mmt=offà la ligne de commande 7-zip. Notre sauvegarde du "dépôt SVN visuel", qui est faite de plusieurs petits fichiers, prenait entre 50 et 60 minutes.

Avec -mmt=off, nous faisons maintenant toujours en moins de cinq minutes! Et, pendant ces 50 minutes, tous nos serveurs ont été très lents à cause de la recherche de disques durs. Maintenant, tout reste très rapide pendant ces cinq minutes.

Pour tout ce que vous faites sur une machine, l'activité du disque dur sera toujours plus lente que la capacité de votre processeur. Vous pouvez augmenter les performances du disque en désactivant les activités parallèles et en vous assurant que le disque dur lit (et écrit) vos fichiers un par un en série.

Il est également préférable de lire à partir de disk1 et d'écrire votre ZIP sur disk2, car la tête physique ne passe pas de lecture à écriture.

Exemple de ligne pour obtenir une vitesse ZIP maximale tout en conservant les performances de votre machine:

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

D:et T:sont 2 disques physiques différents

Frédéric Malenfant
la source
5
Étonnant que ce soit exactement le contraire de la réponse suggérée, mais c'est en fait correct. Je viens de faire passer une opération d'archivage de 12 heures à 2 en passant à l'utilisation d'un seul thread.
N Jones
2
Vrai. Cela a également fonctionné pour moi. Cela a probablement du sens car il utilise -mx=1(ce qui n'est presque pas de compression). Si vous ne compressez pas, la plupart du travail est effectué par le disque dur. Si vous définissez -mx=9les processeurs doivent vraiment travailler pour compresser le fichier. J'aurais besoin de l'essayer, mais selon le goulot d'étranglement (disque dur ou processeur), cela pourrait être meilleur ou pire.
Diego Jancic
9
Cette réponse est très spécifique à une technologie vieillissante. Il n'est probablement pas utile d'essayer cela avec des SSD car le temps de recherche est beaucoup plus court. L'IOPS aléatoire est moins susceptible d'être le goulot d'étranglement. Votre cas était assez spécial car vous effectuiez très peu de compression. Fondamentalement, vous faisiez une copie de fichier. Alors oui, l'accès séquentiel sur une HD tournante est clairement un gagnant. Les cas d'utilisation typiques de 7zip seront probablement liés au CPU, pas aux IO. Pour cela, l'utilisation de tous les cœurs de CPU est essentielle. Mais pour ceux qui se trouvent dans une situation similaire, vos conseils sont très précieux.
dss539
1
L'utilisation -mmt=offest plus rapide même avec -m0=lzma2 -mx=5. (Sans -mmt=off: réel 1m27.811s, utilisateur 2m4.976s, sys 0m3.729s . Avec -mmt=off: réel 1m18.896s, utilisateur 1m17.160s, sys 0m1.661s )
ostrokach
Semble être beaucoup plus lent pour moi de réduire les threads à 1. Avec 1 thread pour 20 Go de fichiers, il traitait à une vitesse d'environ 2 Mo / sec. Avec 16 threads, il traitait à une vitesse d'environ 16 Mo / sec.
Lightyear Buzz
0

Tous les algorithmes de compression que j'ai utilisés récemment (ZIP, RAR, 7z, tar / bzip2) sont liés aux E / S et non liés au CPU. Regarder MenuMeters sur mon ordinateur portable Mac montre une activité constante du disque, mais seulement 50% ou moins d'activité du processeur.

Ainsi, la façon d'accélérer la compression / décompression est d'accélérer votre disque. Ce n'est pas toujours possible.

Ma "solution" à cela est de simplement faire autre chose pendant que je compresse quelque chose. :-)

chrish
la source
2
Si les E / S disque étaient le problème de Matt, cela signifierait que WinRAR est en mesure de lire le disque plus rapidement que 7Zip sur son système ... Cela me semble peu probable.
foraidt
1
Il est possible que WinRAR utilise des E / S de disque plus intelligentes; Je sais que le zip d'Info-ZIP est gêné par ses très petits tampons d'E / S. Mais oui, cela pourrait être une différence entre les algorithmes de compression.
chrish
7z n'est certainement pas lié aux E / S, même en mode rapide.
Sarge Borsch du
La plupart des méthodes que vous avez décrites ne compressent pas en parallèle, donc seulement 1 cœur de votre CPU est utilisé, donc sur une machine à 2 cœurs vous obtenez 50%. J'ai peur que le CPU soit lié à votre Mac, pas aux IO et la plupart des Mac ont un SSD qui ne souffre pas vraiment de la recherche de disque. 7z peut compresser en parallèle si vous choisissez l'option de le faire. (tar, zip, bzip, gzip, xs ne le font généralement pas)
Martin
0

Dans mon entreprise, nous travaillons avec une ancienne version de 7-zip (4.52 beta), et nous exécutons la commande suivante:

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

Cela fonctionne bien, mais après avoir juste mis à niveau vers la nouvelle version 16.04 (32 bits), les performances ont énormément baissé, j'ai donc décidé de revenir à l'ancienne version.

Dominique
la source
0

Une autre petite astuce pour améliorer les performances lorsque vous utilisez du code comme cet exemple:

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

est, si possible, dans le tableau $ ListDir répertorié les répertoires par taille, du plus petit au plus grand. Cela se produit car à chaque cycle foreach 7zip crée un fichier temporaire qui est aussi grand (ou plus grand) que l'original, puis ajoutez un nouveau fichier à l'intérieur. J'ai essayé avec des cas dans lesquels il y a deux répertoires ou plus grands certains Mo et un grand beaucoup de Go et le gain de temps est de l'ordre de plusieurs minutes.

Max Monterumisi
la source
Je crois que cela ne s'applique que lors de l'ajout de fichiers à une archive existante. Lors de l'ajout de plusieurs fichiers à la fois, un seul fichier temporaire serait utilisé. Lors de la création d'une nouvelle archive, un fichier temporaire ne serait pas utilisé du tout.
Daniel B
-1

Je suppose que l'accélération de 7-Zip est impossible sans réécrire ses algorithmes de compression / décompression, il peut y avoir une sorte de réglage qui augmente la vitesse, mais ce ne sera probablement qu'une augmentation de 10 ou 15%, pas une augmentation massive Augmentation de 50 à 100% que vous recherchez.

Joshkunz
la source
6
Pas vrai du tout. Vous pouvez accélérer massivement 7-zip en changeant simplement les paramètres par défaut. En fait, les paramètres par défaut sont réglés pour la plus petite taille de fichier (et l'algorithme de compression le plus lent - BZip2). Le changer en compression ZIP et LZMA réglé sur "Fastest" le rend massivement plus rapide.
NickG