2

There are two SLES 11 servers:

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

and:

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

Both having the:

intel_idle.max_cstate=0 processor.max_cstate=0

in the: "/boot/grub/menu.lst", were rebooted.

The question: what is the difference between acpi_idle and intel_idle ?

2

Short Answer: Both are different implementations of CPU idle drivers. acpi_idle is the default driver, supports all CPU architectures, while intel_idle is Intel CPUs specific.

More details: The API for a CPU idle driver is defined in include/linux/cpuidle.h. It defines the "generic framework for CPU idle power management". acpi_idle driver (defined in drivers/acpi/processor_idle.c) implements this behaviour for all CPU architectures. intel_idle (defined in drivers/idle/intel_idle.c) is an idle driver designed specifically for modern Intel CPUs (from the comments in the intel_idle.c header):

/* * 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. */

So for modern Intel CPUs you should use the intel_idle driver since it is designed specifically for increasing Intel CPUs' efficiency.

So why would some setups load with intel_idle and some with acpi_idle? This is what stated in the commit message introducing the intel_idle driver:

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

So the reasons are:

  1. Non-Intel CPU on the system or older Intel architectures.
  2. Not marked CONFIG_INTEL_IDLE=y in .config
  3. Booting with intel_idle.max_cstate=0 in cmdline

Since you said you set #3 on both setups the question is why one of them loaded with intel_idle. Try 'cat /proc/cmdline' and make sure the option is really set. Also, check the differences between the architectures with 'lscpu' or 'cat /proc/cpuinfo'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.