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.
Desabilitar estados ociosos com
powercfg.exe
Faça referência às diretrizes de segurança para que os serviços do sistema desabilitem os seguintes serviços:
- SysMain (Superfetch)
- DPS (Serviço de Política de Diagnóstico)
- Audiosrv (Áudio do Windows)
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.
Defina o CSP do WindowsIoT para desempenho em tempo real.
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
Opcional:Desabilitar DPCs threaded para depuração
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.
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
Execute estes três comandos em um prompt cmd para desabilitar o DPS:
sc query dps sc stop dps sc config dps start=disabled
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
Execute estes três comandos em um prompt cmd para desabilitar o SysMain:
sc query SysMain sc stop SysMain sc config SysMain start=disabled
Execute estes três comandos em um prompt cmd para desabilitar Windows Update:
sc query wuauserv sc stop wuauserv sc config wuauserv start=disabled
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:
Baixe a ferramenta psexec.
Execute um prompt de comando administrativo.
No prompt de comando, inicie o PowerShell na conta do sistema
psexec.exe -s -i powershell.exe
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
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.