Por que o md resync não causa nenhum iowait?

1

Eu conheço a definição de %iowait as

Time the CPU spent idling/blocking, because it had to wait on an IO operation to complete.

Agora pegue um sistema Linux simples com um mdraid1 e dois discos. /proc/mdstat mostra que a ressincronização está rodando a cerca de 120MB / s, o que é próximo do que você esperaria de um disco SATA girando regularmente.

Portanto, a velocidade do disco é o fator limitante neste caso e, portanto, a definição acima esperaria que o iowait estivesse em quase 100%, porque é isso que impede o processo de terminar em menos tempo.

No entanto, esse não é o caso:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,51    0,00    5,64    0,00    0,00   93,85

Não existe qualquer iowait e o tempo ocioso sugere-me que a ressincronização poderia ser muito mais rápida mas acabou por decidir que não queria (o que não é verdade).

O que eu estou entendendo mal?

    
por dog 23.05.2013 / 19:29

1 resposta

1

Minha hipótese é que, por não ser um processo adequado (algo a ser feito por um módulo do kernel), ele não está aparecendo.

Eu acho que o rsync é uma função que acontece dentro do módulo md do kernel e, portanto, não possui um processo / thread ( task_struct ). Por causa disso, não há processo de linux real aguardando no disco na fila de execução (já que o "trabalho" de ressincronização não é um processo real). Como o agendador reportará o iowait com base no runqueue, o iowait não é aumentado por essa tarefa.

Se você iniciou um processo real que queria usar muito o disco, ele provavelmente esperaria mais no disco por causa desse trabalho de ressincronização, e o iowait aumentaria. (No entanto, a ressincronização pode ter uma prioridade baixa, então isso ainda pode não acontecer).

    
por 23.05.2013 / 20:39