it-swarm-pt.tech

Alguém pode explicar exatamente o que é IOWait?

Por mais que eu tenha lido sobre iowait, ainda é um mistério para mim.

Eu sei que é o tempo gasto pela CPU aguardando a conclusão das operações IO), mas que tipo de IO precisamente? O que também não tenho certeza, É por isso que é tão importante? A CPU não pode fazer outra coisa enquanto a operação IO for concluída e voltar ao processamento de dados?

Além disso, quais são as ferramentas certas para diagnosticar quais processos aguardaram exatamente o pedido de veiculação?.

E quais são as maneiras de minimizar o tempo de espera IO?

207
Peter Krumins

Eu sei que é o tempo gasto pela CPU aguardando a conclusão das operações IO), mas que tipo de IO precisamente? O que também não tenho certeza, É por isso que é tão importante? A CPU não pode fazer outra coisa enquanto a operação IO for concluída e voltar ao processamento de dados?

Sim, o sistema operacional agendará outros processos para serem executados enquanto um estiver bloqueado no IO. No entanto, dentro desse processo, a menos que esteja usando E/S assíncrona, ele não progredirá até que qualquer operação IO seja concluída.

Além disso, quais são as ferramentas certas para diagnosticar quais processos aguardaram exatamente o pedido de veiculação?.

Algumas ferramentas que você pode achar úteis

  • iostat, para monitorar os tempos de serviço dos seus discos
  • iotop (se o seu kernel suportar), para monitorar o detalhamento de IO solicitações por processo
  • strace, para observar as operações reais emitidas por um processo

E quais são as maneiras de minimizar o tempo de espera IO?

  • verifique se você tem memória física livre para que o sistema operacional possa armazenar em cache os blocos de disco na memória
  • mantenha o uso do disco do sistema de arquivos abaixo de 80% para evitar fragmentação excessiva
  • ajustar seu sistema de arquivos
  • use um controlador de array com bateria
  • escolha bons tamanhos de buffer ao executar operações io
103
Dave Cheney

Pergunta antiga, que acabou recentemente, mas considerou que as respostas existentes eram insuficientes.

Definição e propriedades do IOWait

IOWait (geralmente rotulado %wa na parte superior) é uma subcategoria de inatividade (%idle é geralmente expresso como ocioso, exceto subcategorias definidas), o que significa que a CPU não está fazendo nada. Portanto, enquanto houver outro processo que a CPU possa estar processando, isso será feito. Além disso, ocioso, usuário, sistema, iowait etc. são uma medida em relação à CPU. Em outras palavras, você pode pensar em iowait como o ocioso causado pela espera de io.

Precisamente, iowait é o tempo gasto recebendo e manipulando interrupções de hardware como uma porcentagem dos tiques do processador. As interrupções de software geralmente são ativadas separadamente como %si.

Importância e equívoco potencial

O IOWait é importante porque geralmente é uma métrica essencial para saber se você está com gargalo no IO. Mas a ausência de iowait não significa necessariamente que seu aplicativo esteja não gargalo no IO. Considere dois aplicativos em execução em um sistema. Se o programa 1 estiver com um gargalo bastante io e o programa 2 for um usuário pesado da CPU, o %user + %system da CPU ainda pode ser algo como ~ 100% e, correspondentemente, o iowait mostraria 0. Mas isso é apenas porque o programa 2 é intensivo e parece relativamente não dizer nada sobre o programa 1, porque tudo isso é do ponto de vista da CPU.

Ferramentas para detectar IOWait

Ver posts de Dave Cheney e Xerxes

Mas também um simples top será exibido em %wa.

Reduzindo a IOWait

Além disso, como agora estamos quase entrando em 2013, além do que os outros disseram, a opção de simplesmente incríveis IO dispositivos de armazenamento são acessíveis, ou seja, SSDs. SSDs são incríveis !!!

48
Grumpy

iowait

iowait é o tempo que o processador/processadores estão aguardando (ou seja, estão em um estado ocioso e ficam nothing ), durante o qual de fato houve solicitações de E/S de disco pendentes.

Isso geralmente significa que os dispositivos de bloco (ou seja, discos físicos, não memória) são muito lentos ou simplesmente saturados.

