Por que há o bloco de leitura IO em uma chamada de escrita dd pura? rastreamento de vmstat anexado

1

Todos, estou vendo o disco ler IO em uma chamada de gravação pura e fiquei me perguntando por quê. Isso está em um sistema embarcado sem outros processos em segundo plano em execução que poderiam estar interferindo. O sistema de arquivos está em uma opção SSD, fstab:

/dev/sda /mnt/storage0 ext4 rw,noatime,barrier=1,data=ordered,discard 0 0

Dados reais de IO:

# time dd if=/dev/zero of=/mnt/storage0/test bs=16k count=2048k & vmstat 3 10000
0
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 2  0      0   4384   1008 501088    0    0  3900 11969 2826  833  0 42 54  3
 2  2      0   3232   1488 501312    0    0  8608 120048 1056 2188  1 96  0  3
 1  2      0   4912   1440 499312    0    0 13040 78411 1225 2971  2 64  0 34
 2  2      0   3184   1408 501456    0    0 13179 107317 1252 3032  2 71  0 27
 2  2      0   3168   1456 501456    0    0 10037 82240 1027 2409  1 59  0 40
 3  0      0   4544   1440 500224    0    0  6901 62811  755 1708  1 45  0 54
 1  3      0   2928   1424 501824    0    0  8608 91200  909 2156  1 58  0 41
 0  2      0   4944   1456 499008    0    0  9173 75200  901 2155  1 50  0 49
 1  1      0   4944   1456 499760    0    0  8795 70880  907 2061  1 50  0 49
 1  1      0   5184   1472 499328    0    0 11237 106267 1141 2682  1 69  0 30
 3  2      0   3216   1456 501296    0    0 10373 96485 1055 2499  2 63  0 35
 0  2      0   4368   1488 499632    0    0  7488 72459  809 1857  1 48  0 51
 0  2      0   4480   1504 499536    0    0 11717 71445 1082 2653  1 57  0 42
    
por Mike 03.03.2011 / 22:33

2 respostas

2

O sistema operacional estará lendo o disco para fazer a escrita. Ele precisará ler coisas como o cabeçalho do arquivo para atualizá-lo, por exemplo, com o tamanho do arquivo. Ele precisará ler as tabelas de alocação de blocos para saber onde é seguro gravar no disco, etc.

Há mais para escrever em um disco do que apenas explodir dados nele.

    
por 03.03.2011 / 22:46
1

Eu tive uma experiência semelhante ao usar o dd com o netcat

nc -l 1234 | dd of=/dev/sda bs=4M

Para minha surpresa, dd estava lendo (muito) de sda , que deve ser escrito somente para.

Desativado usando obs (tamanho do bloco de saída) em vez de bs (conjuntos dentro e fora do tamanho do bloco) fez as leituras desaparecerem.

nc -l 1234 | dd of=/dev/sda obs=4M 

... funcionou como eu esperava, sem leituras (e muito mais rápido).

Eu não sei exatamente porque o dd está lendo do disco, mas não há nenhum sistema de arquivos envolvido, então eu suponho que ele esteja relacionado aos diferentes tamanhos de bloco.

    
por 25.06.2012 / 12:19