Windows 未利用所有逻辑处理器

Windows 未利用所有逻辑处理器

(我最初在 Stack Overflow 上发布了此内容,但被引导到这里。如果这不是合适的论坛,我深表歉意。)

我们有一个控制器应用程序,它异步启动模拟应用程序。(这两个应用程序都是用 C++ 编写的,并在 Windows 上运行。)我们的应用程序是单线程的(尽管第三方库可能使用工作线程)。控制器应用程序依靠操作系统来最佳地利用逻辑处理器。

某用户有一台戴尔电脑,有 12 个内核和 24 个逻辑处理器,运行 Windows 10 Enterprise。该电脑专用于运行模拟,后台活动极少。用户将控制器配置为启动 24 个模拟进程,期望所有逻辑处理器都得到利用。但结果用户发现,实际利用了 12 个逻辑处理器(根据 Process Explorer): 使用 12 个逻辑处理器

在 Process Explorer 设置亲和性对话框中,控制器进程已检查所有 24 个逻辑处理器。此行为已在其他计算机上观察到,并非特定于用户。

我修改了控制器以调用 Windows API 函数 SetProcessAfinityMask(),将每个模拟过程分配给其自己的逻辑处理器,并且能够利用所有 24 个逻辑处理器(每个 Process Explorer): 使用 24 个逻辑处理器

在处理器资源管理器设置亲和性对话框中,每个模拟过程仅检查其指定的逻辑处理器。

我们的应用程序虽然目前仅限于 Windows,但基本上与平台无关,我更愿意让操作系统处理调度(而不是注入低级操作系统 API 调用)。

我的问题是:

  • 为什么 Windows 不使用所有逻辑处理器?
  • 是否有控制此行为的设置?(目前适用于 Windows 8.1、10 和 11。)
  • 如果有必要注入低级 OS API 调用,有什么事情要做(或不要做)?例如,即使计算机专用于运行模拟,最好还是留出 1-2 个逻辑处理器用于后台活动?

我是这方面的新手 - 在我开始研究用户的问题之前,我并不知道处理器亲和性 - 所以如果我在搜索网络时错过了什么,我深表歉意。与用户的电子邮件交流很长,讨论、尝试和排除了许多解决方案。我试图提供足够多但不是太多的细节。如果有帮助,我很乐意提供更多信息。

相关内容