Portanto, observe que, se você observar uma alta média de carga em seu sistema, e no aviso de inspeção que a maior parte disso é devido à espera de E/S, isso não significa necessariamente que seu sistema esteja com problemas - e isso ocorre quando o seu a máquina simplesmente não tem nada a fazer, além de processos vinculados à E/S (ou seja, processos que fazem mais E/S do que qualquer outra coisa (chamadas do sistema não vinculadas à E/S)). Isso também deve ser aparente pelo fato de que qualquer coisa que você faça no sistema ainda é muito responsiva.

ferramentas

  • sar (do pacote sysstat, disponível na maioria das máquinas * nix)
  • iostat
  • sarface (um front-end para sar)
36
Xerxes

Achei a explicação e os exemplos deste link muito úteis: O que exatamente é "iowait"? . BTW, por uma questão de integridade, a E/S aqui se refere à E/S do disco, mas também pode incluir E/S em um disco montado em rede (como nfs), conforme explicado em nesta outra postagem =.

Vou citar algumas seções importantes (caso o link fique inoperante), algumas dessas seriam repetições do que outros já disseram, mas para mim pelo menos essas eram mais claras:

Para resumir em uma frase, 'iowait' é a porcentagem de tempo que a CPU está ociosa E há pelo menos uma E/S em andamento.

Cada CPU pode estar em um dos quatro estados: usuário, sys, ocioso, iowait.

Fiquei me perguntando o que acontece quando o sistema tem outros processos prontos para serem executados enquanto um processo aguarda E/S. O abaixo explica:

Se a CPU estiver ociosa, o kernel determinará se há pelo menos uma E/S atualmente em andamento em um disco local ou em um disco montado remotamente (NFS) que foi iniciado a partir dessa CPU. Se houver, o contador 'iowait' é incrementado em um. Se não houver E/S em andamento iniciada nessa CPU, o contador 'inativo' será incrementado em um.

E aqui está um exemplo:

Digamos que existem dois programas em execução na CPU. Um é um programa 'dd' que lê do disco. O outro é um programa que não realiza E/S, mas gasta 100% de seu tempo realizando trabalhos computacionais. Agora suponha que haja um problema com o subsistema de E/S e que as E/S físicas estejam demorando um segundo para serem concluídas. Sempre que o programa 'dd' estiver em suspensão enquanto aguarda a conclusão de suas E/Ss, o outro programa poderá executar nessa CPU. Quando a interrupção do relógio ocorre, sempre haverá um programa em execução no modo de usuário ou no sistema. Portanto, os valores de% ocioso e% iowait serão 0. Mesmo que iowait seja 0 agora, isso não significa que NÃO há um problema de E/S, porque obviamente existe um se as E/S físicas estiverem demorando um segundo para serem concluídas.

Vale a pena ler o texto completo. Aqui está um espelho desta página , caso ele caia.

34
haridsv

No Solaris, eu uso o DTrace para verificar o que os processos estão fazendo se precisar ver quais operações de E/S estão em execução. Para o Linux, existe um programa semelhante chamado systemtap , que fornece um nível semelhante de exposição ao kernel e às chamadas de processo.

Um exemplo que usei ao aprender o DTrace foi comparar um comando cp com um comando dd. Você pode ver que dd faz muito mais leituras para a gravação, enquanto cp não, principalmente por causa do tamanho do buffer que dd usa por padrão (se eu estiver lembrando corretamente).

1
Milner

Que tipo de operações IO dependerá de seus aplicativos e configurações).

É importante, pois em alguns casos a CPU não pode obter os dados ou instruções necessárias para continuar. Em alguns casos, ele pode continuar, mas dependerá de quais aplicativos estão sendo executados e do que ele pode fazer. Se você tiver um único aplicativo encadeado que tenha muito acesso ao disco, precisará aguardar.

Para minimizar o tempo IO, compre mais e mais memória, obtenha discos mais rápidos, desfragmentar os discos que você possui.

Se for um aplicativo interno, que é o gargalo, veja se ele pode ser otimizado para ler em blocos maiores ou fazer IO de forma assíncrona).

0
Jeremy French

usando ps aux pode imprimir processo STAT
se stat for D ou Ds, o processo está em suspensão ininterrupta (geralmente IO)
quando um processo entra em suspensão ininterrupta, nr_iowait de runqueue é adicionado e se nr_iowait> 0, o tempo ocioso da CPU é contado para iowait

o vmstat também mostra quantos blocos de processo
r: o número de processos aguardando o tempo de execução.
b: O número de processos no sono ininterrupto.

http://bencane.com/2012/08/06/trou Troubleshooting-high-io-wait-in-linux/

0
Singo