Por que a CPU passou algum tempo no IO (wa)?

18

Eu sei wa(in top) mede o tempo da CPU na espera de E / S. Muitos artigos dizem isso.

Mas estou confuso que, com base em 2 pontos de conhecimento:

  1. se um processo usar uma chamada do sistema para ler o disco, o processo será bloqueado.
  2. Se um processo estiver bloqueado, não poderá ser agendado para execução na CPU.

Certo?

Parece que não há tempo para a CPU aguardar na E / S ... O que acontece?

Se recomendar alguns livros ou artigos para eu continuar lendo, tanto melhor.

HUA Di
fonte
Entrei e escrevi uma resposta adequada. Desculpe eu não estava lá quando você precisou de mim ;-)
Alec Teal

Respostas:

22

O status ocioso da CPU é dividido em dois "sub" - estados diferentes: iowaite idle.

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, a CPU está no estado iowait. Se não houver E / S em andamento iniciada a partir dessa CPU, a CPU estará no idleestado.

Portanto, iowaité a porcentagem de tempo em que a CPU está ociosa E há pelo menos uma E / S em andamento iniciada a partir dessa CPU.

O iowaitcontador afirma que o sistema pode lidar com mais trabalho computacional. Só porque uma CPU está no iowaitestado não significa que ela não pode executar outros threads ou processos nessa CPU.

Então, iowaité simplesmente uma forma de tempo ocioso.

caos
fonte
Isso é realmente falso. Também NFS - a CPU nem sequer tem um conceito disso. É basicamente o tempo que a CPU passou incapaz de fazer outra coisa, porque está lidando com algumas coisas de E / S de baixo nível - no sentido de acessar algo conectado a ela NÃO processa E / S, que geralmente está lendo arquivos e outros enfeites. Por exemplo, no Raspberry Pi, não há um controlador DMA, portanto a CPU não pode "ei, a placa-mãe me lê tantos bytes começando aqui a partir da placa e os coloca no ram começando aqui", deve fazê-lo manualmente->
Alec Teal
por isso, gasta MUITO tempo aguardando CONSTANTEMENTE io por um cartão, para concluir a leitura. Você faz parecer que uma falta de cache pode ser medida por essa "espera io" (que obviamente não é contada), a espera de E / S é definida da seguinte maneira: O tempo que o kernel passou dentro de uma rotina de E / S de dispositivo de baixo nível - por exemplo o RPi, literalmente, tem que executar o procedimento de leitura do cartão e a CPU (sendo um idiota sem DMA) precisa aguardar os dados no barramento IO. Com um controlador de DMA, ele fala para o controlador e diz "me diga quando estiver pronto" - deixando-o para fazer outras coisas enquanto o controlador DMA faz dispositivo IO
Alec Teal
Use o dstat para ver IOwaiting BTW, também o iowait e o tempo gasto fazendo coisas do kernel não podem realmente ser medidos por processo. Como, digamos, existem dois processos "gravando" em "arquivos", o primeiro é concluído rapidamente, o FS optou por armazenar em cache as gravações por qualquer motivo, o segundo faz com que o cache seja liberado, não é justo contar o tempo de retorno mais longo de gravação para o processo que causou a gravação. O mesmo acontece com a espera de E / S, e é por isso que eles não são medidos por processo.
Alec Teal
4
@AlecTeal: Não, está correto e seus comentários são falsos. O iowait conta o tempo bloqueado na E / S, não atendendo à E / S. Se você não quiser confirmar isso lendo a fonte do kernel, tente um experimento: monte um sistema de arquivos em rede, comece a ler um arquivo e faça firewall na máquina remota. O tempo de iowait ainda será alto, mesmo que o processador esteja completamente ocioso.
David
11
Eu fiz um teste nesta resposta. dd if=/dev/sda of=/dev/nullfazer um alto wa. Em seguida, execute um código while-true, em wavez de us. Graças ao caos.
HUA Di
-2

Não tenho 100% de certeza de entender a pergunta, mas há algumas idéias.

Há outra pergunta aqui que faz isso e tem algumas boas respostas: alguém pode explicar com precisão o que é o IOWait?

Há uma boa publicação aqui: http://veithen.github.io/2013/11/18/iowait-linux.html

Mike Fiedler
fonte
7
Mike, é preferível que as respostas incluam conteúdo, não apenas links para o conteúdo. Ao fornecer conteúdo aqui, você garante que sua resposta ainda tenha valor quando esses links desaparecerem.
EEAA
11
@EEAA, então a resposta precisa ser editada, e não com o voto triplicado? Ou pode ser movido para um comentário. Ele ainda contém informações úteis. Downvotes significa que a informação é inútil, tornando-a quase invisível? Não estou dizendo que você fez voto negativo, estou apenas me perguntando sobre a abordagem que as pessoas têm aqui.
Roland Pihlakas
3
@RolandPihlakas É uma questão de motivação. Votos negativos + comentários nesta situação motivam o usuário a corrigir sua resposta. Terei prazer em remover meu dv depois que a resposta for corrigida. A edição destes é contraproducente, pois permite um mau comportamento. Ao longo dos anos, tivemos vários usuários que apenas postaram respostas somente para links, apesar de serem solicitados a não fazê-lo. Se os usuários não puderem se esforçar um pouco em suas respostas, eu não os ajudarei corrigindo seu trabalho.
EEAA
@EAEAA Obrigado pela resposta elaborada. Sua abordagem é compreensível e, por meio de seus comentários, você também fornece o incentivo motivacional para o autor da resposta. Por outro lado, receio que as votações silenciosas em sua maioria não ofereçam motivação prática, pois são obscuras. Mas eu era um pouco impreciso - eu estava pensando, principalmente, por que a resposta foi rebaixada tanto que ficou acinzentada? Seu comentário com uma ou duas votações negativas deveria ter sido suficiente?
Roland Pihlakas
2
@RolandPihlakas As pessoas pensaram que a resposta não era útil, por isso votaram negativamente. Eles votaram negativamente porque é terça-feira. Eles votaram negativamente porque hoje está nevando em Minneapolis (na verdade é, e não deve ser tão tarde na primavera). Quem sabe.
EEAA