(Publiqué esto primero en serverfault, pero luego me di cuenta de que probablemente pertenece aquí).
Estoy intentando comprimir un archivo de texto muy grande usando 7za (p7zip) 9.20. La opción -mmt no parece tener ningún efecto. He intentado tanto -mmt = on como -mmt = 2. Esta es una máquina de 8 núcleos. Una persona sugirió agregar -m0 = lzma2 como argumento, pero eso solo me da E_INVALIDARG. ¿Alguien sabe cómo hacer que esto funcione?
Esto no tiene efecto:
7za a -mx=9 -mmt=2 -p myarchive.zip bigfile.txt
Y esto falla con un error:
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
fuente
fuente
-mmt
, no-mmt=2
. También creo que la sintaxis adecuada es-mx9
, aunque ambas podrían funcionar.Respuestas:
De acuerdo con el modificador -m (Establecer método de compresión) # ZipMultiThread - 7ZIP manual y documentación , el valor
mt
predeterminado eson
, por lo que no hay necesidad de especificarlo.Sin embargo, ¡la implementación de 7zip del algoritmo DEFLATE no admite subprocesos múltiples!
Como ya has descubierto,
solo usa un núcleo.
Pero los
.zip
archivos comprimen cada archivo individualmente. Al comprimir varios archivos, la opción de subprocesos múltiples comprime un archivo por núcleo a la vez.Pruébalo y verás que
utilizará todos los
N
núcleos disponibles .Si desea acelerar la compresión de un solo archivo, tiene dos opciones:
Dividido
bigfile
en trozos.Use un algoritmo de compresión diferente.
Por ejemplo, la implementación de 7zip del algoritmo BZip2 admite subprocesos múltiples.
La sintaxis es:
Además, el error de sintaxis es causado por su intento de usar el Algoritmo LZM para un
.zip
contenedor. Eso no es posible.Los algoritmos posibles para los
.zip
contenedores son DEFLATE (64), BZip2 y sin compresión.Si desea usar el algoritmo LZM, use un
.7z
contenedor. Este contenedor también maneja los siguientes algoritmos: PPMd, BZip2, DEFLATE, BCJ, BCJ2 y sin compresión.fuente
.zip
contenedor..ZIP
contenedor.Esta es una pregunta antigua, y no la respuesta a la pregunta específica, sino una respuesta al espíritu de la pregunta (Uso de todos los núcleos para comprimir un formato zip)
pigz (gzip paralelo con opción .zip)
Esto le dará un archivo zip compatible 7 veces más rápido para el mismo nivel de compresión.
Una comparación rápida de compresores compatibles con zip y no zip que utilizan núcleos únicos y múltiples.
tiempos de pared en i7-2600k para comprimir el archivo txt de 1.0 gb en fedora 20
tiempos de pared para descomprimir
fuente
Solo use -mmt [N + 1]
Por ejemplo: -mmt2 es para un hilo, -mmt9 es para ocho hilos
fuente
Verificado y probado: para usar el subprocesamiento múltiple en 7za, el parámetro debe ser "-mmt #" no "-mmt = #", al poner el signo igual se ignora.
¿Cómo lo había descubierto? Después de ejecutar 7z sin ningún parámetro, muestra la información sobre los parámetros, en los interruptores dice "-mmt [N]", no "-mmt = [N]"
Entonces, si entiendo bien, el parámetro que está escribiendo "-mmt = 2" puede estar mal escrito y puede ser "-mmt2", sin el signo igual.
No estoy seguro si entiendo bien, mi inglés es realmente pobre.
Por cierto, ¿por qué usas "7za" en lugar de solo "7z"?
Entonces, para probar el parámetro, ejecuto un conjunto de comandos para hacer puntos de referencia y eso confirmó el error tipográfico en alguna documentación. El parámetro correcto debe escribirse sin el signo igual.
Comando para hacer un punto de referencia con 7z con solo un hilo: 7z b -mmt1
Comando para hacer un punto de referencia con 7z con solo dos hilos: 7z b -mmt2
Comando para hacer un punto de referencia con 7za con solo dos hilos: 7za b -mmt2
Comando para hacer un punto de referencia con 7za con solo un hilo: 7za b -mmt1
No hay un signo igual en el parámetro ˋ-mmt # ˋ, ni para 7z ni para 7za.
fuente