7

在我主要工作的 linux 中,我们使用一种称为 CPU 隔离的技术,它可以有效地将进程锁定在处理器上,并阻止处理器运行其他任何东西。我们的内核人员做了一些魔术来处理中断。

在 Windows 中,我发现的最接近的东西是一个相似性概念,它似乎将进程/线程绑定到处理器。但它不能保证处理器仅运行该进程/线程,这意味着仍然可能存在上下文切换和其他抖动。

有没有办法在 Windows 上隔离 CPU 以获得半确定性的运行时间?

4

1 回答 1

5

在用户模式下没有确切的方法来做到这一点。Windows 主要试图防止应用程序占用所有系统资源。但是您可能可以将大多数其他进程隔离到另一个内核/处理器,以便您的代码可以在主要专用于它的内核上运行。

首先在 MSDN上查看有关枚举进程的代码。除了您的枚举代码将指定 PROCESS_SET_INFORMATION 作为OpenProcess的标志。您可能需要使用管理员权限运行的代码才能为未作为 NT 凭据运行的进程执行此操作。对于获得的每个进程句柄,调用SetProcessAffinityMask将进程设置为在除一个之外的所有内核上运行。然后将您的进程设置为在您从所有其他进程句柄中剔除的保留核心上运行另一个。

这不会处理从启动和负载平衡到您尝试运行代码的核心的其他进程。

你的旅费可能会改变。如果这只是用于测试或专用于您的代码的机器,那么它可能会很好。如果这是一个旨在与所有其他应用程序一起运行的商业应用程序,那么当客户在运行您的代码时看到他们所有其他应用程序和服务都停止运行时,他们会感到非常失望。小心行事。

于 2013-03-11T08:48:20.867 回答