在Windows上固定处理器CPU隔离

时间:2013-03-10 16:30:02

标签: windows multithreading affinity isolation smp

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

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

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

1 个答案:

答案 0 :(得分:3)

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

首先查看at this code here on MSDN枚举进程。除了您的枚举代码,将指定PROCESS_SET_INFORMATION作为OpenProcess的标志。您可能需要使用admin privs运行的代码才能为不以NT信誉运行的进程执行此操作。对于获得的每个进程句柄,调用SetProcessAffinityMask将进程设置为在除一个核之外的所有核上运行。然后将您的进程设置为在从所有其他进程句柄中剔除的保留核心上运行另一个进程。

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

您的里程可能会有所不同。如果这只是用于测试或专用于您的代码的机器,那么它可能会没问题。如果这是一个与所有其他应用程序一起运行的商业应用程序,客户在运行代码时会看到所有其他应用程序和服务都非常失望。小心翼翼。