Por que um sistema se atrasa para “travar” quando há muitos processos no estado 'D'?

1

Tenho notado que em um sistema (linux), se houver muitos processos em estado "D" (Ininterrupto), o sistema inicia o "enforcamento". O estado D é principalmente devido ao processo aguardando na E / S.

Por "travar" quero dizer que, eu não posso digitar comandos no console ou iniciar novos processos é muito lento, levando-me a acreditar que o cpu está "ocupado" fazendo alguma coisa. Mas meu entendimento é que um processo no estado D não está fazendo nada, apenas esperando. Isso deve precisar de qualquer computação cpu e de fato liberar a cpu e deixar que ela agende outras tarefas.

Definitivamente estou perdendo alguma coisa, porque os processos de estado D também são adicionados à média de carga de um sistema. Eu não entendo porque isso é feito, como um processo no sono ininterrupto contribui para carregar?

    
por rags 14.02.2011 / 17:14

2 respostas

1

Quando você digita um comando no console, esse "comando" - se não um comando interno do shell - também é um arquivo de sistema, um arquivo executável. Quando você digita "ls" ALL dirs na sua variável PATH são pesquisados para um executável chamado "ls" - pelo menos enquanto "ls" não tiver sido hash antes.

Esta pesquisa significa acessar o disco várias vezes em vários diretórios. Se, como você escreveu, você tem muitos processos esperando por E / S, também seu shell terá que esperar antes que ele possa procurar por seu comando digitado.

Além disso, alguns comandos que você digita também irão querer ler e / ou gravar em algum arquivo no disco, aumentando a espera por processos de E / S ...

Isso não adiciona carga de CPU, mas adiciona carga de E / S que também conta no Linux para "carga total", por quê? Eu acho que isso é apenas uma questão de definição. Consulte o link .

Portanto, distribuir sua E / S em vários discos (não partições) pode melhorar seu desempenho. Ter o sistema em um disco e seus dados em outros discos ajudará. Pense também que apenas o início de um novo shell faz com que ele pesquise seu $ HOME por arquivos como .profile, .bashrc e outros, e se o disco estiver ocupado com muitos outros I / O, isso pode levar algum tempo.

    
por 14.02.2011 / 17:26
2

D é um sono ininterrupto. Sim, em teoria os processos no estado D estão dormindo e não estão diretamente usando E / S. Mas a partir da minha experiência com processos nesse estado, é mais provável que algo seja gravado em um driver de dispositivo. Se você tem muitos processos de estado 'D', então Something Very Bad (tm) está acontecendo com o seu sistema operacional. Isso pode ser loop loops em um driver (desperdiçando ciclos de CPU), buffers sendo lidos e jogados fora, o que for. Eu iria verificar seus logs do sistema e dmesg para qualquer erro de dispositivo ou driver de dispositivo.

Em conclusão, D não é um estado natural, um processo ocasional pode ser ignorado, mas se você tiver muitos D procs e estiver experimentando lentidão, você tem algum spelunking para fazer.

    
por 15.02.2011 / 19:35