DD von / dev / zero nach / dev / null ... was passiert eigentlich

12

Was passiert im Befehl?

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

Wohin gehen eigentlich die Nullen und was passiert im Allgemeinen? Die Geschwindigkeit beträgt 905 MB / s

Wenn ich auf eine RAM-Disk fahre, beträgt die Geschwindigkeit nur 388 MB / s. Und wenn ich dd auf meiner Festplatte ist die Geschwindigkeit nur 63,2 MB / s

agz
quelle
1
/dev/null ist ein gutes Ziel zum Testen / Timing lesen Operationen. /dev/zero ist eine gute Quelle zum Testen / Timing schreiben Operationen. Das Kombinieren dieser Quelle und dieses Ziels in einem Vorgang ist wenig sinnvoll. Nicht einmal sicher, ob dies eine aussagekräftige Overhead-Nummer liefert.
sawdust
@sawdust Anders herum, nein?
Jamie
2
Ja, @sawdust, dein Kommentar oben ist böse (für Neulinge). of = / dev / sda überschreibt die Festplattenpartitionen, -inhalte usw. von jemandem. of = ~ / bigfile.tmp wäre ein besseres Beispiel gewesen ...
Kevin Traas
2
Ich weiß, dass ich ziemlich spät zur Party komme, aber für den Fall, dass jemand dies selbst ausprobieren möchte: Es ist nicht erforderlich, diesen Befehl als root auszuführen, und daher ist sudo nicht erforderlich.
Roel Schroeven
@ Jamie Nah, es ist der richtige Weg.
Awn

Antworten:

13

/dev/zero liefert beim Lesen einen endlosen Strom von null Bytes. Diese Funktion wird vom Kernel bereitgestellt und erfordert keine Speicherzuweisung. Alles schreibt an /dev/null werden lautlos fallen gelassen.

Infolgedessen, wenn Sie das ausführen dderzeugt das System 500 Megabyte in Null-Bytes, die einfach verworfen werden. Mit Ausnahme eines temporären Puffers werden vor, während oder nach dieser Operation keine Daten gespeichert.

Die Geschwindigkeit der Übertragung von /dev/zero zu /dev/null wird in erster Linie von der Geschwindigkeit Ihres Prozessors und den relevanten Systemaufrufen bestimmt. (In Ihrem Fall ist der Puffer 500 MB groß, und daher testet der Vorgang auch die Geschwindigkeit Ihres Speichers.)

bwDraco
quelle
6

Ich werde diesen Befehl für Sie übersetzen:

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

Doppelte Daten ( dd ) aus der Eingabedatei ( if ) von /dev/zero (nahezu unbegrenztes Angebot von 0 's) in Ausgabedatei ( of ) von /dev/null (virtuelles Doline) mit Blöcken von 500M Größe ( bs = Blockgröße) und wiederhole dies ( count ) nur einmal ( 1 ).

Im Allgemeinen sollte dieser Befehl nur die Speicher- und Busgeschwindigkeit messen. Es kann jedoch fehlschlagen, wenn Sie nicht über 500 MB RAM verfügen. In gewissem Sinne wird damit auch implizit festgelegt, wie schnell Ihr Betriebssystem große Speicherbereiche zuweisen kann.

mvp
quelle
Wie kommt es, dass das Schreiben auf eine Ramdisk erheblich langsamer ist, wenn der Speicher gemessen wird?
agz
2
Weil die Ramdisk noch formatiert werden muss, um ein Dateisystem zu haben, das vom Kerneltreiber gewartet werden muss. Das bedeutet auch, dass beim Schreiben auf eine Ramdisk der Aufwand für das Kopieren von Daten aus dem Benutzerbereich in den Kernelspeicherplatz anfällt - nicht unbedingt kostenlos. Mit / dev / zero oder / dev / null ist dieser Overhead fast null.
mvp
Ich hatte noch nie "doppelte Daten" gesehen. Ich erinnere mich, dass ich in alten SunOS-Manpages gelesen habe, dass dd für "copy & convert" (Kopie wurde genommen) steht.
Dan Pritts
5

/ dev / null ist ein schwarzes Loch. Es ist nicht genau zum Testen normaler Schreibvorgänge, da es nicht wie eine normale Datei auf die Festplatte schreibt. Anstatt den Kopf auf die Festplatte schreiben zu lassen, werden die Daten sofort beim Schreiben auf das Gerät gelöscht, sodass sie immer schneller sind als normale lokale Schreibvorgänge.

/ dev / zero ist ähnlich für liest. Es ist keine Kopfbewegung zum Lesen erforderlich. Es gibt nur eine unbegrenzte Anzahl von Nullzeichen. Daher wird immer schneller gelesen als bei jedem lokalen Lesevorgang.

Mit anderen Worten, dies ist wie ein Test in einer Leere und gibt kein genaues Bild darüber, was normale lokale Lese- und Schreibvorgänge ergeben sollten.

MaQleod
quelle
Ram ist auch nicht involviert nehme ich an ... also was macht dieser test ... takt?
agz
1
  1. /dev/null ist nirgendwo; darauf geschriebene Daten werden einfach gelöscht.

  2. Ihre Ramdisk hat ein Dateisystem, das sie verwenden muss. dd muss einen Dateisystemeintrag erstellen und nach den Regeln des Dateisystems schreiben. Außerdem verwendet Ihr Betriebssystem gleichzeitig Ihren Speicher für andere Dinge, sodass Ihre Schreiboperation das erhält, was übrig bleibt.

  3. Nicht-SSD-Festplatten sind einfach nur langsam, das ist auch richtig.

cybernard
quelle