como verificar se um processo com uso intenso de io está funcionando corretamente

como verificar se um processo com uso intenso de io está funcionando corretamente

Agora estou gerenciando um cluster de computadores para computação científica. Alguns processos no cluster precisam de uso intenso de IO. Agora encontro esse processo:

  1. Seu estado muda rapidamente entre DOWN e RUN e o uso da CPU muda rapidamente entre 1% e 100%.
  2. Na topsaída, iowait é 0% e ocioso é cerca de 90%

Acho que esse processo pode ter alguns problemas, mas o proprietário do processo afirma que ele está funcionando corretamente, pois ainda está gravando dados em discos.

Mais informações:

  1. O processo está gravando dados em um disco remoto montado em /home
  2. O processo é baseado em código ligeiramente modificado. O software original é capaz de multithreading, mas precisa de uma grande quantidade de memória. O código modificado usa mais disco e menos memória, mas quem modifica o código não sabe nada sobre multi-threading.
  3. Pequenos testes mostram que o código pode dar o resultado correto

Questões:

  1. por que o processo não está usando 100% da CPU e se isso é por causa da espera por io, por que iowait é 0%?
  2. Como avaliar se o processo tem algum problema e que tipo de problema é esse?

Responder1

 The process is writing data to a remote disk mounted on /home

Provavelmente existe sua resposta. O estado do processo Dnão éABAIXO, isso ésono ininterruptoe normalmente significa alguma E/S para terminar. Como você tem um compartilhamento de rede, dependendo das condições, ele pode não aparecer como E/S esperando por você e pode não consumir muita CPU enquanto o sistema está esperando.

No entanto, para você e seu aplicativo, as coisas acontecem muito lentamente se o compartilhamento de rede for lento devido à maneira como o aplicativo está sendo gravado, devido à rede ou ao desempenho do servidor de arquivos.

Como descobrir se o motivo é o seu aplicativo ou o compartilhamento de rede? Simples – teste o desempenho do compartilhamento de rede com outras ferramentas e outros padrões de uso. Copie muitos dados de um lado para outro de /home para algum outro local e vice-versa, execute alguns benchmarks, como iozone, teste o desempenho bruto da rede com iperf, coisas assim.

Se isso fornecer resultados razoáveis, veja o que seu aplicativo está fazendo.

Muitas vezes a razão está em outro lugar; sem saber nada sobre o seu sistema, eu acho que você precisa ajustar as configurações de montagem do NFS. Mas, por enquanto, permanece apenas um palpite, pois não sei se você tem o NFS em uso.

Responder2

Se a CPU não estiver ocupada, seu processo provavelmente estará aguardando algo externo. Eu imagino que há uma boa chance de você entender isso observando quais chamadas do sistema estão demorando mais com o strace.

Se isso acontecer, tente usar um criador de perfil para descobrir o que o código está fazendo.

Seu código usa IO mmap'd? Estou pensando que isso pode não ser relatado como tempo de espera em relação ao seu processo, mas apareceria como um processo do sistema usando muito disco à medida que libera as páginas para o disco.

informação relacionada