什么是Windows Priority和Affinity,它提供哪些优势?


9

优先级和相似性到底是什么(在任务管理器中找到),它们的用途是:

在任务管理器中找到

在自定义这些设置的情况下,应该/可以在什么情况下使用它们,以及发现哪些优点。

Answers:


3

设置亲和力可以做一些事情,但是您永远都不想使用它。

设置CPU关联会强制Windows仅使用所选的CPU(或内核)。如果将关联性设置为单个CPU,则Windows将仅在该CPU上运行该应用程序,而不会在任何其他CPU上运行。

Windows自动将运行的应用程序放在最不繁忙的处理器上,因此将其限制为单个CPU并不能使Windows正常工作。即使CPU /核心1忙于运行其他应用程序,Windows也将无法运行在CPU /核心2上设置了相似性的应用程序。

确实,您要这样做的唯一原因是运行一个在多CPU / Core系统上运行时无法正常运行的旧应用程序。


5
>您永远都不想使用它。 不对。如果您有一个单线程应用程序,则它无法最大程度地使用CPU的线程/核心,Windows无法采取任何措施来强制/欺骗它。如果您有两个单线程应用程序,则可以告诉Windows让每个应用程序使用一个单独的线程/内核,这样您就可以将其最大使用率提高到100%(而不是使总CPU使用率徘徊在50-75%左右)。被一个程序最大程度地使用)。因此,是的,您确实可以使用该设置,但这是大多数人不知道/不知道/不需要的特定场景。
Synetech

2
如果您有两个单线程应用程序,则Windows将在不同的线程/内核上运行每个应用程序,并且无需设置关联性即可获得100%的CPU使用率。为了测试,我仅在4核计算机上运行了4个单线程程序实例,并获得了100%的CPU使用率。Windows足够智能,可以高效地调度CPU。
shf301

我猜这取决于Windows的系统和/或版本。我已经看到它(XP)将两个内核都悬停在50-75%的位置,其中两个进程都设置为两个内核,并手动将它们设置为CPU满负荷运行。
Synetech

@Synetech:这似乎几乎是不可能的。必须始终将两个过程从一个核心移到另一个核心。
David Schwartz

另一个有效的用例是:有些应用程序可能会利用所有可用的CPU,并可能阻止其他程序正常运行和/或使OS对用户输入的响应非常缓慢。在这种情况下,可能有人决定将这种应用程序限制为仅某些CPU。作为开发人员,我在分析CPU密集型应用程序时经常使用此功能,因为分析本身需要CPU。
Eyal Roth

2

设置相似性告诉该进程允许在哪个处理器上运行。

虽然对于某些特定情况非常有用,但普通用户可能不应该对此感到困惑。

例如,如果某个进程允许其自己的核心运行,则它可以实时(接近)实时运行,而这70个Windows实用程序不会在自己的时间片内不断中断和在处理器上进行堆栈交换。在多处理器/多核系统问世之前,实时应用程序是Windows永远无法做到的,因为操作系统会不断地出于自身目的中断/任务切换应用程序。现在,可以通过隔离一个处理器的实时应用程序,同时防止系统中的所有其他应用程序使用该处理器来克服这一问题。这是一个非常小众的课题,但是诸如(真实)飞行模拟器,工厂自动化和控制反馈系统之类的系统要依靠实时架构来工作。

可以将处理器密集型应用程序(例如VM)隔离到自己的核心,因此您可以使用它们而无需将系统的其余部分拖入爬网。从理论上讲,在支持裸机管理程序交互的处理器上运行的管理程序可以达到与独立运行的独立操作系统相同的处理器性能(减去运行主机操作系统所需的处理器)。当然,实际上,即使是在其自身隔离的内核/处理器上运行的VM,仍将需要接受来自主机OS主机的少量开销。

对于处理大量数据流的应用程序,将应用程序隔离到其自己的处理器(并可能仍使用多个内核)将减少缓存交换。

可以在多个处理器中分散运行的旧应用程序可以有效地限制为一个内核/处理器来解决此问题。

