当前位置: 首页 > news >正文

AMD ThinkSystem服务器上的 Linux 和 C 状态设置 - Lenovo ThinkSystem

受影响的配置

该系统可以是以下任何Lenovo服务器:

  • ThinkSystem 、SR645( ThinkSystem )
  • ThinkSystem ,SR645 V3( ThinkSystem )
  • ThinkSystem ,SR635 V3( ThinkSystem )
  • ThinkSystem SR635( ThinkSystem )
  • ThinkSystem 、SR655( ThinkSystem )
  • ThinkSystem ,SR655 V3( ThinkSystem )
  • ThinkSystem ,SR665 V3( ThinkSystem )
  • ThinkSystem 、SR665( ThinkSystem )
  • ThinkSystem ,SR675 V3( ThinkSystem )

该系统至少配置有以下操作系统之一:

  • Linux

问题

所有受支持的 Linux 发行版都使用acpi_idle cpuidle driver与列出的ThinkSystem AMD 服务器上的 CPU C 状态进行交互。此driver的默认行为是遵循 UEFI C 状态设置。然而,如果 cpuidle 函数不可用,Linux 空闲线程将尝试架构默认例程,这会导致系统在 x86 上进入 C1。因此,要禁用 Linux 上的所有 C 状态,仅在 UEFI 中关闭 C 状态是不够的。

解决方法

  1. 在 UEFI 中禁用 C 状态

    列出的系统的默认 UEFI 设置启用 C 状态。

    UEFI 中的以下设置将全局禁用 AMD ThinkSystem服务器上的 C 状态,并将 AMD CPU 保持在 CC0 或 CC1:
    系统设置 > 处理器 >全局 C 状态控制:禁用
    系统设置 > 处理器 > 处理器MONITOR/MWAIT:禁用(此选项仅适用于 v3 系统)

    有关 UEFI 设置选项的详细说明,请参阅所配置的特定系统的 UEFI 手册。手册位于Lenovo服务器页面的 UEFI 手册上。

  2. 在 Linux 中完全禁用 C 状态

    idle=poll添加到内核参数列表

    红帽企业 Linux 服务器:
    编辑 /boot/grub/grub.conf 并在 RHEL 6 及更低版本中添加“ idle=poll ”,或者在 /etc/sysconfig/grub 中的 RHEL 7 中的GRUB_CMDLINE_LINUX行上添加“idle=poll”。请记住,您需要将更改传播到在 RHEL 7 中使用 grub2-mkconfig 磁盘。

    SUSE Linux 企业服务器:
    编辑 /boot/grub/menu.lst 并将“ idle=poll ”参数添加到内核行。

细节

Linux空闲子系统包括几个部分:cpuidle核心、cpuidle调控器、cpuidle驱动程序、idle线程。 C状态的进入和退出由空闲线程控制:空闲线程与cpuidle交互来选择C状态并进入它。

但如果 cpuidle 功能不可用,则空闲线程会尝试默认的 CPU 空闲例程,该例程特定于 CPU 架构。对于x86,默认的CPU空闲例程是执行HALT或MWAIT指令,这将使CPU进入C1。因此,要完全禁用 C 状态,还需要禁用默认的 CPU 空闲例程。

有几个内核参数控制空闲子系统的各个部分:

  1. cpuidle.off=1:关闭cpuidle核心
  2. processor.max_cstate=0:限制acpi_idle driver仅进入C0和C1
  3. intel_idle.max_cstate=0:禁用 intel_idle driver 。请注意,intel_idle driver仅支持Intel平台。
  4. 空闲:控制空闲线程和相关的cpuidle驱动程序

    idle=poll:禁用 cpuidle 驱动程序和默认的 CPU 空闲例程
    空闲 = 停止:禁用 cpuidle 驱动程序
    idle=nomwait:禁用 intel_idle driver

因此,“idle=poll”单独禁用 Linux 上的所有 C 状态。

http://www.lryc.cn/news/436650.html

相关文章:

  • Redis过期删除和缓存淘汰
  • Golang | Leetcode Golang题解之第401题二进制手表
  • TON智能合约stdlib_ext库:扩展功能一览
  • LabVIEW开发FPGA方法与FIFO数据丢失处理
  • Python中的内存池机制
  • 智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)
  • [数据集][目标检测]脊椎检测数据集VOC+YOLO格式1137张1类别
  • 大受欢迎的游戏却又意外被作者下架的《Flappy Bird》将重返iPhone
  • Flutter类
  • 深入解析全连接层:PyTorch 中的 nn.Linear、nn.Parameter 及矩阵运算
  • 缓存对象反序列化失败
  • F28335的存储器与寄存器
  • Python在AOIP(Audio Over IP)方面的应用探讨
  • C++20标准对线程库的改进:更安全、更高效的并发编程
  • 外包干了三年,快要废了。。。
  • 微服务网关终极进化:设计模式驱动的性能与可用性优化(四)
  • Java中的服务端点日志记录:AOP与SLF4J
  • 黑马头条第八天实战(上)
  • swift qwen2-vl推理及加载lora使用案例
  • 如何使用 Choreographer 进行帧率优化
  • 稳定驱动之选SiLM5350系列SiLM5350MDBCA-DG单通道隔离栅极驱动器(带内部钳位):工业自动化的可靠伙伴
  • 鸿蒙OpenHarmony【轻量系统芯片移植】内核移植
  • 多字节字符和宽字符
  • C++缺省参数
  • 深度学习中的常用线性代数知识汇总——第一篇:基础概念、秩、奇异值
  • MATLAB | R2024b更新了哪些好玩的东西?
  • 嵌入式硬件基础知识
  • keepalived和lvs高可用集群
  • 在VMware部署银河麒麟系统
  • git删除本地分支报错:error: the branch ‘xxx‘ is not fully merged