如何设置设备的实时性能

本指南将引导你完成如何设置设备以获取实时性能。

注意

使用此功能的唯一方法是使用针对特定目的自定义构建的应用程序和设备。 应用程序线程中处理器核心分配的映射必须与物理设备核心及其实时工作负载与标准工作负载的配置相匹配。

  1. 使用 powercfg.exe 禁用空闲状态

  2. 请参考系统服务的安全准则来禁用以下服务:

    1. SysMain (Superfetch)
    2. DPS(诊断策略服务)
    3. Audiosrv(Windows 音频)
  3. 使用此指南禁用 Windows 更新。

    备注

    这将使设备暴露于各种漏洞,因为安全修补程序无法通过。 也就是说,这是必要的,因为 Windows 更新代理不遵循 CPU 核心隔离。 建议制定一个计划,确保设备安全性,并在设备可以停机维护期间安装更新

    提示

    在以下 UWF 文档中可找到在停机期间管理更新的一个很好的示例:服务 UWF 保护的设备。如果你使用 UWF 和软实时,则此过程应同时考虑到这两项功能的 OS 更新需求。

  4. 设置 WindowsIoT CSP,实现实时性能。

  5. 配置 RSS 以将 ISR/DPC 迁移到 CPU0

    注意

    这取决于硬件,只有在 NIC 支持 RSS 时才能实现

  6. 可选:禁用线程 DPC 进行调试

  7. 可选:按照此指南,为某些硬件中断部署自定义 DPC 固定驱动程序。

从命令行执行此配置

这会在开机时配置设备。 为了确保设备保持软 RT 性能,应该使用本指南配置计算机,使其每次打开时都以脚本形式运行这些命令。

  1. 在 cmd 提示符中运行这两个命令。 这会禁用 CPU 空闲状态,其中没有运行说明的 CPU 将进入节能状态。 这在实时场景中是不可取的,因为空闲的 CPU 在开始执行新指令时会有延迟:

    powercfg.exe /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IdleDisable 1
    powercfg.exe /setactive SCHEME_CURRENT
    
  2. 在 cmd 提示符中运行这三个命令以禁用 DPS:

    sc query dps
    sc stop dps
    sc config dps start=disabled
    
  3. 在 cmd 提示符中运行这三个命令以禁用 Audiosrv:

    sc query Audiosrv
    sc stop Audiosrv
    sc config Audiosrv start=disabled
    
  4. 在 cmd 提示符中运行这三个命令以禁用 SysMain:

    sc query SysMain
    sc stop SysMain
    sc config SysMain start=disabled
    
  5. 在 cmd 提示符中运行这三个命令以禁用Windows 更新:

    sc query wuauserv
    sc stop wuauserv
    sc config wuauserv start=disabled
    
  6. 运行此命令以禁用线程 DPC

    reg add "HKLM\System\CurrentControlSet\Control\Session Manager\kernel" /v ThreadDpcEnable /t REG_DWORD /f /d 0
    

确保设备保持实时设置

在将实时设备部署到生产环境之前,需要进行其他设置,以确保设备可以接收更新并维持实时性能:

  • 设置一个脚本,该脚本可重新启用 Windows 更新、安装更新并再次禁用 Windows 更新
  • 设置检查以确保设备上服务保持禁用状态

什么是 WindowsIoT CSP?

WindowsIoT CSP用于配置 Windows IoT 设备。 目前,此 CSP 中唯一可用的功能是配置设备,实现软实时性能。 这不是唯一需要完成的工作,以便对设备使用软实时。 还必须执行前六个步骤。 使用此 CSP 设置软实时核心而不同时执行此额外配置工作会导致系统故障,并需要重置映像才能恢复。

此 CSP 的层次结构如下所示:

WindowsIoT
   SoftRealTimeProperties
      SetRTCores

必须将大于 0 且小于设备上核心总数的值提供给 SetRTCores 参数。 请随意使用你的组织用于配置其设备的任何工具来设置此 CSP,或使用以下步骤来使用 MDM 桥。

使用 MDM 桥 WMI 提供程序配置 WindowsIoT CSP

此 CSP 配置系统以获取实时性能。 需要提供要分配给实时任务的 CPU 核心数,其余部分将分配给运行系统或标准用户任务。 必须在 SetRTCores 节点中提供数值。 这是专用于实时工作负载的 CPU 核心数。 有效数值必须至少为 1 且小于 CPU 中的物理核心数。

使用 Windows Management Instrumentation (WMI) 的环境可使用 MDM 桥 WMI 提供程序来实现此目的。 下面是一个使用三个实时核心设置 RealTime 配置的示例:

  1. 下载 psexec 工具

  2. 运行管理命令提示符。

  3. 在命令提示符下,在系统帐户下启动 PowerShell psexec.exe -s -i powershell.exe

  4. 执行以下脚本:

    $nameSpaceName="root\cimv2\mdm\dmmap"
    $className="MDM_WindowsIoT_SoftRealTimeProperties01"
    $obj = Get-CimInstance -Namespace $namespaceName -ClassName $className
    Add-Type -AssemblyName System.Web
    Set-CimInstance -CimInstance $obj
    $obj.SetRTCores = 3
    Set-CimInstance -CimInstance $obj
    
  5. 重新启动计算机以激活更改。

提示

可将同一脚本用于所需的任何数量的实时核心,只需将倒数第二行中的 3 替换为适当的数字即可。 这将保留从最高核心开始并向下保留核心。 因此,在 4 核 CPU 上保留 3 个核心将保留核心 3、2 和 1,并为系统和非实时任务保留核心 0。 请注意,无法保证实时核心数会保持最高,因为如果之后增加 CPU 核心计数,实时核心索引将保持固定。

下一 步:开发软Real-Time应用程序