Cómo hacer que 7-Zip sea más rápido

35

Normalmente uso WinRAR sobre 7-Zip simplemente porque es más rápido y solo un poco menos eficiente con la compresión. Hice algunas pruebas en diferentes tipos y tamaños de archivos comparando la configuración predeterminada de 7-Zip y WinRAR en su compresión normal y su mejor compresión, y en muchos casos WinRAR fue 50% más rápido y en algunos fue realmente 100% más rápido. Pero, me gusta más el software libre. Asi que aqui están mis preguntas:

  1. ¿Hay alguna manera de acelerar 7-Zip? Me gustaría al menos estar a la par con la velocidad de WinRAR
  2. ¿Hay alguna manera de hacer segmentos de recuperación en 7-Zip como puede hacerlo en WinRAR? No vi ninguno, pero supongo que podría ser una línea de comando.
  3. Probé WinRAR y 7-Zip usando la última versión estable de cada uno (4 puntos con 7-Zip). ¿La versión beta 9.x es notablemente más rápida en la compresión?

Estoy hablando de más rápido en una configuración comparable en WinRAR, no solo bajando a una compresión mínima.

Si es importante, utilizo un Intel i7 720 de cuatro núcleos (1.6 GHz) / (2.8 GHz) con 4 GB de RAM DDR3, y la versión de 64 bits de 7-Zip, y Debian x64 5.0.4 de arranque dual y Windows 7 Casa.

Kefka
fuente
1
Con respecto al # 2 - 7-zip actualmente no tiene ningún tipo de "registro de recuperación" o capacidad "ecc". Necesitará software de terceros como QuickPar / MultiPar o ICE ECC, pero no forma parte del archivo.
Afrazier

Respuestas:

36

Si obtienes la versión beta de 7-Zip 9.13 , puedes cambiar el tipo de archivo a LZMA2 y así poder usar tantos hilos como quieras, aunque el uso de la memoria aumenta fenomenalmente.

Instale la versión beta, haga clic con el botón derecho en las cosas que desea archivar y luego en el menú de contenido de 7-Zip haga clic en "Agregar al archivo ..." y obtendrá algo similar a la ventana a continuación. En el lado izquierdo, debajo del Método de compresión, debe encontrar "LZMA2", que le permitirá cambiar el número de subprocesos, que será una opción un poco más abajo.

Esto tiene el potencial de aumentar enormemente el rendimiento en procesadores> 2 núcleos, ya que puede ajustarse mejor a su sistema, y ​​el método de compresión normal solo puede manejar 2 hilos como máximo.

El "/ 1" que ve a la derecha del cuadro de selección de número de hilos en la imagen es el número de procesadores en su sistema y, por lo tanto, el número recomendado de hilos. Mi i7 es un procesador de cuatro núcleos pero tiene hyperthreading (que en realidad ayuda aquí, por cierto), por lo que se muestra como "/ 8"

texto alternativo

Mokubai
fuente
Anandtech.com ha estado utilizando 7-Zip para ayudar a comparar las mejoras de rendimiento que se encuentran en las CPU de múltiples núcleos y múltiples subprocesos, que de lo contrario es más teórico en la mayoría del software de esta generación.
kmarsh
55
¿Cuál es la línea de comando arg para habilitar LZMA2?
djangofan
@Monkubai: EN el i7 4c-8t en mi oficina, no puedo obtener el 7-zip run full 8-core en modo LZMA2, independientemente de la configuración establecida. El único método que permite ejecutar todos los 8 hilos es usar algoritmos BZip2 (del menú desplegable) que tiene una relación de compresión más baja.
Edward
@Edward, ¿qué versión estás usando? En 9.20 si selecciono lzma2 de esa lista, obtengo la opción de usar hasta 8 núcleos.
Mokubai
2
@Mokubai 9.20 versión oficial. Y no hay nada malo con la interfaz gráfica de usuario, todavía muestra el parámetro de 8/8 núcleos en el panel de configuración, pero cuando se procesa, en realidad solo usa <20% de CPU. Hice una investigación rápida en SU ​​para el problema, pero aún no he descubierto la razón de eso extraño. Solo sé que si uso la línea de comando 7z con parámetros como -m0 = lzma2 -mmt = 8, la compresión maximiza ~ 100% de la CPU, pero una vez que cambio a GUI, vuelve al modo de un solo hilo o algo así ... que hacer uso de la CPU de una manera muy ineficiente (<20%).
Edward
31

Como cada subproceso parece comprimir varios archivos al mismo tiempo, lo mejor que puede hacer para aumentar el rendimiento de trabajos zip muy grandes es establecer subprocesos en 1, para asegurarse de que su disco duro buscará un archivo a la vez.

Mejoramos el rendimiento en todos nuestros procedimientos diarios de copia de seguridad zip agregando -mmt=offa la línea de comando 7-zip. Nuestra copia de seguridad del "repositorio visual SVN", que está hecho de múltiples archivos pequeños, tomaba entre 50 y 60 minutos.

¡Con -mmt=off, ahora siempre lo hacemos en menos de cinco minutos! Y, durante estos 50 minutos, todos nuestros servidores fueron muy lentos debido a la búsqueda de discos duros. Ahora, todo sigue siendo muy rápido durante esos cinco minutos.

Para todo lo que hace en una máquina, la actividad del disco duro siempre será más lenta que la capacidad de su CPU. Puede aumentar el rendimiento del disco deshabilitando actividades paralelas y asegurándose de que el disco duro lea (y escriba) sus archivos uno por uno en serie.

También es mejor leer desde el disco1 y escribir su ZIP en el disco2, ya que el cabezal físico no se mueve de lectura a escritura.

