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.
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:
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
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:
- Non-Intel CPU on the system or older Intel architectures.
- Not marked CONFIG_INTEL_IDLE=y in .config
- 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'