Como uma CPU fica inativa o suficiente para entrar em estados C mais profundos?

4

Mesmo se nenhum processo do usuário estiver em execução, os processos do kernel não mantêm a CPU ativa o suficiente para impedir que ela entre em um estado C mais profundo, como C1 ou C2?

    
por kashyapa 27.01.2012 / 00:34

1 resposta

8

As CPUs (ou núcleos individuais) podem ser colocadas em estados C "profundos" por um kernel do SO.

Você está pensando que o processador "se coloca em suspensão" quando "detecta" a inatividade. Não é assim que funciona. O planejador do sistema operacional determina a porcentagem de inatividade do sistema com base na quantidade de tempo gasto no loop ocioso do sistema para detectar a inatividade do sistema. A própria CPU (em x86, pelo menos) não sabe "o que" está executando e não tem contexto para "detectar" ciclos inativos por conta própria.

O firmware do sistema contém tabelas ACPI que definem os recursos de gerenciamento de energia do hardware. Essas tabelas são lidas pelo sistema operacional quando são inicializadas. O driver de processador do kernel do sistema operacional (ou qualquer que seja o analógico para um determinado sistema operacional) é responsável por monitorar a carga de trabalho da CPU e instruir o hardware a colocar a CPU em um estado de gerenciamento de energia selecionado das tabelas de firmware ACPI.

A Microsoft tem um artigo descrevendo o gerenciamento de energia no Windows 7 e Server 2008 R2 . A IBM tem um artigo (provavelmente datado, no entanto) sobre o sistema CPUfreq no Linux .

Editar:

Vale ressaltar que muitos servidores têm um mecanismo baseado em hardware integrado para monitorar e gerenciar estados de CPU. Isso também não está sendo feito "na CPU", mas está tomando o lugar da funcionalidade de gerenciamento de desempenho e energia do sistema operacional. Tem sido minha experiência que isso muitas vezes gera economia de energia, mas às custas do desempenho do sistema.

    
por 27.01.2012 / 02:26