O que é realmente a velocidade relatada por dd?

5

Eu sempre achei isso ao fazer:

dd if=/dev/sdx of=/dev/sdy

o relatório que é exibido assim que o comando termina, como:

79304319+0 records in
79304319+0 records out
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s

contém a velocidade que corresponde à mais lenta entre:

  • A velocidade de leitura da entrada,
  • A velocidade de gravação na saída,
  • O que acontece entre a leitura e a gravação,

isto é, se eu estiver copiando dados de uma unidade USB com velocidade de leitura de 5 MB / s para um SSD, dd relatará 5 MB / s, independentemente da velocidade do SSD.

Na prática, eu estava copiando um disco conectado ao USB 2 (verifiquei duas vezes, o manual diz que é USB 2.0 e até precede a velocidade de conexão de 480 Mbps), e notei que dd informa a velocidade que varia de 65 para 88 MB / s, ou seja, maior do que a velocidade máxima de 60 MB / s para USB 2.0.

O que está acontecendo lá?

A velocidade mostrada por dd é a adição da velocidade de leitura e velocidade de gravação (o que significaria que a velocidade real é de aproximadamente 40 MB / s, o que faz mais sentido)?

Informações adicionais: Eu estava fazendo uma cópia de um disco rígido que apresenta um número crescente de setores defeituosos, a fim de ter um clone que eu possa experimentar. Depois de copiar todo o disco, a velocidade reportada é de fato maior que a esperada:

3902854784+0 records in
3902854784+0 records out
1998261649408 bytes (2.0 TB) copied, 26040.5 s, 76.7 MB/s

dado que o comando foi repetido apenas para os primeiros (2 a 3) gigabytes. Eu verifiquei e verifiquei novamente, o disco copiado é o correto e a placa-mãe não tem suporte para USB 3 (e não há placas PCI-e adicionais para USB 3).

Os resultados de

hdparm são ainda mais estranhos:

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   13498 MB in  2.00 seconds = 6755.77 MB/sec
 Timing buffered disk reads: 486 MB in  3.00 seconds = 161.77 MB/sec

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   15058 MB in  2.00 seconds = 7536.75 MB/sec
 Timing buffered disk reads: 418 MB in  3.01 seconds = 138.91 MB/sec

$ hdparm -tT /dev/md0

/dev/md0:
 Timing cached reads:   15038 MB in  2.00 seconds = 7527.54 MB/sec
 Timing buffered disk reads: 386 MB in  3.01 seconds = 128.38 MB/sec
    
por Arseni Mourzenko 07.06.2015 / 04:23

2 respostas

2

Em geral, dd exibe o tempo necessário para a transferência inteira e a velocidade é "quantidade de dados dividida pelo tempo gasto". Basicamente é o mesmo que você deve ter com time dd ... , sem mágica.

40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
40603811328 / 459.645 / 1000 / 1000 = 88.3373

Talvez você tenha cancelado o dd em algum momento e reiniciado, em que uma parte substancial dos dados já foi armazenada em cache e, portanto, o cache está mexendo com suas estatísticas? Você pode tentar hdparm -tT /dev/disk para obter uma estimativa aproximada das velocidades reais da unidade.

Para USB2, a velocidade é realmente muito suspeita, espero que você não tenha usado os dispositivos errados por acidente.

    
por 07.06.2015 / 18:03
2

A menos que você especifique oflag=direct ou conv=fsync , o kernel armazena os dados e então dd pensa que é feito assim que o kernel aceitar o último dos dados, o que pode demorar alguns segundos chega ao drive. Para pequenas quantidades de dados, isso pode introduzir um erro significativo na estimativa da taxa de transferência.

    
por 07.06.2015 / 19:06