【问题标题】:Pin processor CPU Isolation on WindowsWindows 上的 Pin 处理器 CPU 隔离
【发布时间】:2013-02-25 19:16:36
【问题描述】:

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

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

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

【问题讨论】:

  • 没有。如果需要,最好坚持使用 Linux。

标签: windows multithreading affinity isolation smp


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 2015-03-23
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多