DD de / dev / zero a / dev / null ... lo que realmente sucede

12

Que pasa en el comando

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

¿A dónde van realmente los ceros y, en general, qué sucede? La velocidad es de 905 MB / s

Si me dd a ramdisk la velocidad es de sólo 388 MB / s. Y si dda mi disco duro la velocidad es de solo 63.2 MB / s

agz
fuente
1
/dev/nulles un buen destino para probar / sincronizar operaciones de lectura . /dev/zeroes una buena fuente para probar / sincronizar operaciones de escritura . La combinación de este origen y destino en una operación no tiene mucho sentido. Ni siquiera estoy seguro si esto proporciona algún número de gastos generales significativo.
aserrín
@sawdust Al revés, ¿no?
Jamie
2
Sí, @sawdust, tu comentario anterior es desagradable (para los novatos). of = / dev / sda sobrescribirá las particiones del disco duro, el contenido, etc. de alguien de = ~ / bigfile.tmp habría sido un mejor ejemplo para usar ...
Kevin Traas
2
Sé que llego bastante tarde a la fiesta, pero en caso de que alguien quiera probar esto por sí mismo: no hay necesidad de ejecutar este comando como root, y por lo tanto no hay necesidad de sudo.
Roel Schroeven
@Jamie Nah, es la forma correcta.
Awn el

Respuestas:

14

/dev/zeroproporciona un flujo interminable de cero bytes cuando se lee. El núcleo proporciona esta función y no requiere asignar memoria. Todas las escrituras se /dev/nulldejan caer en silencio.

Como resultado, cuando realiza el dd, el sistema genera 500 megabytes en cero bytes que simplemente se descartan. A excepción de un búfer temporal, no se almacenan datos antes, durante o después de esta operación.

La velocidad de la transferencia de /dev/zeroa /dev/nullestá determinada principalmente por la velocidad de su procesador y las llamadas relevantes del sistema. (En su caso, el búfer es de 500 MB y, por lo tanto, la operación también prueba la velocidad de su memoria).

bwDraco
fuente
7

Traduciré este comando para ti:

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

Duplique datos ( dd) del archivo de entrada ( if) de /dev/zero(suministro ilimitado virtual de 0's) en el archivo de salida ( of) de /dev/null(sumidero virtual) usando bloques de tamaño 500M ( bs= tamaño de bloque) y repita esto ( count) solo una vez ( 1).

En general, este comando debe medir solo la memoria y las velocidades del bus. Sin embargo, puede fallar si no tiene 500 MB de RAM disponibles. Entonces, en cierto sentido, también compara implícitamente qué tan rápido su sistema operativo puede asignar grandes fragmentos de memoria.

mvp
fuente
Si mide memoria, ¿cómo es que escribir en un disco RAM es significativamente más lento?
agz
2
Porque ramdisk todavía tiene que formatearse para tener un sistema de archivos, que debe ser mantenido por el controlador del núcleo. Eso también significa que escribir en ramdisk tendrá una sobrecarga de copiar datos del espacio del usuario en el espacio del kernel, no exactamente gratis. Con / dev / zero o / dev / null, esta sobrecarga es casi cero.
mvp
Nunca había visto "datos duplicados" antes. Recuerdo haber leído en páginas antiguas de SunOS que dd significa "copiar y convertir" (se tomó cc).
Dan Pritts
5

/ dev / null es un agujero negro. No es preciso para probar operaciones de escritura normales, ya que en realidad no escribe en el disco como lo haría un archivo normal. En lugar de que la cabeza escriba en el disco, los datos se descartan inmediatamente después de la escritura en el dispositivo, por lo que siempre será más rápido que las escrituras locales normales.

/ dev / zero es similar para las lecturas. No requiere movimiento de cabeza para leer, es solo un suministro ilimitado de caracteres nulos, por lo que siempre leerá más rápido que cualquier lectura local.

En otras palabras, esto es como probar en un vacío y no dará una imagen precisa de lo que deberían producir las lecturas y escrituras locales normales.

MaQleod
fuente
Ram tampoco está involucrado, supongo ... entonces, ¿qué prueba esta ... velocidad del reloj?
agz
1
  1. /dev/nullno está en ninguna parte; los datos escritos en él simplemente se eliminan.

  2. Su ramdisk tiene un sistema de archivos que tiene que usar. ddtiene que crear una entrada del sistema de archivos y escribir siguiendo las reglas del sistema de archivos. Además, su sistema operativo está utilizando su memoria para otras cosas al mismo tiempo, por lo que su operación de escritura obtiene lo que queda.

  3. Los discos duros que no son SSD son simplemente lentos, por lo que también es correcto.

cybernard
fuente