Línea de muestra para obtener la máxima velocidad ZIP mientras mantiene el rendimiento de su máquina:

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

D:y T:son 2 discos físicos diferentes

Frederic Malenfant
fuente
55
Es sorprendente que esto sea exactamente lo contrario de la respuesta sugerida, pero en realidad es correcta. Acabo de hacer que una operación de archivo pase de 12 horas a 2 cambiando a usar un solo hilo.
N Jones
2
Cierto. Esto funcionó para mí también. Probablemente tiene sentido porque está usando -mx=1(que casi no tiene compresión). Si no está comprimiendo, el HDD realiza la mayor parte del trabajo. Si configura -mx=9los procesadores realmente necesita trabajar para comprimir el archivo. Tendría que intentarlo, pero dependiendo de cuál sea el cuello de botella (HDD o CPU), podría ser mejor o peor.
Diego Jancic
99
Esta respuesta es muy específica para una tecnología que envejece. Probablemente no sea útil probar esto con SSD porque el tiempo de búsqueda es mucho menor. El IOPS aleatorio es menos probable que sea el cuello de botella. Su caso era bastante especial porque estaba realizando muy poca compresión. Básicamente estabas haciendo una copia de archivo. Entonces, sí, el acceso secuencial en un HD giratorio es claramente un ganador. Los casos de uso típicos de 7zip probablemente estarán vinculados a la CPU, no a IO. Para eso, usar todos los núcleos de CPU es esencial. Pero para aquellos en una situación similar, su consejo es muy valioso.
dss539
1
Usar -mmt=offes más rápido incluso con -m0=lzma2 -mx=5. (Sin -mmt=off: real 1m27.811s, usuario 2m4.976s, sys 0m3.729s . Con -mmt=off: real 1m18.896s, usuario 1m17.160s, sys 0m1.661s )
ostrokach
Parece que es mucho más lento para mí disminuir los subprocesos a 1. Con 1 subproceso por 20 GB de archivos, se procesaba a una velocidad de aproximadamente 2 MB / seg. Con 16 subprocesos, procesaba aproximadamente a una velocidad de 16 MB / seg.
Lightyear Buzz
0

Todos los algoritmos de compresión que he usado recientemente (ZIP, RAR, 7z, tar / bzip2) están vinculados a E / S, no a CPU. Ver MenuMeters en mi computadora portátil Mac muestra actividad constante en el disco, pero solo 50% o menos de actividad de la CPU.

Por lo tanto, la forma de acelerar la compresión / descompresión es acelerar su disco. Esto no siempre es posible.

Mi "solución" a esto es hacer otra cosa mientras estoy comprimiendo algo. :-)

chrish
fuente
2
Si la E / S del disco fuera el problema de Matt, significaría que WinRAR es capaz de leer de un disco más rápido que 7Zip en su sistema ... Eso me parece poco probable.
miedo
1
Es posible que WinRAR use E / S de disco más inteligentes; Sé que el zip de Info-ZIP se ve obstaculizado por sus buffers de E / S realmente pequeños. Pero sí, podría ser una diferencia entre los algoritmos de compresión.
2010
7z ciertamente no está vinculado a E / S incluso en modo rápido.
Sarge Borsch
La mayoría de los métodos que ha descrito no se comprimen en paralelo, por lo tanto, solo se usa 1 núcleo de su CPU, por lo tanto, en una máquina de 2 núcleos obtiene el 50%. Me temo que están vinculados a la CPU en su Mac, no a IO y la mayoría de las Mac tienen SSD que realmente no sufren de búsquedas de disco. 7z puede comprimir en paralelo si elige la opción para hacerlo. (alquitrán, zip, bzip, gzip, xs generalmente no)
Martin
0

En mi empresa, estamos trabajando con una versión anterior de 7-zip (4.52 beta), y estamos ejecutando el siguiente comando:

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

Esto funciona bien, pero después de haber actualizado a la nueva versión 16.04 (32 bits), el rendimiento ha bajado enormemente, por lo que he decidido volver a la versión anterior.

Dominique
fuente
0

Otro pequeño truco para mejorar el rendimiento cuando usa código como este ejemplo:

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

es, si es posible, tener en la matriz $ ListDir enumeró los directorios por tamaño, desde el más pequeño hasta el más grande. Esto sucede porque en cada ciclo foreach 7zip crea un archivo temporal que es tan grande (o más grande) que el original, luego agrega un nuevo archivo dentro de ellos. He intentado con casos en los que hay dos o más directorios grandes, algunos MB y uno grande, muchos GB y el ahorro de tiempo es del orden de varios minutos.

Max Monterumisi
fuente
Creo que esto solo se aplica al agregar archivos a un archivo existente. Al agregar varios archivos a la vez, solo se usará un archivo temporal. Al crear un nuevo archivo, no se utilizará un archivo temporal.
Daniel B
-1

Supongo que acelerar 7-Zip es imposible sin volver a escribir sus algoritmos de compresión / descompresión, puede haber algún tipo de ajuste que aumente la velocidad, pero probablemente solo será como un aumento del 10 o 15%, no un aumento masivo Aumento del 50-100% que estás buscando.

Joshkunz
fuente
66
No es cierto del todo. Puede acelerar masivamente 7-zip simplemente cambiándolo de la configuración predeterminada. De hecho, la configuración predeterminada está ajustada para el tamaño de archivo más pequeño (y el algoritmo de compresión más lento: BZip2). Cambiarlo a compresión ZIP y LZMA en "Más rápido" lo hace enormemente más rápido.
NickG