如何设置intel_idle.max_cstate = 0来禁用c状态?

Paq*_*ito 5 kernel linux-kernel

我想在我的电脑上禁用c状态.

我在BIOS上禁用了c-state但我没有获得任何结果.但是,我找到了一个解释:"在使用英特尔处理器的系统上,大多数较新的Linux发行版使用"intel_idle"驱动程序(可能已编译到您的内核而不是单独的模块中)来使用C状态.此驱动程序使用各种知识CPU无需系统固件(BIOS)输入即可控制C状态.此驱动程序将忽略任何其他BIOS设置和内核参数"

我找到了两个解决方案来解决这个问题,但我不知道如何申请:

1)"所以如果你想控制C状态,你应该使用内核参数"intel_idle.max_cstate = 0"来禁用这个驱动程序."

我既不知道如何检查(intel_idle.max_cstate)的值,也不知道如何更改其值.

2)"要动态控制C状态,打开文件/ dev/cpu_dma_latency并为其写入最大允许延迟.这将防止使用转换延迟高于指定值的C状态,只要文件/ dev/cpu_dma_latency保持打开状态.写入允许的最大延迟为0将使处理器保持在C0"

我无法读取文件cpu_dma_latency.

谢谢你的帮助.

计算机:Intel Xeon CPU E5-2620 Gnome 2.28.2 Linux 2.6.32-358

小智 5

要在启动时更改该值,可以修改GRUB配置或即时对其进行编辑-修改方法因发行版而异。 这是Ubuntu文档,用于一次启动或永久更改内核参数。对于RHEL派生的发行版,我看不到非常清晰的文档,但是您直接修改了/boot/grub/grub.conf以便在每个可启动节的“内核”行中包含参数。

对于问题的第二部分,许多设备文件是只读或只写的。您可以使用像这样的小型perl脚本(未经测试,不是很干净,但是应该可以工作)以保持文件打开:

#!/usr/bin/perl

use FileHandle;
my $fd = open (">/dev/cpu_dma_latency");
print $fd "0";
print "Press CTRL-C to end.\n";

while (1) {
    sleep 5;
}
Run Code Online (Sandbox Code Playgroud)

红帽在知识库文章一个C段在这里也和参数的详细描述。