acpi_idle 및 intel_idle

acpi_idle 및 intel_idle

두 개의 SLES 11 서버가 있습니다.

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

그리고:

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

둘 다:

intel_idle.max_cstate=0 processor.max_cstate=0

"/boot/grub/menu.lst"에서 재부팅합니다.

질문:acpi_idle과 intel_idle의 차이점은 무엇입니까?

답변1

짧은 답변: 둘 다 CPU 유휴 드라이버를 다르게 구현한 것입니다. acpi_idle은 기본 드라이버이며 모든 CPU 아키텍처를 지원하는 반면 intel_idle은 Intel CPU에만 해당됩니다.

자세한 내용은: CPU 유휴 드라이버의 API는 include/linux/cpuidle.h에 정의되어 있습니다. 이는 "CPU 유휴 전력 관리를 위한 일반 프레임워크"를 정의합니다. acpi_idle 드라이버(drivers/acpi/processor_idle.c에 정의됨)는 모든 CPU 아키텍처에 대해 이 동작을 구현합니다. intel_idle(drivers/idle/intel_idle.c에 정의됨)은 최신 Intel CPU용으로 설계된 유휴 드라이버입니다(intel_idle.c 헤더의 주석 참조).

/* * intel_idle.c - 최신 Intel 프로세서를 위한 기본 하드웨어 유휴 루프 * ...

/* * intel_idle은 레거시 ACPI process_idle 드라이버 대신 특정 Intel 프로세서에 * 로드할 수 있는 CPUidle 드라이버입니다. 목적은 * intel_idle *이 ACPI에 대해 더 많이 알고 있기 때문에 Linux를 이러한 프로세서에서 더 효율적으로 만들고 Linux를 ACPI BIOS 버그에 더 면역되게 만드는 것입니다. */

따라서 최신 Intel CPU의 경우 Intel CPU의 효율성을 높이도록 특별히 설계된 intel_idle 드라이버를 사용해야 합니다.

그렇다면 일부 설정은 intel_idle을 로드하고 일부 설정은 acpi_idle을 로드하는 이유는 무엇입니까? 이는 intel_idle 드라이버를 소개하는 커밋 메시지에 명시된 내용입니다.

2671717265ae6e720a9ba5f13fbec3a718983b65 제출

작성자: Len Brown 날짜: 2010년 3월 8일 월요일 14:07:30 -0500

intel_idle: 최신 Intel 프로세서용 기본 하드웨어 CPUidle 드라이버

이 실험용 드라이버는 Intel Atom 프로세서, Intel Core i3/i5/i7 프로세서 및 관련 Intel Xeon 프로세서의 acpi_idle을 대체합니다.

Intel Core2 또는 이전 프로세서는 지원하지 않습니다.

ACPI로 구성된 커널의 경우 CONFIG_INTEL_IDLE=y를 사용하면 intel_idle이 ACPI 프로세서 드라이버보다 먼저 프로브할 수 있습니다. "intel_idle.max_cstate=0"으로 부팅하면 intel_idle이 비활성화되고 시스템은 ACPI의 "acpi_idle"로 대체됩니다.

일반적인 Linux 배포판은 ACPI 프로세서 모듈을 조기에 로드하므로 ACPI 플랫폼에서는 CONFIG_INTEL_IDLE=m의 유용성이 떨어집니다.

intel_idle은 module_init 중에 모든 프로세서를 조사합니다. 나중에 핫 추가되는 프로세서는 유휴 상태에서 C1을 사용하도록 제한됩니다.

서명자: 렌 브라운

그 이유는 다음과 같습니다.

  1. 비 Intel CPU 또는 시스템의 이전 Intel 아키텍처.
  2. CONFIG_INTEL_IDLE=y가 .config에 표시되지 않았습니다.
  3. cmdline에서 intel_idle.max_cstate=0을 사용하여 시작하세요.

두 설정 모두에서 #3을 설정했다고 말씀하셨기 때문에 설정 중 하나가 intel_idle을 로드하는 이유가 문제입니다. "cat /proc/cmdline"을 시도하고 옵션이 실제로 설정되어 있는지 확인하세요. 또한 "lscpu" 또는 "cat /proc/cpuinfo"를 사용하여 아키텍처 간의 차이점을 확인하세요.

답변2

또 다른 답변은 intel_idle과 acpi_idle의 차이점을 훌륭하게 요약합니다.

각 드라이버를 활성화하는 방법에 대한 추가 정보를 제공합니다. 이는 커널이 CONFIG_INTEL_IDLE=y로 빌드되었다고 가정합니다.

  • 인텔 유휴/sys/devices/system/cpu/cpuidle/current_driver: 커널 부팅 매개변수를 사용하지 않고 플랫폼 BIOS에서 C-State를 활성화한 다음 표시 되는지 확인합니다 intel_idle.
  • acpi_idle: 플랫폼 BIOS에서 C-States를 활성화하고 intel_idle.max_cstate=0 커널 시작 매개변수를 사용하고 current_driver가 인지 확인합니다 acpi_idle.
  • C 상태를 완전히 비활성화합니다.: intel_idle.max_cstate=0 커널 시작 매개변수를 포함하여 플랫폼 BIOS에서 C-State를 비활성화하고 current_driver가 인지 확인합니다 none.

관련 정보