Disabling the Intel Idle Driver
This recommendation is good practice for latency-sensitive systems tuning.
Background:
Intel Nehalem chips can be subject to sporadic pauses in certain circumstances unrelated to Azul Platform Prime.
The issue seems to be an erratum in Nehalem and some Westmere chips related to aggressive power-saving optimizations introduced in these chips. The issue is that your system might be seen to freeze for periods as small at 1/10 of a second and as much as 30 seconds. This pause is provoked by the use of a new driver which Intel introduced and which is enabled by default in Red Hat Enterprise Linux 6.1.
It is not clear which Nehalem/Westmere chips are subject to this issue. When the issue is fixed by Intel and/or Red Hat, we will remove this check.
Reference:
-
Red Hat bug related to Nehalem and Westmere, see https://bugzilla.redhat.com/show_bug.cgi?id=710265
-
Citrix discussion of the issue, including pointers to Intel chip errata documentation, see http://support.citrix.com/article/CTX127395
-
Dell discussion, see http://en.community.dell.com/dell-blogs/enterprise/b/tech-center/archive/2011/07/15/low-latency-and-c-states-in-linux.aspx
Action:
If you are using a Nehalem power efficiency chip set, disable the Intel idle driver.
To disable the Intel Idle Driver, boot your system with the additional kernel flag, intel_idle.max_cstate=0
.
Note
|
|
To automatically disable the Intel Idle Driver:
On RHEL/CentOS/CentOS 8 Stream systems:
-
Edit
/etc/default/grub
to add the argument,intel_idle.max_cstate=0
, toGRUB_CMD_LINE_LINUX
. For example: If your/etc/default/grub
file contains the following:GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_qaesp3/root rd.lvm.lv=rhel_qaesp3/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet " GRUB_DISABLE_RECOVERY="true"Append:
intel_idle.max_cstate=0
The resulting line should look like this:GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_qaesp3/root rd.lvm.lv=rhel_qaesp3/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet intel_idle.max_cstate=0" GRUB_DISABLE_RECOVERY="true" -
Update the grub entries, run the command.
-
On BIOS-based machines:
~]# sudo grub2-mkconfig --output=/boot/grub2/grub.cfg
-
On UEFI-based machines:
~]# sudo grub2-mkconfig --output=/boot/efi/EFI/redhat/grub.cfg
-
-
Reboot the system.
-
Verify that your running kernel has the Intel Idle driver disabled.
View
/proc/cmdline
and search for the stringintel_idle.max_cstate=0
. If the string is present then the currently-running kernel has the Intel Idle driver disabled.
On RHEL/CentOS 7.x systems:
-
Edit
/etc/default/grub
to add the argument,intel_idle.max_cstate=0
, toGRUB_CMD_LINE_LINUX
. For example: If your/etc/default/grub
file contains the following:GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_qaesp3/root rd.lvm.lv=rhel_qaesp3/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet " GRUB_DISABLE_RECOVERY="true"Append:
intel_idle.max_cstate=0
The resulting line should look like this:GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_qaesp3/root rd.lvm.lv=rhel_qaesp3/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet intel_idle.max_cstate=0" GRUB_DISABLE_RECOVERY="true" -
Update the grub entries, run the command.
-
On BIOS-based machines:
~]# sudo grub2-mkconfig --output=/boot/grub2/grub.cfg
-
On UEFI-based machines:
~]# sudo grub2-mkconfig --output=/boot/efi/EFI/redhat/grub.cfg
-
-
Reboot the system.
-
Verify that your running kernel has the Intel Idle driver disabled.
View
/proc/cmdline
and search for the stringintel_idle.max_cstate=0
. If the string is present then the currently-running kernel has the Intel Idle driver disabled.
On RHEL/CentOS 5.x or 6.x systems:
-
Edit
/boot/grub/grub.conf
to add the argument,intel_idle.max_cstate=0
, to the kernel line for the kernel you are booting. For example: If your/boot/grub/grub.conf
file contains the following:kernel /vmlinuz-2.6.32-122.el6.x86_64 ro \ root=/dev/mapper/vg_bogrhel61-lv_root rd_LVM_LV=vg_bogrhel61/lv_root \ rd_LVM_LV=vg_bogrhel61/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM \ LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us \ crashkernel=auto rhgb quietAppend:
intel_idle.max_cstate=0
. The resulting line should look like this:kernel /vmlinuz-2.6.32-122.el6.x86_64 ro \ root=/dev/mapper/vg_bogrhel61-lv_root rd_LVM_LV=vg_bogrhel61/lv_root \ rd_LVM_LV=vg_bogrhel61/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM \ LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us \ crashkernel=auto rhgb quiet intel_idle.max_cstate=0 -
Reboot the system.
-
Verify that your running kernel has the Intel Idle driver disabled.
View
/proc/cmdline
and search for the stringintel_idle.max_cstate=0
. If the string is present then the currently-running kernel has the Intel Idle driver disabled.
On Ubuntu systems:
-
Edit
/etc/default/grub
to add the argument,intel_idle.max_cstate=0
, toGRUB_CMDLINE_LINUX
. For example: If your/etc/default/grub
file contains the following:GRUB_CMDLINE_LINUX=" "Append:
intel_idle.max_cstate=0
. The resulting line should look like this:GRUB_CMDLINE_LINUX="intel_idle.max_cstate=0" -
Update the
grub
entries, run the command.$ sudo update-grub -
Reboot the system.
-
Verify that your running kernel has the Intel Idle driver disabled.
View
/proc/cmdline
and search for the stringintel_idle.max_cstate=0
. If the string is present then the currently-running kernel has the Intel Idle driver disabled.
On SUSE systems:
-
Edit
/boot/grub/menu
.lst to add the argument,intel_idle.max_cstate=0
, to the kernel line for the kernel you are booting. For example: If your/boot/grub/menu
.lst file contains the following:title SUSE Linux Enterprise Server 11 SP2 - 3.0.13-0.27 root (hd0,1) kernel /boot/vmlinuz-3.0.13-0.27-default root=/dev/sda2 resume=/dev/sda1 splash=silent crashkernel=128M-:64M showopts vga=0x314 initrd /boot/initrd-3.0.13-0.27-defaultAppend:
intel_idle.max_cstate=0
. The resulting line should look like this:title SUSE Linux Enterprise Server 11 SP2 - 3.0.13-0.27 root (hd0,1) kernel /boot/vmlinuz-3.0.13-0.27-default root=/dev/sda2 resume=/dev/sda1 splash=silent crashkernel=128M-:64M showopts vga=0x314 \ intel_idle.max_cstate=0 initrd /boot/initrd-3.0.13-0.27-default -
Reboot the system.
-
Verify that your running kernel has the Intel Idle driver disabled.
View
/proc/cmdline
and search for the stringintel_idle.max_cstate=0
. If the string is present then the currently-running kernel has the Intel Idle driver disabled.