如果要在特定应用程序上进行性能测量,则几乎不可能在不同系统上获得一致的结果,除非您可以隔离进程,否则,您将无法控制操作系统为应用程序提供的时间。大多数人都同意,测量运行时性能不会给出良好的结果,但是这些人从未考虑过可以通过使用亲缘关系来限制OS干预(使结果如此不一致)。

在很多情况下,亲和力至关重要,但是,如果您不知道亲和力是什么,则可能不需要它。


使亲和力远没有许多人想象的有用的是:将进程亲和力设置为可用CPU的某些子集。不会关闭其他任何CPU。为此,您必须转到系统中的所有其他进程,以使其脱离自己想要拥有的CPU。那几乎是不切实际的。
Jamie Hanrahan

可以使用3rd party软件。为什么MS默认情况下不包括此功能,这超出了我的范围。
伊万·普赖斯

因为,正如我所写的那样,它并不是那么有用。而且容易被滥用。实际上,过于亲密的“创造性”的通常结果是,事情本来不会运行。通常,最好在不是您认为首选的CPU上运行线程,而不是根本不运行线程(在您愚蠢地设置了亲和力以拒绝它访问原本处于空闲状态的CPU之后)。Windows的默认“理想处理器”和“先前处理器”机制可实现良好的缓存一致性,而无需亲和掩码的这种钝器。
Jamie Hanrahan

2

在某些情况下,这是一个非常有用的功能。假设您有一个多线程应用程序,该应用程序往往处于空闲状态,或者在几分钟内主动捕获每个CPU的100%进行搜索,构建等操作。我们将此应用程序称为“ Eclipse”。

还要说,当您在处理此应用程序时,您还有许多其他对CPU要求不高的应用程序,但它们实际上是实时应用程序。例如,当您使用Eclipse并随机启动构建或进行gwt编译时,还使用计算机在浏览器窗口中流式传输音乐或进行研究(例如,研究构建问题的原因) 。当然,如果您跳过音乐或浏览器停止响应,也不会死,但这很烦人。

关联性使您可以将cpu eating应用程序限制为7/8内核,这样可以保证其他所有人都可以访问相对未使用的cpu,并且不必时常处理计算机上其他所有内容的卡顿和中断而日食正在逐渐消失。


在这种情况下,您只需将CPU的生猪进程设置为低优先级,就会更好。
Jamie Hanrahan

1

较高的优先级意味着任务的处理将比低优先级的任务更具优势。如果您运行的应用程序需要快速响应,并且需要运行其他一系列非交互过程,例如,优先级可以确保您对高优先级过程有更好的体验。

例如:从Windows Vista开始,Windows Media Player会自动获得更高的优先级,以确保流畅连续地播放媒体文件,默认情况下,其他进程只能使用大约20%的CPU时间。这只是一个示例,可以帮助您了解优先级。(您可以在Technet上的Vista中阅读有关Media Player优先级的更多信息。)

软或硬关联可以提高处理速度,因为在先前中断某个进程然后在以后的某个时间恢复时,CPU的高速缓存中仍可以保留该进程的剩余内容。


谢谢!那么,使用Afinity有什么好的指南?
詹姆斯·默兹


一个使用亲和力的好指南:“不要”。
杰米·汉拉汉

“只有20%的CPU时间可用于其他进程”不是准确的描述。实际的实现是,允许加入多媒体类调度程序的线程在实时优先级类中的每个调度间隔的运行时间最多达到 80%。它不一定必须使用那么多,如果不需要的话。超过20%的空间可用于其他线程。
Jamie Hanrahan 2015年

1

一个完美的例子是旧的计算机游戏(或其他软件),尤其是在现代64位计算机上模拟32位游戏(应用程序)时。通过将旧游戏的亲和力设置为仅限制四个核心,可以避免崩溃以启动残酷的游戏。某些由OLD游戏,视频编辑器和硬件加速的图形软件(或CAD软件)使用的渲染引擎无法理解四个以上的CPU内核,一旦启动就会崩溃。

我不是为了发布该帐户而创建帐户,而是要我找到Google'kieseyhow'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.