DD da / dev / zero a / dev / null ... cosa succede realmente


12

Cosa succede nel comando

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

Dove vanno effettivamente gli zeri e in generale cosa succede? La velocità è di 905 MB / s

Se dd per ramdisk la velocità è solo 388 MB / s. E se io ddal mio hdd la velocità è solo 63.2 MB / s


1
/dev/nullè una buona destinazione per le operazioni di lettura test / temporizzazione . /dev/zeroè una buona fonte per le operazioni di test / timing di scrittura . Combinare questa fonte e destinazione in un'unica operazione non ha molto senso. Non sono nemmeno sicuro che questo fornisca un numero ambientale significativo.
segatura

@sawdust Al contrario, no?
Jamie,

2
Sì, @sawdust, il tuo commento sopra è cattivo (per i neofiti). of = / dev / sda sovrascriverà le partizioni del disco rigido di qualcuno, i contenuti, ecc. di = ~ / bigfile.tmp sarebbe stato un esempio migliore da usare ...
Kevin Traas il

2
So di essere abbastanza in ritardo per la festa, ma nel caso qualcuno voglia provare questo da solo: non c'è bisogno di eseguire questo comando come root, e quindi non c'è bisogno di sudo.
Roel Schroeven,

@Jamie Nah, è la strada giusta.
Alba

Risposte:


14

/dev/zerofornisce un flusso infinito di zero byte durante la lettura. Questa funzione è fornita dal kernel e non richiede allocazione di memoria. Tutte le scritture su /dev/nullvengono eliminate silenziosamente.

Di conseguenza, quando si esegue il dd, il sistema genera 500 megabyte in zero byte che vengono semplicemente scartati. Ad eccezione di un buffer temporaneo, nessun dato viene archiviato prima, durante o dopo questa operazione.

La velocità del trasferimento da /dev/zeroa /dev/nullè determinata principalmente dalla velocità del processore e dalle relative chiamate di sistema. (Nel tuo caso, il buffer ha una dimensione di 500 MB e quindi l'operazione verifica anche la velocità della memoria.)


7

Tradurrò questo comando per te:

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

Duplica i dati ( dd) dal file di input ( if) di /dev/zero(fornitura illimitata virtuale di 0) nel file di output ( of) di /dev/null(sinkhole virtuale) usando blocchi di dimensione 500M ( bs= dimensione del blocco) e ripeti questo ( count) una sola volta ( 1).

In generale, questo comando dovrebbe misurare solo la velocità della memoria e del bus. Tuttavia, potrebbe non riuscire se non si dispone di 500 MB di RAM disponibili. Quindi, in un certo senso, confronta implicitamente anche la velocità con cui il tuo sistema operativo può allocare blocchi di memoria di grandi dimensioni.


Se misura la memoria, come mai la scrittura su un ramdisk è notevolmente più lenta?
agz,

2
Perché ramdisk deve ancora essere formattato per avere un filesystem, che deve essere gestito dal driver del kernel. Questo significa anche che scrivere su ramdisk avrà il sovraccarico di copiare i dati dallo spazio utente nello spazio del kernel - non esattamente libero. Con / dev / zero o / dev / null, questo sovraccarico è quasi zero.
mvp,

Non avevo mai visto "dati duplicati" prima. Ricordo di aver letto nelle vecchie pagine man di SunOS che dd sta per "copia e converti" (cc è stata presa).
Dan Pritts,

5

/ dev / null è un buco nero. Non è accurato per testare le normali operazioni di scrittura poiché in realtà non scrive su disco come farebbe un normale file. Piuttosto che avere la testina di scrittura su disco, i dati vengono scartati immediatamente dopo la scrittura sul dispositivo, quindi saranno sempre più veloci delle normali scritture locali.

/ dev / zero è simile per le letture. Non richiede il movimento della testa da cui leggere, è solo una quantità illimitata di caratteri null, quindi leggerà sempre più velocemente di qualsiasi lettura locale.

In altre parole, è come testare in un vuoto e non darà un quadro preciso di ciò che dovrebbero essere le normali letture e scritture locali.


Suppongo che anche Ram non sia coinvolto ... quindi cosa prova questo ... velocità di clock?
agz

1
  1. /dev/nullnon è da nessuna parte; i dati scritti su di esso vengono semplicemente eliminati.

  2. Il tuo ramdisk ha un file system che deve usare. dddeve creare una voce del file system e scrivere seguendo le regole del file system. Inoltre, il tuo sistema operativo utilizza la tua memoria per altre cose contemporaneamente, quindi l'operazione di scrittura ottiene ciò che resta.

  3. I dischi rigidi non SSD sono semplicemente lenti, quindi anche quello è corretto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.