acpi_idle frente a intel_idle

acpi_idle frente a intel_idle

Hay dos servidores SLES 11:

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

y:

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

Ambos teniendo:

intel_idle.max_cstate=0 processor.max_cstate=0

en: "/boot/grub/menu.lst", se reiniciaron.

La pregunta:¿Cuál es la diferencia entre acpi_idle e intel_idle?

Respuesta1

Respuesta corta: Ambas son implementaciones diferentes de controladores inactivos de CPU. acpi_idle es el controlador predeterminado, admite todas las arquitecturas de CPU, mientras que intel_idle es específico de las CPU Intel.

Más detalles: La API para un controlador de CPU inactivo se define en include/linux/cpuidle.h. Define el "marco genérico para la gestión de energía inactiva de la CPU". El controlador acpi_idle (definido en drivers/acpi/processor_idle.c) implementa este comportamiento para todas las arquitecturas de CPU. intel_idle (definido en drivers/idle/intel_idle.c) es un controlador inactivo diseñado específicamente para CPU Intel modernas (de los comentarios en el encabezado intel_idle.c):

/* * intel_idle.c - bucle inactivo de hardware nativo para procesadores Intel modernos * ...

/* * intel_idle es un controlador de CPU que se carga en procesadores Intel específicos * en lugar del controlador ACPI Process_idle heredado. La intención es * hacer que Linux sea más eficiente en estos procesadores, como lo sabe intel_idle * más que ACPI, así como hacer que Linux sea más inmune a los errores de BIOS de ACPI. */

Entonces, para las CPU Intel modernas, debe usar el controlador intel_idle, ya que está diseñado específicamente para aumentar la eficiencia de las CPU Intel.

Entonces, ¿por qué algunas configuraciones se cargarían con intel_idle y otras con acpi_idle? Esto es lo que se indica en el mensaje de confirmación que presenta el controlador intel_idle:

confirmar 2671717265ae6e720a9ba5f13fbec3a718983b65

Autor: Len Brown Fecha: lunes 8 de marzo 14:07:30 2010 -0500

intel_idle: controlador de CPU de hardware nativo para los últimos procesadores Intel

Este controlador EXPERIMENTAL reemplaza a acpi_idle en los procesadores Intel Atom, los procesadores Intel Core i3/i5/i7 y los procesadores Intel Xeon asociados.

No es compatible con el procesador Intel Core2 o anterior.

Para los núcleos configurados con ACPI, CONFIG_INTEL_IDLE=y permite que intel_idle sondee antes del controlador del procesador ACPI. Arrancar con "intel_idle.max_cstate=0" desactiva intel_idle y el sistema recurrirá a "acpi_idle" de ACPI.

Las distribuciones típicas de Linux cargan el módulo del procesador ACPI temprano, lo que hace que CONFIG_INTEL_IDLE=m no sea fácilmente útil en plataformas ACPI.

intel_idle prueba todos los procesadores en el momento module_init. Los procesadores que se agreguen en caliente más adelante se limitarán a usar C1 en estado inactivo.

Firmado por: Len Brown

Entonces las razones son:

  1. CPU que no sea Intel en el sistema o arquitecturas Intel más antiguas.
  2. No marcado CONFIG_INTEL_IDLE=y en .config
  3. Arrancando con intel_idle.max_cstate=0 en cmdline

Como dijiste que configuraste el número 3 en ambas configuraciones, la pregunta es por qué una de ellas cargó con intel_idle. Pruebe 'cat /proc/cmdline' y asegúrese de que la opción esté realmente configurada. Además, verifique las diferencias entre las arquitecturas con 'lscpu' o 'cat /proc/cpuinfo'

Respuesta2

La otra respuesta resumió muy bien las diferencias, intel_idle vs acpi_idle.

Brindando información adicional sobre cómo habilitar cada uno de los controladores. Esto supone que el kernel se creó con CONFIG_INTEL_IDLE=y.

  • intel_idle: Habilite C-States en el BIOS de la plataforma y no utilice ningún argumento de arranque del kernel; luego verifique que /sys/devices/system/cpu/cpuidle/current_driverse muestre intel_idle.
  • acpi_idle: Habilite C-States en el BIOS de la plataforma, use intel_idle.max_cstate=0 argumento de arranque del kernel, verifique que current_driver sea acpi_idle.
  • Deshabilitar completamente los estados C: Deshabilite C-States en el BIOS de la plataforma, incluya el argumento de arranque del kernel intel_idle.max_cstate=0, verifique que current_driver sea none.

información relacionada