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

Короткий ответ: Оба варианта представляют собой различные реализации драйверов простоя ЦП. acpi_idle — это драйвер по умолчанию, поддерживающий все архитектуры ЦП, тогда как intel_idle предназначен только для ЦП Intel.

Подробнее: API для драйвера простоя ЦП определено в include/linux/cpuidle.h. Оно определяет «универсальную структуру управления питанием в режиме простоя ЦП». Драйвер acpi_idle (определен в drivers/acpi/processor_idle.c) реализует это поведение для всех архитектур ЦП. intel_idle (определен в drivers/idle/intel_idle.c) — это драйвер простоя, разработанный специально для современных ЦП Intel (из комментариев в заголовке intel_idle.c):

/* * intel_idle.c - собственный аппаратный цикл простоя для современных процессоров Intel * ...

/* * intel_idle — это драйвер cpuidle, который загружается на определенных процессорах Intel * вместо устаревшего драйвера ACPI processor_idle. Цель состоит в том, чтобы * сделать Linux более эффективным на этих процессорах, так как intel_idle знает * больше, чем ACPI, а также сделать Linux более невосприимчивым к ошибкам ACPI BIOS. */

Поэтому для современных процессоров Intel следует использовать драйвер intel_idle, поскольку он разработан специально для повышения эффективности процессоров Intel.

Так почему же некоторые установки загружаются с intel_idle, а некоторые с acpi_idle? Вот что указано в сообщении коммита, представляющем драйвер intel_idle:

совершить 2671717265ae6e720a9ba5f13fbec3a718983b65

Автор: Лен Браун Дата: Пн., 8 марта 14:07:30 2010 -0500

intel_idle: собственный аппаратный драйвер cpuidle для новейших процессоров Intel

Этот ЭКСПЕРИМЕНТАЛЬНЫЙ драйвер заменяет acpi_idle на процессорах Intel Atom, Intel Core i3/i5/i7 и связанных процессорах Intel Xeon.

Он не поддерживает процессор Intel Core2 и более ранние модели.

Для ядер, настроенных с ACPI, CONFIG_INTEL_IDLE=y позволяет intel_idle проверять до драйвера процессора ACPI. Загрузка с "intel_idle.max_cstate=0" отключает intel_idle, и система возвращается к "acpi_idle" ACPI.

Типичные дистрибутивы Linux загружают модуль процессора ACPI на ранней стадии, что делает CONFIG_INTEL_IDLE=m не столь полезным на платформах ACPI.

intel_idle проверяет все процессоры во время module_init. Процессоры, которые будут добавлены позже, будут ограничены использованием C1 в режиме ожидания.

Подписано: Лен Браун

Итак, причины таковы:

  1. В системе установлен процессор не Intel или более старая архитектура Intel.
  2. Не отмечено CONFIG_INTEL_IDLE=y в .config
  3. Загрузка с intel_idle.max_cstate=0 в cmdline

Поскольку вы сказали, что установили #3 на обеих установках, вопрос в том, почему одна из них загрузилась с intel_idle. Попробуйте 'cat /proc/cmdline' и убедитесь, что опция действительно установлена. Также проверьте различия между архитектурами с 'lscpu' или 'cat /proc/cpuinfo'

решение2

В другом ответе очень хорошо суммированы различия: intel_idle и acpi_idle.

Даем дополнительную информацию о том, как включить каждый из драйверов. Это предполагает, что ядро ​​было собрано с CONFIG_INTEL_IDLE=y.

  • intel_idle: Включите C-States в BIOS платформы и не используйте никакие аргументы загрузки ядра, затем проверьте, /sys/devices/system/cpu/cpuidle/current_driverотображается ли intel_idle.
  • acpi_idle: Включите C-States в BIOS платформы, используйте аргумент загрузки ядра intel_idle.max_cstate=0, проверьте, что current_driver равен acpi_idle.
  • Полностью отключить C-состояния: Отключить C-States в BIOS платформы, включить аргумент загрузки ядра intel_idle.max_cstate=0, проверить current_driver на none.

Связанный контент