acpi_idle vs. intel_idle

2

Existem dois servidores do SLES 11:

SERVER311:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle
SERVER311:~ #

e:

SERVER705:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
SERVER705:~ #

Ambos com:

intel_idle.max_cstate=0 processor.max_cstate=0

no: "/boot/grub/menu.lst", foram reinicializados.

A pergunta: qual é a diferença entre acpi_idle e intel_idle?

    
por Peter 20.11.2017 / 14:40

1 resposta

2

Resposta curta : Ambas são implementações diferentes de drivers ociosos da CPU. acpi_idle é o driver padrão, suporta todas as arquiteturas de CPU, enquanto intel_idle é específico das CPUs Intel.

Mais detalhes : A API para um driver ocioso da CPU é definida em include / linux / cpuidle.h. Ele define a "estrutura genérica para gerenciamento de energia ociosa da CPU". O driver acpi_idle (definido em drivers / acpi / processor_idle.c) implementa esse comportamento para todas as arquiteturas de CPU. intel_idle (definido em drivers / idle / intel_idle.c) é um driver inativo projetado especificamente para CPUs Intel modernas (a partir dos comentários no cabeçalho intel_idle.c):

/* * intel_idle.c - native hardware idle loop for modern Intel processors * ...

/* * intel_idle is a cpuidle driver that loads on specific Intel processors * in lieu of the legacy ACPI processor_idle driver. The intent is to * make Linux more efficient on these processors, as intel_idle knows * more than ACPI, as well as make Linux more immune to ACPI BIOS bugs. */

Portanto, para os modernos processadores Intel, você deve usar o driver intel_idle, pois ele foi projetado especificamente para aumentar a eficiência dos processadores Intel.

Então, por que algumas configurações são carregadas com intel_idle e outras com acpi_idle? Isto é o que declarou na mensagem de commit introduzindo o driver intel_idle:

commit 2671717265ae6e720a9ba5f13fbec3a718983b65

Author: Len Brown Date: Mon Mar 8 14:07:30 2010 -0500

intel_idle: native hardware cpuidle driver for latest Intel processors

This EXPERIMENTAL driver supersedes acpi_idle on Intel Atom Processors, Intel Core i3/i5/i7 Processors and associated Intel Xeon processors.

It does not support the Intel Core2 processor or earlier.

For kernels configured with ACPI, CONFIG_INTEL_IDLE=y allows intel_idle to probe before the ACPI processor driver. Booting with "intel_idle.max_cstate=0" disables intel_idle and the system will fall back on ACPI's "acpi_idle".

Typical Linux distributions load ACPI processor module early, making CONFIG_INTEL_IDLE=m not easily useful on ACPI platforms.

intel_idle probes all processors at module_init time. Processors that are hot-added later will be limited to using C1 in idle.

Signed-off-by: Len Brown

Então as razões são:

  1. CPU não Intel no sistema ou arquiteturas Intel mais antigas.
  2. Não marcado CONFIG_INTEL_IDLE = y no arquivo .config
  3. Inicializando com intel_idle.max_cstate = 0 no cmdline

Desde que você disse que definiu o # 3 em ambas as configurações, a pergunta é por que um deles foi carregado com intel_idle. Tente "cat / proc / cmdline" e verifique se a opção está realmente definida. Além disso, verifique as diferenças entre as arquiteturas com 'lscpu' ou 'cat / proc / cpuinfo'

Espero que isso ajude.

    
por 20.11.2017 / 22:02

Tags