Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os eventos PMU (Unidade do Monitor de Desempenho) são usados para medir o desempenho da CPU e entender a caracterização da CPU das cargas de trabalho. Cada um dos fornecedores de CPU, como Arm, Intel e AMD, tem um manual de referência técnica detalhado para os eventos de PMU disponíveis em sua plataforma. Você pode coletar eventos de PMU em eventos ETW, como CSwitch, ou experimentá-los na interrupção do contador, sempre que o estouro de evento ocorrer durante a execução.
Enumerar eventos de PMU com suporte no sistema
Você pode enumerar eventos PMU disponíveis usando WPR.exe ou Xperf.exe. Apenas um pequeno subconjunto de eventos PMU nos documentos do fornecedor da CPU é implementado no Windows HAL por padrão. No entanto, o WPR oferece uma forma de estender eventos de PMU que não são expostos como as fontes de perfil disponíveis. O comando abaixo lista os eventos de PMU suportados no sistema em execução.
wpr -pmcsources or xperf -pmcsources
A saída do comando mostra os eventos de PMU disponíveis, seus intervalos padrão, intervalos de intervalo e o número do agente que está usando os eventos no momento.
Os eventos PMU são mapeados para PMC (Contadores de Monitoramento de Desempenho). No entanto, o mapeamento não é necessariamente de 1 para 1 com base na implementação das CPUs. Além disso, a maioria das CPUs oferece um determinado número de PMCs (Contadores de Monitoramento de Desempenho) que podem coletar determinados eventos de PMU. Por exemplo, algumas CPUs oferecem quatro contadores programáveis genéricos e três contadores fixos. Os nomes de eventos que terminam com "Fixed" são para os contadores fixos. Certifique-se de habilitar a contagem correta de eventos de PMU no sistema.
Coletar eventos de PMU em eventos ETW
As CPUs têm vários PMCs (Contadores de Monitoramento de Desempenho) que podem contar eventos de PMU. Você pode registrar esses valores de contador sempre que eventos ETW selecionados forem acionados.
Para registrar os valores PMC com eventos ETW usando o WPR (Gravador de Desempenho do Windows), use o elemento <HardwareCounter>
para adicionar o contador e os eventos ETW no perfil personalizado. O exemplo define eventos PMU; TotalCycles e InstructionRetired e coletá-los nos eventos do CSwitch.
<SystemProvider Id="SystemProvider_General_Mobile">
<Keywords>
<Keyword Value="ProcessThread" />
<Keyword Value="Loader" />
<Keyword Value="CSwitch" />
</Keywords>
</SystemProvider>
<HardwareCounter Id="HC_PerfWorkloads.Base" Base="" Strict="true">
<Counters>
<Counter Value="TotalCycles"/>
<Counter Value="InstructionRetired" />
</Counters>
<Events>
<Event Value="CSwitch"/>
</Events>
</HardwareCounter>
O elemento xml do perfil wpr abaixo mostra como fazer referência ao <HardwareCounter>
definido acima no <SystemCollectorId>
.
<SystemCollectorId Value="SystemCollector">
<SystemProviderId Value="SystemProvider_General_Mobile" />
<HardwareCounterId Value="HC_PerfWorkloads.Base"></HardwareCounterId>
</SystemCollectorId>
Para registrar valores de PMC usando Xperf.exe, use a opção -pmc. O exemplo a seguir inicia uma sessão do sistema que coleta InstructionRetired e TotalCycles no evento CSWITCH e outra sessão de evento.
Xperf.exe -on <tracing_flags> -pmc counters events [strict]
Ex>
xperf.exe -on BASE+CSWITCH+POWER+PROC_THREAD+LOADER+MEMINFO+MEMINFO_WS -pmc InstructionRetired,TotalCycles CSWITCH strict -start PMUPerfLogger -on ca92de02-0d94-43a3-9694-d60eb94f2f7d+Microsoft-Windows-Kernel-Pep+Microsoft-Windows-Kernel-Processor-Power:0xC2:4 -BufferSize 1024 -MinBuffers 32 -MaxBuffers 512
Se você fizer o rastreamento com InstructionRetired, contadores TotalCycles no evento CSwitch em particular, e também com a palavra-chave SystemProvider adequada, como ProcessThread , Loader e CSwitch, o Windows Performance Analyzer mais recente exibirá a tabela Ciclos por Instrução.
Amostragem no estouro de PMC
Além de amostragem no tempo (contagem regressiva de ciclos) com a criação de perfil amostrada típica, você também pode amostrar a frequência de eventos de PMU, como previsões incorretas de ramificação, erros de cache ou erros de TLB.
Para obter uma amostra de eventos PMU no WPR, use <SampledCounters>
o elemento in <HardwareCounter>
. O exemplo a seguir configura um contador de hardware que está criando o perfil dos eventos de hardware InstructionRetired. O intervalo é expresso em número de eventos desse tipo.
<SystemProvider Id="SystemProvider_General_Mobile">
<Keywords>
<Keyword Value="ProcessThread" />
<Keyword Value="Loader" />
<Keyword Value="PmcProfile" />
</Keywords>
</SystemProvider>
<HardwareCounter Id="HC_Sampling.Base" Base="" Strict="true">
<SampledCounters>
<SampledCounter Value="InstructionRetired" Interval="100000"/>
</SampledCounters>
</HardwareCounter>
O elemento xml do perfil WPR abaixo mostra como fazer referência ao <HardwareCounter>
definido acima no <SystemCollectorId>
.
<SystemCollectorId Value="SystemCollector_General_Mobile">
<SystemProviderId Value="SystemProvider_General_Mobile" />
<HardwareCounterId Value="HC_Sampling.Base"/>
</SystemCollectorId>
Para obter amostras de eventos de PMU usando Xperf.exe, use a opção -pmcprofile
. O exemplo a seguir inicia uma sessão do sistema que mostra InstructionRetired.
xperf -on proc_thread+loader+cswitch+dpc+interrupt+pmc_profile -pmcprofile instructionretired -stackwalk pmcinterrupt
Definindo configurações de contadores de PMU estendidos
Além dos eventos de PMU arquitetônicos que você pode enumerar por meio do comando (-pmcsources), você também pode configurar eventos de PMU não arquitetônicos por meio do perfil personalizado do WPR ou por meio de configurações do registro. Esse recurso foi adicionado ao Win10 versão 1903. As descrições personalizadas de eventos da PMU podem ser encontradas nas planilhas de dados ou compartilhadas por um fornecedor de hardware. Esses contadores geralmente são específicos para o modelo exato de processador usado.
Configuração usando o perfil personalizado do WPRP
O exemplo a seguir mostra como definir esses contadores no perfil personalizado. Observe que o valor do atributo Architecture é todo em letras maiúsculas e diferencia maiúsculas de minúsculas. No entanto, o WPR irá lembrá-lo com uma mensagem de erro exata se você esquecer.
<MicroArchitecturalConfig Id="CounterConfig_Mine" Base="">
<ProfileSources Architecture="ARM64" Family="8" Model="211" Description="Qualcomm Snapdragon 820">
<ProfileSource Name="SomeCustomCounter" Event="0x3C" Interval="0x02000003" AllowsHalt="false" Persist="false"/>
</ProfileSources>
<ProfileSources Architecture="ARM64" Description="Some Generic Arm counter">
<ProfileSource Name="SomeOtherCustomCounter" Event="0x3D" Interval="0x02000003" AllowsHalt="false" Persist="false"/>
</ProfileSources>
</MicroArchitecturalConfig>
Em seguida, use a configuração de contador estendida em <MicroArchitecturalConfigId>, assim como os contadores de arquitetura internos.
<HardwareCounter Id="HC_PerfWorkloads.Base" Base="" Strict="true">
<MicroArchitecturalConfigId Value="CounterConfig_Mine"></MicroArchitecturalConfigId>
<Counters>
<Counter Value="SomeCustomCounter"/>
<Counter Value="InstructionRetired"/>
<Counter Value="L3CacheAccess"/>
</Counters>
<Events>
<Event Value="CSwitch"/>
</Events>
</HardwareCounter>
O sinalizador estrito em HardwareCounter determinará se o WPR falhará quando o registro falhar. Se strict não for especificado, as ferramentas irão ignorar silenciosamente o erro e continuar. Se o registro falhar e alguém usar um evento não registrado, ele ainda falhará mais tarde. Isso permite flexibilidade, pois há outras ferramentas herdadas, como configurações de registro, para registrar os contadores. O registro de um evento PMU com o mesmo nome será bem-sucedido se os dados do evento existente tiverem os mesmos valores. Se a nova programação entrar em conflito com a antiga, o novo registro irá falhar deixando o antigo no lugar.
Para Arm, um especifica contadores personalizados por Event e AllowsHalt é opcional. Os valores são encontrados nas folhas de dados da família principal da Arm ou na folha de dados do processador específico do fabricante do processador (por exemplo, Qualcomm). Para processadores AMD e Intel, especifica-se Evento e Unidade conforme especificado em suas fichas técnicas. Para Intel, além de Event e Unit, também estão disponíveis alguns bits estendidos. Esses ExtendedBits são "CMask CMaskInvert AnyThread EdgeDetect" com cada dois dígitos como caractere sem sinal. Esse campo é opcional, então você pode omiti-lo se não precisar dos bits especiais. Por exemplo;
<ProfileSource Name="L1D_PEND_MISS.PENDING_CYCLES_ANY" Event="0x48" Unit="0x01" Interval="0x02000003" ExtendedBits="01000100" />
Configuração com o registro
Você também pode usar as configurações do registro para configurar contadores não arquitetônicos. O exemplo de registro a seguir configura contadores não arquitetônicos para a arquitetura Intel. Os mecanismos também funcionam em outras implementações de CPU e consultam o manual de referência técnica do fornecedor.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\ProfileSource\<Model>]
"Architecture"=dword:00000002
"Family"=dword:00000006
"Model"=dword:0000002D
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\ProfileSource\<Model>\BR_INST_EXEC.NONTAKEN_CONDITIONAL]
"Event"=dword:00000088
"Unit"=dword:00000041
"Interval"=dword:00200003
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\ProfileSource\<Model>\BR_INST_EXEC.TAKEN_CONDITIONAL]
"Event"=dword:00000088
"Unit"=dword:00000081
"Interval"=dword:00200003