Compartilhar via


Como configurar um dispositivo para desempenho em tempo real

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 dispositivo personalizados para uma finalidade específica. O mapeamento das atribuições de núcleo do processador nos threads do aplicativo deve corresponder aos núcleos do dispositivo físico e sua configuração para cargas de trabalho em tempo real versus padrão.

  1. Desative estados ociosos com powercfg.exe

  2. Consulte as diretrizes de segurança para serviços do sistema para desabilitar os seguintes serviços:

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

    Observação

    Isso abrirá seu dispositivo para vulnerabilidades, pois os patches de segurança não serão aprovados. Dito isso, é necessário, pois o agente do Windows Update não respeita o isolamento do núcleo da CPU. Recomendamos ter um plano para garantir a segurança do dispositivo e instalar atualizações durante os momentos em que o dispositivo pode ser desativado 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 deverá atender à 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 do hardware e só pode ser feito se a placa de rede oferecer suporte a RSS

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

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

Executando esta configuração a partir da linha de comando

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

  1. Execute esses dois comandos em um prompt cmd. Isso desabilita os estados ociosos da CPU, em que uma CPU sem instruções para execução 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 no início da execução de 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 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 o 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 em tempo real

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:

  • Configure um script que possa reabilitar o Windows Update, instalar atualizações e desativar o Windows Update novamente
  • Configure verificações para garantir que os serviços no dispositivo permaneçam desativados

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 desempenho em tempo real flexível. Este 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 de software em tempo real sem também executar esse trabalho de configuração extra resulta em mau funcionamento do sistema e requer recriação de imagens 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 . Sinta-se à 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 da 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.

Os ambientes que usam a WMI (Instrumentação de Gerenciamento do Windows) podem usar o Provedor WMI da Ponte MDM para fazer isso. Aqui está um exemplo para definir a configuração do RealTime 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 a consulta a seguir:

    $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 a máquina para ativar a alteração.

Dica

Você pode usar o mesmo script para qualquer número de núcleos em tempo real que você precisa ter, apenas substituindo o 3 na penúltima linha pelo número apropriado. Isso reservará núcleos começando com o núcleo mais alto e indo para baixo. Portanto, reservar 3 núcleos em uma CPU de 4 núcleos reservará os núcleos 3, 2 e 1 e deixará o núcleo 0 para tarefas do 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 de núcleo em tempo real permanecerão fixos se aumentarem a contagem de núcleos da CPU posteriormente.

Próximo: Desenvolver um aplicativo de software em tempo real