Sep 192012
 

Articolo originale pubblicato su http://romanrm.ru

Questo articolo è stato scritto per rispondere all’ uso non sempre corretto del programma “dd” per misurare le prestazioni del disco in scrittura su una VPS fatto da alcuni visitatori del sito lowendbox.com, ed è originariamente basato su questa domanda e la mia risposta ad esso.

Inizialmente pubblicato il 2010-11-29, ed ancora utilissimo.



D: Qual’è la differenza tra i seguenti comandi?

  1. dd bs=1M count=128 if=/dev/zero of=test
  2. dd bs=1M count=128 if=/dev/zero of=test; sync
  3. dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
  4. dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

R: La differenza è nella gestione della cache di scrittura della RAM:

  1. dd bs=1M count=128 if=/dev/zero of=test
    Il comportamento predefinito di dd è quello di non fare “sync” (vale a dire non chiedere al OS di scrivere completamente i dati sul disco prima dd esca). Il comando precedente impegnere solo i vostri 128 MB di dati in un buffer RAM (cache di scrittura) – questo sarà veramente veloce e vi mostrerà subito un risultato di benchmark enormemente gonfiato. Tuttavia, il server in background è ancora occupato, sta continuando a scrivere i dati dalla cache RAM su disco.
  2. dd bs=1M count=128 if=/dev/zero of=test; sync
    Assolutamente identico al caso precedente, infatti chiunque capisca come funziona la shell *nix dovrebbe sicuramente sapere che l’aggiunta di un ; sync non influisce sul funzionamento del comando precedente in alcun modo, in quanto viene eseguito in modo indipendente, dopo che il primo comando è completato. Così il vostro valore (errato) MB /sec è già stampato sullo schermo, mentre quella sync deve essere ancora eseguita.
  3. dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
    Questo dice a dd di richiedere un completo “sync” una volta, appena prima di uscire. Quindi esegue il comando per tutti i 128 MB di dati, e poi dice al sistema “Ok, adesso assicurati che sia tutto davvero sul disco” , solo in quel momento misura il tempo totale speso per fare l’operazione completa e calcola il benchmark corrispondente.
  4. dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
    Qua dd chiede una scrittura sincrona su disco, ovvero si assicura che tutte le sue richeiste di scrittura arrivino sul disco. In questo esempio questo significa sincronizzare ogni megabyte e quindi 128 volte in totale. Sarà probabilmente la modalità più lenta, in quanto la cache di scrittura è praticamente inutilizzata per tutto in questo caso.

Quale suggerisci?

  • dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

Questo comportamento è forse il più vicino al modo in cui le attività del mondo reale si comportano. Se il server o VPS è veramente veloce e la prova di cui sopra viene completata in un secondo o meno, provate ad aumentare il numero di count= a 1024 o giù di lì, per ottenere un risultato con una media più precisa.


Popular Posts:

Flattr this!

  6 Responses to “Come usare correttamente ‘dd’ su Linux per calcolare la velocità di scrittura del disco?”

  1. Anyone who’s writing tutorials about dd command should put big blinking warning about it, because it’s very powerful program and being not very careful can easily damage your data.

    • You can damage things only if you are running as root, which you are not, right? You use sudo for that right?

      • dd will require either sudo or root to run. Either way, once given permission to run, dd has no qualms about doing whatever the hell it’s told to do. Including erasing your MBR/Partition tables. dd will also (politely) not tell you that you are being dumb. So, unless the user is extremely careful and knows exactly what they’re doing, dd is extremely dangerous. I’d say a big blinking warning is more than deserved! 😉

  2. Also, regarding sudo verse root:
    root is exactly what you think; complete access and control. sudo is a program that grants specific users root-level rights under certain somewhat broad conditions. The thing is, typically, sudo is set up to just allow all root commands. Making the distinction moot. Ubuntu does require explicit paths for certain utilities when used with sudo, but this is about all the “obfuscating” they do AFAIK.

  3. For a noob friendly version of this you can find it at http://vpstip.com/how-to-check-disk-speed-easily-in-linux/

    • More than noob friendly that seem an example of incomplete test, as if you have 2GB of Ram you are testing the speed of your Ram access, or am I wrong ?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*