O que é CPU hogging?
É exactamente o que parece - um processo que passa demasiado tempo a ocupar a CPU, resultando em outros processos famintos por uma oportunidade de execução. Com um agendador preemptivo bem projetado rodando processos razoavelmente bem comportados, isso nunca deveria acontecer, realmente.
Back nos velhos tempos ruins, a maioria dos sistemas operacionais no PC com a exceção do UNIX empregou um agendador cooperativo. Isto significa que enquanto o agendador de SO ainda decidia qual processo seria executado em seguida, uma vez que um processo é agendado, ele continuará a rodar indefinidamente até que ele abandone voluntariamente o controle da CPU. Muitas vezes as chamadas de sistema que são empregadas para executar operações de entrada/saída e coisas do gênero (coisas que não precisam de tempo de CPU) seriam então projetadas de forma a permitir que um processo solte a CPU e dê a outro processo uma chance de execução. Assim, potencialmente, se um processo desonesto não fizer nenhuma das chamadas do sistema projetadas para render a CPU, ele poderia potencialmente matar todos os outros processos e causar estragos no sistema.
Com um agendador moderno e sofisticado como o Agendador Completamente Justo, o tempo máximo que um processo poderia ser executado em um trecho é decidido no momento em que ele é agendado. O CFS também tenta garantir até certo ponto que dois ou mais processos enquanto competem pela CPU obtenham tempo de CPU em proporção às suas prioridades durante um período de tempo suficientemente grande. Além disso, se um processo tem muito pouca chance de ser executado, aumenta a probabilidade de ser selecionado na rodada subseqüente de agendamento. Isto não garante automaticamente que cada processo receba tempo suficiente de CPU para ser executado. Por exemplo, se houver um número muito grande de processos (em sua maioria) vinculados à CPU no sistema que exceda muito o número de CPUs disponíveis, então os processos ainda terão muito menos tempo de CPU do que o que realmente precisam. No entanto, tal sistema é um exemplo de sobrecarga e não geralmente um hog.
Um exemplo de onde há um potencial de hogging de CPU mesmo com um agendador muito justo é quando um processo está esperando em um dispositivo e outro processo não pode ser executado nessa CPU sem causar efeitos adversos no sistema (por exemplo, ele está esperando em dados de um dispositivo lento ou sem resposta que pode escrever apenas em um buffer muito pequeno, e outro processo não pode ser agendado, uma vez que o conteúdo do buffer está em um estado incompleto). Isso às vezes pode acontecer com dispositivos/dispositivos ruins e deve ser tratado como um bug.
Como um aparte, muitas pessoas tendem a equacionar uma utilização de 100% da CPU com um porco da CPU. Isto é uma falsa equivalência. Se um processo está executando um loop vinculado à CPU em um sistema que, de outra forma, ficaria na maioria das vezes ocioso, então as chances são de que o processo acabaria ocupando 90-100% da CPU. Não é necessariamente uma coisa ruim, dependendo se o loop vinculado à CPU foi intencional ou não - o processo está simplesmente usando recursos para fazer seu trabalho que de outra forma seriam desperdiçados. Dito isto, tal comportamento geralmente não é encorajado em certos ambientes de produção porque no modo ocioso o SO emprega interruptores especiais no hardware para executar a CPU em modo de baixo consumo, reduzindo assim os custos operacionais. Como tal, espera-se que os processos sejam frugal no seu uso da CPU.
Artigos semelhantes
- Qual é a diferença entre uma CPU de console e uma CPU de PC?
- Qual é a diferença entre um socket 'CPU FAN', um socket 'CPU OPT' e um socket 'SYS FAN' na placa-mãe?
- O que significa "taxa de relógio da CPU"? Como é que contribui para o desempenho de um PC?
- Nos próximos 5 anos, que você acha que terá uma maior participação no mercado de CPU: Intel, AMD, ARM?