最近在调 9950x 台式机的主板风扇策略时发现一个反直觉的现象,这款 cpu 用全核心跑 Cinebench R23 时的温度要比用更少的核心跑的时候还明显要低,比如我不开 pbo ,用默认 200W 的功耗墙,全核心跑 r23 时温度最高不超过 90 度,但用 8 到 16 个线程来跑时就会撞到 95 度的温度墙,观察发现是因为用更少的核心跑时频率更高才导致的温度更高。

我这台机是作为 linux 服务器使用的,会跑一些对单核心性能要求不高,但是需要一定的多核心性能的程序,我希望跑这部分程序时 CPU 的频率最高不要超过全核心跑 r23 时的 4.7ghz 的频率,但是除了这部分程序外,其他程序还是可以跑到最高的性能,有办法实现吗?

举报· 631 次点击
登录 注册 站外分享
5 条回复  
GeekGao 小成 2024-12-10 15:49:07
# 安装 cpulimit sudo apt-get install cpulimit # 对特定进程限制 CPU 使用率 cpulimit -p [PID] -l [percentage]
wniming 楼主 初学 2024-12-10 15:57:09
@GeekGao 这个限制不了 cpu 的频率,这个只是通过给进程发信号控制运行和暂停来限制使用率
kuanat 小成 2024-12-10 16:06:24
9950x 是基本频率 4.3 然后 Boost 最高到 5.7 ,如果你能接受降低到 4.3 ,有个简单的方法是用 amd-pstate 调度,在执行特定任务的时候限制在 4.3 ,执行完之后再切换回来。 参考 https://docs.kernel.org/admin-guide/pm/amd-pstate.html ``` To manipulate the boost attribute, users can write a value of 0 to disable the boost or 1 to enable it, for the respective CPU using the sysfs path /sys/devices/system/cpu/cpuX/cpufreq/boost, where X represents the CPU number. ``` 我不确定是否能限制到 4.7 ,这要看 amd-pstate 是否支持。一个曲线救国的思路是写个假负载的程序然后绑定到 8~16 个核心上,让 cpu 误认为是全核心任务从而降低频率。 另外现在 amd 的 smp 调度还是有问题的,相关的内核补丁不确定能否赶上 6.12 的合并窗口。这一系列补丁主要是调度让单核心的任务跑在体质最好的核心上的。
debuggeeker 初学 2024-12-10 16:16:01
90°是不是散热器不行
nevin47 小成 2024-12-10 16:16:14
如果 CPU 有对应的接口,那理论上可以,但是 kernel 的 schedule 里面没有这么复杂的功能 cgroup 可以限制核心数量,但是没有给每个核限频
返回顶部