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

2024-04-10

我想在我的计算机上禁用 c 状态。

我在 BIOS 上禁用了 c-state,但没有获得任何结果。不过,我找到了一个解释: “大多数较新的 Linux 发行版,在配备 Intel 处理器的系统上,使用“intel_idle”驱动程序(可能编译到内核中,而不是单独的模块)来使用 C 状态。该驱动程序使用各种 CPU 的知识来控制 C 状态,而无需来自系统固件 (BIOS) 的输入。此驱动程序将主要忽略任何其他 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。

感谢您的帮助。

电脑: 英特尔至强 CPU E5-2620 侏儒2.28.2 Linux 2.6.32-358


要在引导时更改该值,您可以修改 GRUB 配置或即时编辑它 - 修改方法因发行版而异。This https://wiki.ubuntu.com/Kernel/KernelBootParameters是用于单次启动或永久更改内核参数的 Ubuntu 文档。对于 RHEL 派生的发行版,我没有看到非常清晰的文档,但您可以直接修改 /boot/grub/grub.conf 以在每个可引导节的“kernel”行上包含参数。

对于问题的第二部分,许多设备文件是只读或只写的。您可以使用像这样的小 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;
}

Redhat 在知识库文章中有一个 C 代码片段here https://access.redhat.com/site/articles/65410以及参数的更多描述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置 intel_idle.max_cstate=0 来禁用 c 状态? 的相关文章

  • 如何重新编译单个内核模块?

    通常内核源代码存储在 usr src linux 2 6 x 为了避免在修改模块的源代码时重新编译整个内核 如何重新编译该模块 切换到源代码树的根目录并运行以下命令 make modules SUBDIRS drivers the modu
  • 在设备驱动程序中使用 select()/poll()

    我有一个驱动程序 它可以处理多个 TCP 连接 有没有一种方法可以在给定列表的情况下执行类似于内核中用户空间应用程序 api 的 select poll epoll 的操作struct sock s Thanks 您可能想编写自己的自定义s
  • 如何设置 intel_idle.max_cstate=0 来禁用 c 状态?

    我想在我的计算机上禁用 c 状态 我在 BIOS 上禁用了 c state 但没有获得任何结果 不过 我找到了一个解释 大多数较新的 Linux 发行版 在配备 Intel 处理器的系统上 使用 intel idle 驱动程序 可能编译到内
  • simple_read_from_buffer/simple_write_to_buffer 与 copy_to_user/copy_from_user

    我最近编写了一个实现这些功能的模块 两者有什么区别 据我了解 copy user功能更加安全 如果我错了 请纠正我 此外 将这两个功能混合在一个程序中是不是一个坏主意 例如 我用过simple read from buffer在我的杂项开发
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • ARM Linux 如何模拟 PTE 的脏位、访问位和文件位?

    As per pgtable 2 level h https git kernel org cgit linux kernel git torvalds linux git tree arch arm include asm pgtable
  • Android内核编译错误gcc6 linaro 6

    我正在尝试使用 Linaro 6 进行编译 但收到此错误 我认为该错误与 GCC 6 有关 我对编译内核或编码非常业余 但即使搜索类似的术语我也无法弄清楚 CC drivers iommu msm iommu v1 o In file in
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • Linux 如何在 x86-64 中支持超过 512GB 的虚拟地址范围?

    Linux 中 x86 64 的用户虚拟地址空间为 47 位长 这本质上意味着 Linux 可以映射大约 128 TB 虚拟地址范围的进程 然而 令我困惑的是 x86 64 架构支持 ISA 为每个进程定义的 4 级分层页表 排列为基数树
  • 内核虚拟地址转换

    考虑到 Linux 和 32 位 x86 架构 可访问的 4GB 地址空间的比例为 3 1 用户空间分配0 3 Gb 而3 4 Gb 分配给内核 大于 3Gb 且位于内核地址空间的虚拟地址如何转换为物理地址 页表会出现吗 梅尔 戈尔曼的书中
  • 如何从内核空间读取/写入 linux /proc 文件?

    我正在编写一个由用户程序和内核模块组成的程序 内核模块需要收集数据 然后将其 发送 到用户程序 这必须通过 proc 文件来完成 现在 我创建了文件 一切都很好 并且花了很长时间在互联网上寻找答案 但仍然找不到 如何读 写 proc 文件f
  • 杀死 OpenCL 内核

    有没有办法通过 OpenCL API 终止正在运行的 OpenCL 内核 我在规范中没有找到任何内容 我能想到的唯一解决方案是 1 定期检查内核中主机希望内核停止时写入的标志 或 2 在单独的进程中运行内核并终止整个进程 我认为这两个都不是
  • 套接字对和一对无名管道有什么区别吗?

    我不仅想知道用户端的差异 还想知道 Linux 内核实现中的差异 共同部分 管道是单向的 因此需要两个管道才能进行双向通信 而套接字对是双向的 管道始终是面向流的 而套接字对可以是面向数据报的 套接字对正常AF UNIX套接字 这意味着辅助
  • 操作系统如何知道缺失页面的磁盘地址?

    分页充当虚拟地址空间和物理地址空间之间的间接层 给定一个地址 操作系统 OS 内存管理单元 MMU 将其转换为主内存位置 我的问题是 主内存中不存在该页面的情况 操作系统如何知道在磁盘上哪里可以找到该页面 它在哪里存储1的信息 它不存储在页
  • 系统调用:sys_exit()、SYS_exit 和 exit() 之间的区别

    SYS exit sys exit 和 exit 之间有什么区别 我的理解是 Linux内核提供了系统调用 这些调用在man 2 syscalls 这些系统调用的包装函数由glibc它们的名称与系统调用大多相似 我的问题 在man 2 sy
  • 如何在 Linux 内核空间使用 ioctl()?

    可以打电话吗ioctl来自 Linux 内核模块 谁能提供一个如何使用它的例子吗 您可以尝试拨打电话sys ioctl 如果内核是用以下命令编译的 则它会被导出CONFIG COMPAT 或者 如果您有设备驱动程序struct file o
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 当IRQL下降时,Windows中如何触发软件中断?

    我知道对于硬件中断 当 KeAcquireInterruptSpinLock 调用 KeLowerIrql 时 HAL 会调整 LAPIC 中的中断掩码 这将允许自动服务排队的中断 可能在 IRR 中 但是对于软件中断 例如 ntdll d
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并

随机推荐