DD de / dev / zero à / dev / null… ce qui se passe réellement

12

Que se passe-t-il dans la commande

sudo dd if=/dev/zero of=/dev/null bs=500M count=1. 

Où les zéros vont-ils réellement et que se passe-t-il en général? La vitesse est de 905 Mo / s

Si je dd ramdisk la vitesse n'est que de 388 Mo / s. Et si je ddvers mon disque dur, la vitesse n'est que de 63,2 Mo / s

agz
la source
1
/dev/nullest une bonne destination pour tester / chronométrer les opérations de lecture . /dev/zeroest une bonne source pour tester / chronométrer les opérations d' écriture . Combiner cette source et cette destination en une seule opération n'a pas beaucoup de sens. Je ne sais même pas si cela fournit un numéro de surcharge significatif.
sciure de bois
@sawdust Sinon, non?
Jamie
2
Oui, @sawdust, votre commentaire ci-dessus est désagréable (pour les débutants). of = / dev / sda écrasera les partitions de disque dur, le contenu, etc. de = ~ / bigfile.tmp aurait été un meilleur exemple à utiliser ...
Kevin Traas
2
Je sais que je suis assez tard pour la fête, mais au cas où quelqu'un voudrait essayer par lui-même: il n'est pas nécessaire d'exécuter cette commande en tant que root, et donc pas besoin de sudo.
Roel Schroeven
@Jamie Nah, c'est la bonne façon.
Awn

Réponses:

14

/dev/zerofournit un flux sans fin de zéro octet lors de la lecture. Cette fonction est fournie par le noyau et ne nécessite pas d'allocation de mémoire. Toutes les écritures /dev/nullsont supprimées silencieusement.

Par conséquent, lorsque vous effectuez la dd, le système génère 500 mégaoctets en zéro octet qui sont simplement supprimés. À l'exception d'un tampon temporaire, aucune donnée n'est stockée avant, pendant ou après cette opération.

La vitesse du transfert de /dev/zeroà /dev/nullest déterminée principalement par la vitesse de votre processeur et des appels système pertinents. (Dans votre cas, le tampon fait 500 Mo, et donc l'opération teste également la vitesse de votre mémoire.)

bwDraco
la source
7

Je vais traduire cette commande pour vous:

dd if=/dev/zero of=/dev/null bs=500M count=1

Dupliquez les données ( dd) du fichier d'entrée ( if) de /dev/zero(fourniture illimitée virtuelle de 0) dans le fichier de sortie ( of) de /dev/null(gouffre virtuel) en utilisant des blocs de taille 500M ( bs= taille de bloc) et répétez cela ( count) une seule fois ( 1).

En général, cette commande doit mesurer uniquement les vitesses de mémoire et de bus. Cependant, il peut échouer si vous ne disposez pas de 500 Mo de RAM. Donc, dans un sens, il compare également implicitement la vitesse à laquelle votre système d'exploitation peut allouer de gros morceaux de mémoire.

mvp
la source
S'il mesure la mémoire, comment se fait-il que l'écriture sur un disque virtuel soit beaucoup plus lente?
agz
2
Parce que ramdisk doit encore être formaté pour avoir un système de fichiers, qui doit être maintenu par le pilote du noyau. Cela signifie également que l'écriture sur ramdisk entraînera une surcharge de copie des données de l'espace utilisateur vers l'espace noyau - pas exactement gratuite. Avec / dev / zero ou / dev / null, cette surcharge est presque nulle.
mvp
Je n'avais jamais vu de "données en double" auparavant. Je me souviens avoir lu dans les anciennes pages de manuel de SunOS que dd signifie "copier et convertir" (cc a été pris).
Dan Pritts
5

/ dev / null est un trou noir. Il n'est pas précis pour tester les opérations d'écriture normales car il n'écrit pas réellement sur le disque comme le ferait un fichier normal. Plutôt que d'écrire la tête sur le disque, les données sont rejetées immédiatement lors de l'écriture sur le périphérique, ce qui les rendra toujours plus rapides que les écritures locales normales.

/ dev / zero est similaire pour les lectures. Il ne nécessite pas de mouvement de tête pour lire, c'est juste une quantité illimitée de caractères nuls, donc il lira toujours plus vite que n'importe quelle lecture locale.

En d'autres termes, cela revient à tester dans un vide et ne donnera pas une image précise de ce que les lectures et écritures locales normales devraient produire.

MaQleod
la source
Ram n'est pas non plus impliqué je suppose ... alors qu'est-ce que ce test ... la vitesse d'horloge?
agz
1
  1. /dev/nulln'est nulle part; les données qui y sont écrites sont simplement supprimées.

  2. Votre disque virtuel possède un système de fichiers qu'il doit utiliser. dddoit créer une entrée de système de fichiers et écrire en suivant les règles du système de fichiers. Votre système d'exploitation utilise également votre mémoire pour d'autres choses en même temps, de sorte que votre opération d'écriture obtient ce qui reste.

  3. Les disques durs non SSD sont tout simplement lents, ce qui est également correct.

cybernard
la source