
Существует два сервера 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 в режиме ожидания.
Подписано: Лен Браун
Итак, причины таковы:
- В системе установлен процессор не Intel или более старая архитектура Intel.
- Не отмечено CONFIG_INTEL_IDLE=y в .config
- Загрузка с 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
.