Por mais que eu tenha lido sobre iowait, ainda é um mistério para mim.
Sei que é o tempo gasto pela CPU aguardando a conclusão das operações de IO, mas que tipo de operações de IO com precisão? O que também não tenho certeza, é por que isso é tão importante? A CPU não pode simplesmente fazer outra coisa enquanto a operação de E / S é 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 de E / S?
Respostas:
Sim, o sistema operacional agendará outros processos para serem executados enquanto um estiver bloqueado no IO. No entanto, nesse processo, a menos que esteja usando E / S assíncrona, ele não progredirá até que qualquer operação de E / S seja concluída.
Algumas ferramentas que você pode achar úteis
iostat
, para monitorar os tempos de serviço dos seus discosiotop
(se o seu kernel suportar), para monitorar o detalhamento das solicitações de E / S por processostrace
, para examinar as operações reais emitidas por um processofonte
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 expressa como todas as ociosas, 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, ele fará isso. 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 não esteja com 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 poderá ser algo como ~ 100% e, correspondentemente, o iowait mostrará 0. Mas isso é apenas porque o programa 2 é intenso e parece relativamente não dizer nada sobre programa 1 porque tudo isso é do ponto de vista da CPU.Ferramentas para detectar IOWait
Ver post de Dave Cheney e Xerxes
Mas também um simples
top
será exibido%wa
.Reduzindo a IOWait
Além disso, como agora estamos quase entrando em 2013, além do que outros disseram, a opção de dispositivos de armazenamento de E / S simplesmente incríveis é acessível, ou seja, SSDs. SSDs são incríveis !!!
fonte
iowait
iowait
é o tempo que o processador / processadores está aguardando (ou seja, está em um estado ocioso e não faz nada ), 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 de 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
(dosysstat
pacote, disponível na maioria das máquinas * nix)iostat
sarface
(um front-end parasar
)fonte
iowait
afetaLoad Average
? Digamos, 100 threads aguardando pela rede, LA será 100?Achei a explicação e os exemplos deste link muito úteis: O que exatamente é "iowait"? . Por uma questão de integridade, a E / S aqui se refere à E / S do disco, mas também pode incluir a E / S em um disco montado em rede (como nfs), conforme explicado nesta outra publicação .
Vou citar algumas seções importantes (caso o link fique inoperante), algumas delas seriam repetições do que outros já disseram, mas para mim pelo menos essas eram mais claras:
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:
E aqui está um exemplo:
Vale a pena ler o texto completo. Aqui está um espelho desta página , caso ela caia.
fonte
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 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
cp
comando com umdd
comando. Você pode ver quedd
faz muito mais leituras para a gravação, enquantocp
não, principalmente por causa do tamanho do bufferdd
usado por padrão (se estou lembrando corretamente).fonte
Que tipo de operações de E / S dependerá de seus aplicativos e configuração.
É 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 de 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 executar E / S de forma assíncrona.
fonte
usar ps aux pode imprimir o 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 processos
r: O número de processos aguardando pelo tempo de execução.
b: O número de processos em suspensão ininterrupta.
http://bencane.com/2012/08/06/trou Troubleshooting-high-io-wait-in-linux/
fonte