Was ist der Unterschied zwischen diesen beiden Befehlen?
23
Was ist der Unterschied zwischen zwei ddBefehlen mit unterschiedlichen bsund countWerten, solange sie sich mit denselben multiplizieren? Beispielsweise:
Beide Befehle werden ewig dauern. Verwenden Sie urandom, wenn Sie Zufallszahlen benötigen. Verwenden Sie Null, wenn Sie nur eine schnelle Eingabe benötigen.
Was das Endergebnis betrifft, werden sie dasselbe tun. Der Unterschied besteht darin, wie ddDaten verarbeitet werden. Und tatsächlich sind Ihre beiden Beispiele in dieser Hinsicht ziemlich extrem: Der bsParameter gibt an, ddwie viele Daten in den Speicher gepuffert werden sollen, bevor sie ausgegeben werden.
Im Wesentlichen würde der erste Befehl versuchen , 2 GB in zwei Blöcken von 1 GB zu lesen, und der letztere würde versuchen , ganze 2 GB auf einmal zu lesen und sie dann in die aaDatei auszugeben .
Das Ergebnis ist das gleiche, aber im ersten Fall ddwerden zwei 1-GB-Blöcke geschrieben, während im zweiten 2-GB-Block geschrieben wird. Der Unterschied besteht darin, dass ddder kopierte Block im Speicher bleibt. Sie benötigen 1 GB RAM im ersten Fall und 2 GB im zweiten.
Meiner Meinung nach besteht keine Notwendigkeit, so große Blöcke zu verwenden. Sie können einige Tests durchführen, aber in meinem Fall erziele ich eine höhere Geschwindigkeit mit viel kleineren Blöcken (<1 MB).
Die verwendete Blockgröße sollte mit den besten Geschwindigkeitseinstellungen für Quell- und Zielgerät übereinstimmen.
Sie können den Unterschied am besten erkennen, wenn Sie versuchen, ein LV-Gerät zu kopieren. Die Verwendung einer sehr kleinen BS-Größe unterbricht den Lesevorgang unnötig. Die Verwendung einer sehr großen BS-Größe führt zu langen Wartezeiten beim Schreiben.
Da Standard-LVs normalerweise aus 4-MB-Chunks bestehen, die auch eine gute Größe für den physischen Festplattenzugriff haben, verwende ich für diese bs = 4M.
Versuchen Sie, mit 16K oder 256M zu experimentieren - Sie werden den Unterschied bemerken - und beobachten Sie die Festplattenanzeige beim Kopieren ...
Die Strafen für kleine oder große Blöcke werden durch das Caching des Kernels etwas ausgeglichen. Sehen Sie hier für ein Mini-Benchmark.
Gilles 'SO- hör auf böse zu sein'
@ Gilles Ich erinnere mich nicht an die Zahlen in meinen Tests, aber sie waren weitaus dramatischer als deine. Welches physikalische Festplatten-Setup haben Sie in Ihrem Test verwendet? Meins befand sich auf einem Hardware-RAID 5, das über 5 Festplatten (SAS 15k) mit 128 KB verteilt war. Streifengröße.
Nils
SATA-Festplatten, kein RAID, sonst inaktive Maschine. Ich erinnere mich nicht an die genauen Spezifikationen.
/dev/urandom
nicht/dev/random
. Siehe security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...Antworten:
Was das Endergebnis betrifft, werden sie dasselbe tun. Der Unterschied besteht darin, wie
dd
Daten verarbeitet werden. Und tatsächlich sind Ihre beiden Beispiele in dieser Hinsicht ziemlich extrem: Derbs
Parameter gibt an,dd
wie viele Daten in den Speicher gepuffert werden sollen, bevor sie ausgegeben werden.Im Wesentlichen würde der erste Befehl versuchen , 2 GB in zwei Blöcken von 1 GB zu lesen, und der letztere würde versuchen , ganze 2 GB auf einmal zu lesen und sie dann in die
aa
Datei auszugeben .quelle
Das Ergebnis ist das gleiche, aber im ersten Fall
dd
werden zwei 1-GB-Blöcke geschrieben, während im zweiten 2-GB-Block geschrieben wird. Der Unterschied besteht darin, dassdd
der kopierte Block im Speicher bleibt. Sie benötigen 1 GB RAM im ersten Fall und 2 GB im zweiten.Meiner Meinung nach besteht keine Notwendigkeit, so große Blöcke zu verwenden. Sie können einige Tests durchführen, aber in meinem Fall erziele ich eine höhere Geschwindigkeit mit viel kleineren Blöcken (<1 MB).
quelle
Der erste belegt 1 GB Speicher, füllt ihn mit Daten aus der Eingabedatei und gibt ihn zweimal aus.
Der zweite nimmt 2 GB Speicher ein, füllt ihn mit Daten aus der Eingabedatei und gibt sie aus.
quelle
Die verwendete Blockgröße sollte mit den besten Geschwindigkeitseinstellungen für Quell- und Zielgerät übereinstimmen.
Sie können den Unterschied am besten erkennen, wenn Sie versuchen, ein LV-Gerät zu kopieren. Die Verwendung einer sehr kleinen BS-Größe unterbricht den Lesevorgang unnötig. Die Verwendung einer sehr großen BS-Größe führt zu langen Wartezeiten beim Schreiben.
Da Standard-LVs normalerweise aus 4-MB-Chunks bestehen, die auch eine gute Größe für den physischen Festplattenzugriff haben, verwende ich für diese bs = 4M.
Versuchen Sie, mit 16K oder 256M zu experimentieren - Sie werden den Unterschied bemerken - und beobachten Sie die Festplattenanzeige beim Kopieren ...
quelle