Tengo un conjunto de servidores llenos cada uno con un montón de archivos que se pueden gzip. Todos los servidores tienen diferentes números de núcleos. ¿Cómo puedo escribir un script bash para iniciar un gzip para cada núcleo y asegurarme de que los gzips no estén comprimiendo el mismo archivo?Gzip con todos los núcleos
Respuesta
Si está en Linux, puede usar los xargs de GNU para ejecutar tantos procesos como núcleos tenga.
CORES=$(grep -c '^processor' /proc/cpuinfo)
find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip -9
- encontrar -print0/xargs -0 le protege de los espacios en blanco en los nombres de archivo
- xargs -n 1 significa un proceso por archivo gzip
- xargs -P especifica el número de puestos de trabajo
- gzip -9 significa compresión máxima
No es necesario exportar la variable. Deberías usar '$()' en lugar de backticks. No es necesario usar 'cat' -' grep' acepta un archivo como argumento. GNU 'grep' (si no otros también) puede contar, por lo que no necesita' wc'. Resultado final: 'CORES = $ (grep -c^processor/proc/cpuinfo)' –
Tiene toda la razón. Yo estaba perezosamente buscando en Proc buscando, y lo dejó improvisado. Eso es mucho más limpio. – Demosthenex
Si desea reservar, digamos 2 procesadores para otros programas, podría usar lo siguiente (probablemente haya una manera más limpia o más bash-ish para hacer esto): CORES = $ (grep -c '^ processor'/proc/cpuinfo | perl -ane 'print $ F [0] - 2') – Morlock
Es posible que desee considerar la comprobación GNU parallel. También encontré esto video on youtube que parece hacer lo que estás buscando.
Paralelamente menciona que usa banderas similares a xargs, irónicamente descubrí recientemente que xargs ahora incluye la capacidad de iniciar múltiples procesos, ver mi respuesta. – Demosthenex
Hay una implementación de gzip que es multiproceso, pigz. Como está comprimiendo un archivo en varios hilos, debería poder leer desde el disco de manera más eficiente, en comparación con la compresión de múltiples archivos a la vez.
¡Creo que es una solución superior! Si cada bloque que se va a comprimir se ejecuta en hilos separados, es mejor que utilizar algo como xargs para iniciar un proceso por archivo. Por otro lado, si no puede instalar software personalizado en servidores $ X, puede recurrir al comportamiento de xargs. Gran descubrimiento! – Demosthenex
Esto es bueno saberlo. Desafortunadamente, Pigz no está en nuestros servidores. :( – User1
Nota: pigz solo puede hacer compresión paralela, no descompresión (más una limitación de compresión gz que pigz si lo entiendo bien). Cuando descompresión pigz todavía usa 4 hilos, para separar la lectura, escritura y comprobación. – qwertzguy
- 1. ¿Cómo utilizo todos los núcleos para nmake?
- 2. F # PSeq.iter no parece estar utilizando todos los núcleos
- 3. ¿Cómo usar todos los núcleos en Windows 7?
- 4. Cómo gzip todos los archivos en todos los subdirectorios en un archivo comprimido en bash
- 5. gzip con Codeigniter
- 6. ¿Por qué este código Java no utiliza todos los núcleos de la CPU?
- 7. .NET movimiento de hilos entre los núcleos
- 8. Cómo usar los archivos GZIP en Asp.net?
- 9. Utilización completa de todos los núcleos en el modo pseudo distribuido de Hadoop
- 10. OpenMP y núcleos/hilos
- 11. Compilando con g ++ usando múltiples núcleos
- 12. Cómo descomprimir todos los archivos en todos los subdirectorios en bash
- 13. Núcleos precalculados de Libsvm
- 14. MPI: ¿núcleos o procesadores?
- 15. Parámetros para núcleos CUDA
- 16. ¿Cuántos núcleos para SSIS?
- 17. ¿Enviar datos con gzip en WebRequest?
- 18. Problemas conocidos con gzip e IE6
- 19. Usar actores para explotar núcleos
- 20. Cómo configurar Content-Encoding con gzip
- 21. Hilos frente a núcleos
- 22. Ejecución simultánea del kernel CUDA con múltiples núcleos por secuencia
- 23. JVM en múltiples núcleos
- 24. ¿La codificación gzip es compatible con JSON?
- 25. Desempaquetar archivos grandes con gzip en PHP
- 26. archivo gzip con varios archivos dentro de
- 27. ¿Apache Commons HttpClient es compatible con GZIP?
- 28. CSS/JS GZip Compresión con Asp.Net
- 29. ¿Por qué los principales sitios web usan gzip?
- 30. Empuje dentro de los núcleos escritos por el usuario
¿Estás seguro de que la velocidad de la unidad de disco duro no los limitará? – ruslik
@rulik, exactamente, la velocidad de la unidad de disco duro será el cuello de botella o gzip habría agregado la compatibilidad con múltiples procesadores hace mucho tiempo. –
No estoy de acuerdo. Ejecutando gzip en una serie de archivos, según mi experiencia, fija la CPU al 100%, la E/S del disco permanece baja. Sí, en un caso muy extremo, es posible que la E/S del disco se convierta en el próximo cuello de botella, pero esta es una excelente razón para usar esos núcleos adicionales en lugar de ejecutar un solo hilo. – Demosthenex