J'ai actuellement des problèmes avec dd
invoqué avec un fichier clairsemé comme entrée ( if
) et un fichier comme sortie ( of
) avec conv=sparse
. dd
semble utiliser Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
uniquement un cœur du processeur ( 4 cœurs + 4 Intel Hyperthreads) (100% d'un cœur), donc je me demandais s'il était possible de paralléliser dd
. J'ai été
- regarder
info dd
etman dd
et il semble y avoir une fonction intégrée dans la version de corutils 8.23 - vérification à
sgp_dd
partir dusg3-utils
package (sans comprendre si cela convient à mes besoins), mais il ne semble pas être capable de gérer des fichiers clairsemés dcfldd
ne semble pas avoir de capacités de parallélisation
Autant que je sache
- une version / fork améliorée avec une gestion interne des parties du programme dans plusieurs threads (éviter les changements de contexte tuant les performances d'E / S) est préférable à
- une solution avec GNU
parallel
fonctionnant localement est préférable à - un fragment de code personnalisé (éventuellement non testé)
Comment éviter que le CPU soit le goulot d'étranglement d'une opération intensive d'E / S? Je voudrais exécuter la commande sur Ubuntu 14.04 avec Linux 3.13 et gérer les images disque de fichiers épars avec elle sur n'importe quel système de fichiers prenant en charge les fichiers épars (au moins la solution ne devrait pas être liée à un système de fichiers spécifique).
Contexte: J'essaie de créer une copie d'un fichier fragmenté de 11 To (contenant environ 2 To de données) sur un zfs (version instable de zfsonlinux 0.6.4, peut-être un bug et la cause du goulot d'étranglement du processeur (éventuellement recherche de trous lents)). Cela ne devrait rien changer à la question de savoir comment paralléliser dd (de manière très générique).
dd
monopolise le CPU par défaut en raison de la petite taille des blocs. l'agrandir, comme bs=1M
.