在 Windows 上,我经常将游戏进程的优先级更改为“高”或“实时”,以提高性能。这从未对我的硬件造成任何问题。我在想也许我可以在 Linux 上使用命令来chrt
更改游戏进程的实时优先级,因为renice
即使更改为 -20(最高优先级)似乎也没有提供任何明显的提升。然而,在不知道这样做是否会对我的 CPU 造成损害的情况下,我对这样做持谨慎态度。谁能告诉我风险吗?
答案1
更改进程的优先级仅决定当其他进程竞争 CPU 时间时该进程运行的频率。当进程是唯一使用 CPU 时间的进程时,它没有影响。空闲系统上的最小优先级进程可以获得 100% 的 CPU 时间,与最大优先级进程相同。
因此,您可以以更高的优先级运行游戏,但这不会使其运行得更快,除非系统上的其他东西正在使用大量的 CPU 时间。
我建议保持优先级低于 X 服务器,因为如果 X 服务器需要 CPU 时间,很可能是因为游戏要求它显示一些复杂的内容,而显示通常是一项对 CPU 要求较高的任务(但这取决于需要多少 CPU 时间)的工作是在 GPU 中完成的——CPU 优先级对 GPU 没有影响)。
CPU 设计用于执行代码。更改进程优先级不会影响 CPU 的工作量,但即使影响了,也不会损坏 CPU,只会使其运行得更热,从而使计算机中的风扇吹得更猛烈。
答案2
您是在谈论改变运行线程时的 CPU 需求量吗?
现代CPU实际上使用极快的速度步进。例如,如果您对 Intel Core i5/i7 的时钟进行分析,您可以看到时钟速度非常非常快地上下闪烁。这是英特尔根据功耗调整性能的一部分。台式电脑中可能有大量可用电量,但当 CPU 工作更加努力时,这些电量就会转化为热量,因此获得最大的每瓦功率非常重要。
我只是从其他游戏论坛上读到的内容才知道这一点。我不是 CPU 科学家。
我认为将线程调整到最大“讨厌程度”不会造成任何损害。您唯一应该注意的是 CPU 的温度有多高,但除非您在 BIOS 中使用了过压功能,否则在关闭之前几乎不可能将 CPU 烧坏。
现代 CPU 的设计目的是快速改变速度。搜索 Intel Speed Stepping 和“CPU C states”,您就会明白我的意思。
答案3
在Linux上使用renice
程序不会烧毁你的CPU,但它不一定会做你想要它做的事情。
优先事项有没有什么与 CPU 执行代码的速度有关。它以同样的速度执行不同优先级程序中的代码。优先级发生变化的是操作系统在有选择时选择运行哪个程序。 CPU 一次只能运行一个执行“线程”(技术上,对于多核 CPU,每个核心 1 个线程)。如果它需要做更多的事情,它就依赖于多任务处理——它在执行不同的程序之间来回切换,给人一种运行的线程比 CPU 数量还多的错觉。当选择为每项任务分配多少时间时,它会使用优先级作为提示。
对于计算机来说,“实时”的含义不是“运行得这么快”,而是“不要抢占这个过程”。实时编程在许多领域都非常重要。例如,如果我正在编写管理汽车防抱死制动系统的软件,我真的不希望我的任务晚运行几毫秒,因为操作系统决定需要对挡风玻璃雨刷器运行诊断。因此,汽车中的防抱死制动管理软件以“实时”优先级运行。
说实话,在 Linux 中,“实时”优先级有点用词不当。这是因为 Linux 调度其进程的方式。在 Windows 中,如果您有一个以较高优先级运行的进程,则以较低优先级运行的进程不会获得任何 CPU 时间,除非较高优先级的任务正在等待某些东西——根本没有。仅允许内核进程在“实时”Windows 任务之上运行。 Windows 有一个吨一直在后台运行的臃肿软件,因此将优先级提高到“实时”可以防止所有垃圾运行。
然而,这有一个问题。有时,您的较高优先级任务取决于其中一项较低优先级任务。这称为“优先级反转”,它是多线程编程领域的一个大话题。当这种情况发生时,较高优先级的任务可能会导致较低优先级的任务挨饿,而没有意识到它正在停止自己!在 Linux 中,这种情况不会发生,因为在 Linux 中,优先级被视为一种确定将 CPU 的哪一部分分配给每个程序的方法,而不是一种全有或全无的方法。以 -20 运行的进程得到实质上比在 0 处运行的 CPU 时间更多,但即使存在 -20 程序,0 程序也会获得一些CPU 时间。如果内存可用,当前的 Linux 调度程序为 -1 的程序提供的 CPU 功率是 0 的两倍,为 -2 的程序提供的 CPU 功率是 -1 的两倍,依此类推。这意味着 0.9999046% 的 CPU 时间将用于 -20 的程序,但还有一小部分做转到 0 处的程序。0 处的程序感觉就像在 200kHz 处理器上运行!
如果你曾经想要真的实时,你可以防止其他任何东西抢占你,你必须编写内核驱动程序,或者你必须使用 Linux 的实时扩展。 Redhat 有一个名为 MRG 的工具,它允许在 Linux 上进行真正的实时处理。在这种情况下,“实时”意味着特定的东西。在 MRG 下,“实时”组中的用户被允许使用这些实时扩展(这可能会使处理器永远忙碌,因为他们故意不使用友好的 Linux 调度程序)。