acpi_idle vs. intel_idle

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
2
down vote

favorite
2












There are two SLES 11 servers:



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


and:



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


Both having the:



intel_idle.max_cstate=0 processor.max_cstate=0


in the: "/boot/grub/menu.lst", were rebooted.



The question: what is the difference between acpi_idle and intel_idle ?







share|improve this question




















  • This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
    – vallismortis
    Aug 13 at 16:59














up vote
2
down vote

favorite
2












There are two SLES 11 servers:



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


and:



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


Both having the:



intel_idle.max_cstate=0 processor.max_cstate=0


in the: "/boot/grub/menu.lst", were rebooted.



The question: what is the difference between acpi_idle and intel_idle ?







share|improve this question




















  • This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
    – vallismortis
    Aug 13 at 16:59












up vote
2
down vote

favorite
2









up vote
2
down vote

favorite
2






2





There are two SLES 11 servers:



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


and:



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


Both having the:



intel_idle.max_cstate=0 processor.max_cstate=0


in the: "/boot/grub/menu.lst", were rebooted.



The question: what is the difference between acpi_idle and intel_idle ?







share|improve this question












There are two SLES 11 servers:



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


and:



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


Both having the:



intel_idle.max_cstate=0 processor.max_cstate=0


in the: "/boot/grub/menu.lst", were rebooted.



The question: what is the difference between acpi_idle and intel_idle ?









share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '17 at 13:40









Peter

6612




6612











  • This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
    – vallismortis
    Aug 13 at 16:59
















  • This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
    – vallismortis
    Aug 13 at 16:59















This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
– vallismortis
Aug 13 at 16:59




This question and its answer contain a deep dive into the intel_idle driver and also compare its behavior to the acpi_driver.
– vallismortis
Aug 13 at 16:59










1 Answer
1






active

oldest

votes

















up vote
2
down vote



accepted










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.



More details:
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:




commit 2671717265ae6e720a9ba5f13fbec3a718983b65



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
processors.



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:



  1. Non-Intel CPU on the system or older Intel architectures.

  2. Not marked CONFIG_INTEL_IDLE=y in .config

  3. 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'



Hope this helps.






share|improve this answer




















    Your Answer







    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "106"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f405775%2facpi-idle-vs-intel-idle%23new-answer', 'question_page');

    );

    Post as a guest






























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    2
    down vote



    accepted










    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.



    More details:
    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:




    commit 2671717265ae6e720a9ba5f13fbec3a718983b65



    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
    processors.



    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:



    1. Non-Intel CPU on the system or older Intel architectures.

    2. Not marked CONFIG_INTEL_IDLE=y in .config

    3. 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'



    Hope this helps.






    share|improve this answer
























      up vote
      2
      down vote



      accepted










      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.



      More details:
      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:




      commit 2671717265ae6e720a9ba5f13fbec3a718983b65



      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
      processors.



      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:



      1. Non-Intel CPU on the system or older Intel architectures.

      2. Not marked CONFIG_INTEL_IDLE=y in .config

      3. 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'



      Hope this helps.






      share|improve this answer






















        up vote
        2
        down vote



        accepted







        up vote
        2
        down vote



        accepted






        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.



        More details:
        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:




        commit 2671717265ae6e720a9ba5f13fbec3a718983b65



        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
        processors.



        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:



        1. Non-Intel CPU on the system or older Intel architectures.

        2. Not marked CONFIG_INTEL_IDLE=y in .config

        3. 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'



        Hope this helps.






        share|improve this answer












        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.



        More details:
        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:




        commit 2671717265ae6e720a9ba5f13fbec3a718983b65



        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
        processors.



        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:



        1. Non-Intel CPU on the system or older Intel architectures.

        2. Not marked CONFIG_INTEL_IDLE=y in .config

        3. 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'



        Hope this helps.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 20 '17 at 21:02









        Tgilgul

        21127




        21127



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f405775%2facpi-idle-vs-intel-idle%23new-answer', 'question_page');

            );

            Post as a guest













































































            Popular posts from this blog

            Peggy Mitchell

            The Forum (Inglewood, California)

            Palaiologos