Linux: Teste de I/O com DD

Linux: Teste de I/O com DD

Teste de I/O com o comando DD no Linux, verificando a velocidade de escrita e leitura do seu HD.

A velocidade é medida pela quantidade de dados que pode ser lida e escrita. O comando DD é uma ferramenta de command line simples, porém existe alguns detalhes importantes.

Medindo a velocidade de escrita

É importante analisar o tamanho do bloco e a quantidade. Em banco de dados Oracle OLTP o bloco de dados possui o tamanho de 8k. Validando a escrita em blocos de 8k.

Observe que ao aumentar a quantidade de escrita, a performance tende a cair, isso precisa ser levado em consideração.

-- Blocos de 8k, executando 1024 vezes. 
dd if=/dev/zero of=teste bs=8k count=1024 conv=fdatasync
1024+0 records in
1024+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.0245287 s, 342 MB/s

-- Blocos de 8k, executando 2096 vezes. 
dd if=/dev/zero of=teste bs=8k count=2096 conv=fdatasync
2096+0 records in
2096+0 records out
17170432 bytes (17 MB, 16 MiB) copied, 0.0428684 s, 401 MB/s

-- Blocos de 8k, executando 64000 mil vezes. 
# dd if=/dev/zero of=teste bs=8k count=64k conv=fdatasync
65536+0 records in
65536+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 8.02123 s, 66.9 MB/s

Medindo a velocidade de leitura

Para medir a leitura é importante limpar o cache de memória, pois uma vezes o dado lido, na segunda vez o Linux "pega" esse bloco do cache.

-- Blocos de 8k, executando 1024 vezes. 
sync && echo 3 > /proc/sys/vm/drop_caches
dd if=teste of=/dev/null bs=8k count=1024
1024+0 records in
1024+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.0307353 s, 273 MB/s

-- Blocos de 8k, executando 2096 vezes. 
sync && echo 3 > /proc/sys/vm/drop_caches
dd if=teste of=/dev/null bs=8k count=2096
2096+0 records in
2096+0 records out
17170432 bytes (17 MB, 16 MiB) copied, 0.0554971 s, 309 MB/s

-- Blocos de 8k, executando 64000 mil vezes. 
sync && echo 3 > /proc/sys/vm/drop_caches
dd if=teste of=/dev/null bs=8k count=64k
65536+0 records in
65536+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 8.2586 s, 65.0 MB/s

Segue abaixo um laço em FOR que utilizo para testar de forma sequencial.

-- testando 4 vezes e escrita 
for i in $( seq 4); do dd if=/dev/zero of=teste bs=8k count=1024 conv=fdatasync ; done 

-- Testando 4 vezes a leitura 
for i in $( seq 4); do sync && echo 3 > /proc/sys/vm/drop_caches ; dd if=teste of=/dev/null bs=8k count=1024 ; done

Abs!