Como configurar um dispositivo para Real-Time desempenho

Este guia explica como configurar seu dispositivo para desempenho em tempo real.

Observação

A única maneira de usar esse recurso é com um aplicativo e um dispositivo personalizados para uma finalidade específica. O mapeamento de atribuições principais do processador nos threads de aplicativo deve corresponder aos núcleos de dispositivo físico e sua configuração para cargas de trabalho em tempo real versus padrão.

  1. Desabilitar estados ociosos com powercfg.exe

  2. Faça referência às diretrizes de segurança para que os serviços do sistema desabilitem os seguintes serviços:

    1. SysMain (Superfetch)
    2. DPS (Serviço de Política de Diagnóstico)
    3. Audiosrv (Áudio do Windows)
  3. Desabilite Windows Update usando estas diretrizes.

    Observação

    Isso abrirá seu dispositivo para vulnerabilidades, pois os patches de segurança não passarão. Dito isso, é necessário, pois o agente de Windows Update não respeita o isolamento do núcleo da CPU. É recomendável ter um plano para garantir a segurança do dispositivo e instalar atualizações durante os horários em que o dispositivo pode ser retirado para manutenção

    Dica

    Um bom exemplo de gerenciamento de atualizações durante o tempo de inatividade pode ser encontrado na documentação da UWF: Dispositivos protegidos por UWF de serviço Se você estiver usando UWF e Soft Real-time, esse processo deve cuidar da necessidade de atualização do sistema operacional para ambos os recursos ao mesmo tempo.

  4. Defina o CSP do WindowsIoT para desempenho em tempo real.

  5. Configurar o RSS para migrar ISRs/DPCs para CPU0

    Observação

    Isso depende de hardware e só poderá ser feito se a NIC der suporte ao RSS

  6. Opcional:Desabilitar DPCs threaded para depuração

  7. Opcional: Implantando um driver de fixação DPC personalizado para determinadas interrupções de hardware seguindo estas diretrizes.

Executando essa configuração na linha de comando

Isso configura o dispositivo enquanto ligado. Para garantir que o dispositivo mantenha o desempenho soft-RT, você deve configurar o computador para executar esses comandos como um script sempre que o computador habilitar usando essas diretrizes.

  1. Execute esses dois comandos em um prompt de cmd. Isso desabilita os estados ociosos da CPU, em que uma CPU sem instruções para executar entrará em um estado de economia de energia. Isso é indesejável em cenários em tempo real, pois as CPUs ociosas têm um atraso ao começar a executar novas instruções:

    powercfg.exe /setacvalueindex SCHEME_CURRENT SUB_PROCESSOR IdleDisable 1
    powercfg.exe /setactive SCHEME_CURRENT
    
  2. Execute estes três comandos em um prompt cmd para desabilitar o DPS:

    sc query dps
    sc stop dps
    sc config dps start=disabled
    
  3. Execute estes três comandos em um prompt de cmd para desabilitar o Audiosrv:

    sc query Audiosrv
    sc stop Audiosrv
    sc config Audiosrv start=disabled
    
  4. Execute estes três comandos em um prompt cmd para desabilitar o SysMain:

    sc query SysMain
    sc stop SysMain
    sc config SysMain start=disabled
    
  5. Execute estes três comandos em um prompt cmd para desabilitar Windows Update:

    sc query wuauserv
    sc stop wuauserv
    sc config wuauserv start=disabled
    
  6. Execute este comando para desabilitar DPCs encadeados

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

Garantindo que o dispositivo permaneça configurado para Real-Time

Antes de implantar um dispositivo em tempo real em um ambiente de produção, há outra configuração necessária para garantir que o dispositivo possa receber atualizações e manter o desempenho em tempo real:

  • Configurar um script que pode reabilitar Windows Update, instalar atualizações e desativar Windows Update novamente
  • Configurar verificações para garantir que os serviços no dispositivo permaneçam desabilitados

O que é o CSP do WindowsIoT?

O WindowsIoT CSP é usado para configurar dispositivos Windows IoT. Atualmente, a única funcionalidade disponível neste CSP é configurar um dispositivo para o desempenho do Soft Real-Time. Esse não é o único trabalho que precisa ser feito para usar o soft real-time com um dispositivo. Você também deve executar as seis etapas anteriores. Usar esse CSP para definir núcleos suaves em tempo real sem também executar esse trabalho de configuração extra resulta em mau funcionamento do sistema e requer reimaginação para recuperação.

A hierarquia desse CSP é a seguinte:

WindowsIoT
   SoftRealTimeProperties
      SetRTCores

Um valor maior que 0 e menor que o número total de núcleos no dispositivo deve ser fornecido ao parâmetro SetRTCores. Fique à vontade para definir esse CSP usando qualquer ferramenta que sua organização use para configurar seus dispositivos ou use as etapas abaixo para usar a Ponte MDM.

Usar o Provedor WMI de Ponte MDM para configurar o CSP do WindowsIoT

Esse CSP configura o sistema para desempenho em tempo real. Você precisa fornecer o número de núcleos de CPU a serem alocados para tarefas em tempo real, com o restante sendo alocado para executar tarefas do sistema ou do usuário padrão. Um valor numérico deve ser fornecido no nó SetRTCores. Esse é o número de núcleos de CPU dedicados a cargas de trabalho em tempo real. Os valores numéricos válidos devem ser pelo menos 1 e menores que o número de núcleos físicos na CPU.

Ambientes que usam a WMI (Instrumentação de Gerenciamento do Windows) podem usar o Provedor WMI de Ponte MDM para fazer isso. Aqui está um exemplo para definir a configuração em tempo real com três núcleos em tempo real:

  1. Baixe a ferramenta psexec.

  2. Execute um prompt de comando administrativo.

  3. No prompt de comando, inicie o PowerShell na conta do sistema psexec.exe -s -i powershell.exe

  4. Execute este script:

    $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. Reinicie o computador para ativar a alteração.

Dica

Você pode usar o mesmo script para qualquer número de núcleos em tempo real necessário, apenas substituindo o 3 na linha de segundo a último pelo número apropriado. Isso reservará núcleos começando com o núcleo mais alto e indo para baixo. Portanto, reservar três núcleos em uma CPU de 4 núcleos reservará núcleos 3, 2 e 1 e deixará o núcleo 0 para tarefas de sistema e não em tempo real. Observe que não há garantia de que os núcleos em tempo real permanecerão mais altos, pois os índices principais em tempo real permanecerão fixos se aumentarem a contagem de núcleos de CPU posteriormente.

Próximo: Desenvolver um aplicativo de Real-Time flexível