在我主要工作的linux中,我们使用一种称为CPU隔离的技术,这种技术可以有效地将进程锁定在处理器上,并防止处理器运行其他任何东西。我们的内核人员使用了一些魔法来处理中断。
在windows中,我发现最接近的是亲和力概念,它似乎将一个进程/线程绑定到一个处理器。但它不能保证处理器只运行该进程/线程,这意味着仍然可能存在上下文切换和其他抖动。
有没有办法将CPU隔离在windows上,以获得半确定性的运行时间?
发布于 2013-03-11 16:48:21
在用户模式下没有确切的方法可以做到这一点。Windows主要是为了防止应用程序占用所有的系统资源。但您可能会将大多数其他进程隔离到另一个内核/处理器上,这样您的代码就可以在一个主要专用于它的内核上运行。
首先查看枚举进程的at this code here on MSDN。除了枚举代码会将PROCESS_SET_INFORMATION指定为OpenProcess的标志之外。对于不是以NT证书运行的进程,您可能需要使用admin privs来运行您的代码。对于获取的每个进程句柄,调用SetProcessAffinityMask将进程设置为在除一个内核之外的所有内核上运行。然后将您的进程设置为在从所有其他进程句柄中剔除的保留核心上运行另一个进程。
这将不会处理从启动和负载平衡到您试图在其上运行代码的核心的其他进程。
您的里程可能会有所不同。如果这仅仅是为了测试或者专门用于你的代码的机器,那么它可能会很好。如果这是一个商业应用程序,意味着要与所有其他应用程序一起运行,当客户运行你的代码时,他们会非常失望地看到他们所有的其他应用程序和服务都失败了。小心行事。
https://stackoverflow.com/questions/15324586
复制相似问题