Actualmente estoy teniendo problemas con ddinvocado con un archivo disperso como input ( if) y un archivo como output ( of) con conv=sparse. ddparece estar usando un núcleo de la CPU ( Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz4 núcleos + 4 Intel Hyperthreads) solo (100% de 1 núcleo), por lo que me he estado preguntando si es posible hacer paralelo dd. He estado
- buscando en
info ddyman ddy parece que hay función incorporada en la versión de 8,23 corutils - comprobando
sgp_dddesde elsg3-utilspaquete (sin entender si satisface mis necesidades), pero no parece ser capaz de manejar archivos dispersos dcflddno parece tener capacidades de paralelización
hasta donde se
- Se prefiere una versión / fork mejorada con manejo interno de partes del programa en múltiples hilos (evite cambios de contexto que maten el rendimiento de E / S) en lugar de
parallelSe prefiere una solución con GNU ejecutándose localmente sobre- un fragmento de código personalizado (posiblemente no probado)
¿Cómo evitar que la CPU sea el cuello de botella de una operación intensiva de E / S? Me gustaría ejecutar el comando en Ubuntu 14.04 con Linux 3.13 y manejar imágenes de disco de archivos dispersos con él en cualquier sistema de archivos que admita archivos dispersos (al menos la solución no debería estar vinculada a un sistema de archivos específico).
Antecedentes: estoy tratando de crear una copia del archivo disperso de 11 TB (que contiene aproximadamente 2 TB de datos) en un zfs (versión inestable de zfsonlinux 0.6.4, posiblemente con errores y la causa del cuello de botella de la CPU (eventualmente búsqueda de agujeros lenta)). Eso no debería cambiar nada para la cuestión de cómo paralelizar dd (de una manera muy genérica).
fuente

ddacapara la CPU por defecto debido al pequeño tamaño de bloque. hazlo más grande, comobs=1M.Respuestas:
Probado en Bash:
Probablemente necesite ajustar 1000.
fuente
Un fragmento de código personalizado, no probado que viene:
Esto debería dividir lógicamente el archivo en cuatro fragmentos de 3 TB y procesarlos en paralelo. (
skip=salta los bloques de entrada;seek=busca bloques de salida). El cuarto comando, por supuesto, leerá hasta el final del archivo anterior, por lo que elcount=parámetro no es estrictamente necesario.fuente
conv=notruncconv=notruncestá implícito enseek=un valor positivo.