89 votes

Pourquoi le passage de 'dd' par gzip est-il tellement plus rapide qu'une copie directe ?

Je voulais sauvegarder un chemin d'un ordinateur de mon réseau à un autre ordinateur du même réseau sur une ligne à 100 Mbit/s. Pour cela, j'ai fait

dd if=/local/path of=/remote/path/in/local/network/backup.img

ce qui me donnait une vitesse de transfert réseau très faible, de l'ordre de 50 à 100 kB/s, ce qui aurait pris une éternité. Je l'ai donc arrêté et j'ai décidé d'essayer de le gzipper à la volée pour le rendre beaucoup plus petit afin que la quantité à transférer soit moindre. J'ai donc fait

dd if=/local/path | gzip > /remote/path/in/local/network/backup.img.gz

Mais maintenant, j'obtiens une vitesse de transfert réseau de l'ordre de 1 Mo/s, soit un facteur de 10 à 20 plus rapide. Après avoir remarqué cela, je l'ai testé sur plusieurs chemins et fichiers, et c'était toujours pareil.

Pourquoi la tuyauterie dd par le biais de gzip augmente également les taux de transfert par un facteur important au lieu de réduire uniquement la longueur partielle du flux par un facteur important ? Je m'attendais plutôt à une légère baisse des taux de transfert, en raison de la consommation plus élevée de l'unité centrale lors de la compression, mais maintenant j'obtiens un double plus. Je ne suis pas mécontent, mais je me pose des questions ;)

109voto

dd utilise par défaut une très petite taille de bloc -- 512 octets ( !!). C'est-à-dire beaucoup de petites lectures et écritures. Il semble que dd utilisé naïvement dans votre premier exemple, générait un grand nombre de paquets réseau avec une très petite charge utile, réduisant ainsi le débit.

D'un autre côté, gzip est suffisamment intelligent pour effectuer des E/S avec des tampons plus grands. C'est-à-dire un nombre plus faible de grosses écritures sur le réseau.

Pouvez-vous essayer dd à nouveau avec un plus grand bs= paramètre et voir si ça marche mieux cette fois ?

7voto

Get-Tek Points 51

Un peu tard, mais puis-je ajouter...

Lors d'un entretien, on m'a demandé une fois Quelle serait la méthode la plus rapide pour cloner des données bit à bit ? et, bien sûr, a répondu en utilisant dd o dc3dd ( Financé par le DoD ). L'enquêteur a confirmé que la tuyauterie dd a dd est plus efficace, car elle permet simplement lecture/écriture simultanées ou en termes de programmeur stdin/stdout Ainsi, la vitesse d'écriture est doublée et le temps de transfert est réduit de moitié.

dc3dd verb=on if=/media/backup.img | dc3dd of=/dev/sdb

0voto

Micha Points 101

Cong est correct. Vous diffusez les blocs à partir du disque sans les compresser vers un hôte distant. Votre interface réseau, votre réseau et votre serveur distant sont les limites. Vous devez d'abord améliorer les performances de DD. En spécifiant un paramètre bs= qui s'aligne sur la mémoire tampon du disque, vous obtiendrez les meilleures performances du disque. Disons bs=32M par exemple. Cela remplira alors le tampon de gzip à un taux de ligne sata ou sas directement à partir du tampon du disque. Le disque sera plus enclin au transfert séquentiel donnant un meilleur rendement. Gzip va compresser les données dans le flux et les envoyer à votre emplacement. Si vous utilisez NFS, cela permettra à la transmission NFS d'être minimale. Si vous utilisez SSH, vous encurerez l'encapsulation SSH et la surcharge de cryptage. Si vous utilisez netcat, vous n'avez pas de surcharge de cryptage.

0voto

richardfrk Points 74

Je suppose ici que la "vitesse de transfert" à laquelle vous faites référence est rapportée par dd . Cela a en fait du sens, car dd transfère en fait 10 fois plus de données par seconde. ! Cependant, dd n'est pas transféré sur le réseau - cette tâche est prise en charge par le système de gestion de l'information. gzip processus.

Un peu de contexte : gzip consommera les données de son tube d'entrée aussi vite qu'il pourra vider sa mémoire tampon interne. La vitesse à laquelle gzip Le vidage de la mémoire tampon dépend de plusieurs facteurs :

  • La bande passante d'écriture E/S (qui est goulotée par le réseau, et qui est restée constante).
  • La bande passante de lecture des E/S (qui sera bien supérieure à 1 Mo/s pour la lecture d'un disque local sur une machine moderne, et qui n'est donc pas un goulot d'étranglement probable).
  • son taux de compression (qui, d'après votre accélération de 10 fois, doit être d'environ 10 %, ce qui indique que vous comprimez un texte très répétitif, comme un fichier journal ou du XML).

Donc dans ce cas, le réseau peut gérer 100kB/s, et gzip compresse les données dans un rapport de 10:1 (et n'est pas bloqué par le CPU). Cela signifie que pendant qu'il sort 100kB/s, gzip puede consommer 1MB/s, et le taux de consommation est de l'ordre de dd peut voir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X