(J'ai d'abord posté ceci sur serverfault, mais je me suis alors rendu compte qu'il appartenait probablement ici.)
J'essaie de compresser un très gros fichier texte en utilisant 7za (p7zip) 9.20. L'option -mmt ne semble pas avoir d'effet. J'ai essayé à la fois -mmt = on et -mmt = 2. Il s'agit d'une machine à 8 cœurs. Une personne a suggéré d'ajouter -m0 = lzma2 comme argument, mais cela me donne juste E_INVALIDARG. Quelqu'un sait-il comment faire fonctionner cela?
Cela n'a aucun effet:
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
Et cela échoue avec une erreur:
7za a -m0=lzma2 -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
7-Zip (A) [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)
Scanning
Creating archive release_20120601-1-http.zip
System error:
E_INVALIDARG
linux
compression
7-zip
Brian L
la source
la source
-mmt
non-mmt=2
. Je crois également que la syntaxe appropriée est-mx9
, bien que les deux puissent fonctionner.Réponses:
Selon -m (Set compression Method) switch # ZipMultiThread - 7ZIP manual & documentation , par
mt
défauton
, il n'est donc pas nécessaire de le spécifier du tout.Cependant, l'implémentation 7zip de l'algorithme DEFLATE ne prend pas en charge le multithread!
Comme vous l'avez déjà découvert,
n'utilise qu'un seul noyau.
Mais les
.zip
fichiers compressent chaque fichier individuellement. Lors de la compression de plusieurs fichiers, l'option multithread compresse un fichier par cœur à la fois.Essayez-le et vous verrez que
utilisera tous les
N
cœurs disponibles .Si vous souhaitez accélérer la compression d'un seul fichier, vous avez deux choix:
Séparez-vous
bigfile
en morceaux.Utilisez un algorithme de compression différent.
Par exemple, l'implémentation 7zip de l'algorithme BZip2 prend en charge le multithread.
La syntaxe est:
En outre, l'erreur de syntaxe est provoquée par votre tentative d'utilisation de l'algorithme LZM pour un
.zip
conteneur. Ce n'est pas possible.Les algorithmes possibles pour les
.zip
conatiners sont DEFLATE (64), BZip2 et aucune compression.Si vous souhaitez utiliser l'algorithme LZM, utilisez un
.7z
conteneur. Ce conteneur gère également les algorithmes suivants: PPMd, BZip2, DEFLATE, BCJ, BCJ2 et aucune compression.la source
.zip
conteneur..ZIP
conteneur.Ceci est une vieille question, et non la réponse à la question spécifique, mais une réponse à l'esprit de la question (Utiliser tous les cœurs pour compresser un format zip)
pigz (gzip parallèle avec option .zip)
Cela vous donnera un fichier compatible zip 7 fois plus rapide pour le même niveau de compression.
Une comparaison rapide des compresseurs compatibles zip et non zip utilisant des noyaux simples et multiples.
temps de mur sur i7-2600k pour compresser un fichier txt de 1,0 Go sur fedora 20
temps de décompression des murs
la source
Utilisez simplement -mmt [N + 1]
Par exemple: -mmt2 est pour un thread, -mmt9 est pour huit threads
la source
Vérifié et testé: Pour utiliser le multithreading sur 7za, le paramètre doit être "-mmt #" et non "-mmt = #", mettre le signe égal le fait ignorer.
Comment je l'avais découvert? Après avoir exécuté 7z sans aucun paramètre, il affiche les informations sur les paramètres, sur les commutateurs, il dit "-mmt [N]", pas "-mmt = [N]"
Donc, si je comprends bien, le paramètre que vous tapez "-mmt = 2" peut être mal écrit et peut être "-mmt2", sans le signe égal.
Je ne sais pas si je comprends bien, mon anglais est vraiment médiocre.
Au fait, pourquoi utiliser "7za" au lieu de "7z"?
Donc, pour tester le paramètre, j'exécute un ensemble de commandes pour faire des tests de performance et cela a confirmé l'erreur de frappe sur certains documents. Le paramètre correct doit être saisi sans le signe égal.
Commande pour faire un benchmark avec 7z avec un seul thread: 7z b -mmt1
Commande pour faire un benchmark avec 7z avec seulement deux threads: 7z b -mmt2
Commande pour faire un benchmark avec 7za avec seulement deux threads: 7za b -mmt2
Commande pour faire un benchmark avec 7za avec un seul thread: 7za b -mmt1
Il n'y a pas de signe égal sur le paramètre ˋ-mmt # ˋ, ni pour 7z, ni 7za.
la source