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 processor_idle 드라이버 대신 * 특정 Intel 프로세서에 로드되는 CPUidle 드라이버입니다. intel_idle이 ACPI보다 * 더 많은 것을 알고 있기 때문에 * 이러한 프로세서에서 Linux를 더 효율적으로 만들고 * Linux를 ACPI BIOS 버그에 더 면역되게 만드는 것이 목적입니다. */

따라서 최신 Intel CPU의 경우 Intel_idle 드라이버를 사용해야 합니다. 이는 Intel CPU의 효율성을 높이기 위해 특별히 설계되었기 때문입니다.

그렇다면 왜 일부 설정은 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 프로세서 모듈을 일찍 로드하므로 CONFIG_INTEL_IDLE=m은 ACPI 플랫폼에서 쉽게 유용하지 않습니다.

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

서명자: Len Brown

이유는 다음과 같습니다.

  1. 시스템의 비 Intel CPU 또는 이전 Intel 아키텍처.
  2. .config에 CONFIG_INTEL_IDLE=y로 표시되지 않음
  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로 빌드되었다고 가정합니다.

  • intel_idle: 플랫폼 BIOS에서 C-States를 활성화하고 커널 부팅 인수를 사용하지 않은 다음 가 /sys/devices/system/cpu/cpuidle/current_driver표시되는지 확인합니다 intel_idle.
  • acpi_idle: 플랫폼 BIOS에서 C-States를 활성화하고, intel_idle.max_cstate=0 커널 부팅 인수를 사용하고, current_driver가 인지 확인하세요 acpi_idle.
  • C-State를 완전히 비활성화합니다.: 플랫폼 BIOS에서 C-State를 비활성화하고 intel_idle.max_cstate=0 커널 부팅 인수를 포함하고 current_driver가 인지 확인하십시오 none.

관련 정보