Por que o dd mostra a velocidade lenta do disco pela primeira vez?

1

Estou verificando a velocidade do disco de um disco rígido no CentOS 6 usando o comando dd. A configuração é uma configuração do DRBD - com este servidor sendo primário. Para garantir que eu obtenha valores corretos, executo o comando dd 3 vezes com diferentes arquivos de saída e, em seguida, tomo a média do tempo de leitura / gravação. No entanto, a primeira leitura do comando dd é ordem de grandeza mais lenta do que a próxima 2. Por exemplo.

time -p dd if=/dev/zero of=/mailstore/testfile bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 88.5175 s,
3.0 MB/s
real 90.12
user 0.00
sys 0.66

time -p dd if=/dev/zero of=/mailstore/testfile1 bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 0.226015 s, 1.2 GB/s
real 0.30
user 0.00
sys 0.22


time -p dd if=/dev/zero of=/mailstore/testfile2 bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 0.22094 s, 1.2 GB/s
real 0.22
user 0.00
sys 0.21

Isso é normal? Devo ignorar a primeira leitura e tomar mais 3 depois disso?

Como sugerido por poige, o comando dd fornece uma saída consistente usando a opção opflag = direct. Por exemplo.

time -p dd if=/dev/zero of=/mailstore/filetest33 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 296.587 s, 905 kB/s
real 296.61
user 0.03
sys 1.07

time -p dd if=/dev/zero of=/mailstore/filetest44 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 260.308 s, 1.0 MB/s
real 260.42
user 0.04
sys 1.13

time -p dd if=/dev/zero of=/mailstore/filetest56 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 253.681 s, 1.1 MB/s
real 253.68
user 0.03
sys 1.06
    
por amolkul 20.01.2014 / 08:56

2 respostas

5
A opção

dd tem direct , que requer o kernel para ignorar qualquer cache e enviar dados diretamente para o dispositivo de bloco. Se você precisa testar o seu dispositivo, não a RAM, você tem que usá-lo, por exemplo. g .:

dd if=/dev/zero of=direct_output bs=1M count=100 oflag=direct

    
por 20.01.2014 / 09:00
0

Então, você disse que foi montado na rede. Qual sistema de arquivos, CIFS ou NFS? De qualquer maneira, eu suspeito que você tenha delegado o arquivo. Quando seu cliente obtém um arquivo delegado, ele pode armazenar em cache as gravações localmente. No entanto, quando você usa O_DIRECT (é o que oflag = significa direto), as gravações são enviadas para o servidor imediatamente em vez de qualquer armazenamento em cache.

De qualquer forma, há algo estranho acontecendo. Você deve estar recebendo mais de 1.1MB / s, a menos que você esteja usando apenas a Ethernet de 10Mbps.

Além disso, você pode obter uma atualização de mid-transfer para velocidade executando, em outra janela, killall -USR1 dd Se você marcar a página man do dd, verá que o sinal USR1 não mata / pára dd, mas imprime estatísticas de E / S. Costumo fazer isso quando aguardo por grandes transferências de disco:

enquanto dorme 10; do killall -USR1 dd; feito

Ah, e se você suspeitar de cache de disco, use este comando para liberar o readcache: echo 1 > / proc / sys / vm / drop_caches

Boa sorte!

    
por 20.01.2014 / 15:38