Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los eventos PMU se usan para medir el rendimiento de la CPU y comprender la caracterización de la CPU de las cargas de trabajo. Cada uno de los proveedores de CPU, como Arm, Intel y AMD, tienen un manual de referencia técnica detallado para los eventos PMU disponibles en su plataforma. Puede recopilar eventos de PMU en eventos ETW, como CSwitch o muestrearlos en la interrupción del contador, siempre que se produzca el desbordamiento del evento durante la ejecución.
Enumeración de eventos PMU admitidos en el sistema
Puede enumerar eventos PMU disponibles mediante WPR.exe o Xperf.exe. De forma predeterminada, solo se implementa un pequeño subconjunto de eventos PMU en los documentos del proveedor de CPU en Windows HAL. Sin embargo, WPR proporciona una manera de ampliar los eventos PMU que no se exponen como orígenes de perfil disponibles. El comando siguiente enumera los eventos PMU admitidos en el sistema en ejecución.
wpr -pmcsources or xperf -pmcsources
La salida del comando muestra los eventos PMU disponibles, sus intervalos predeterminados, intervalos de intervalos y el número de registrador que actualmente usa los eventos.
Los eventos PMU se asignan a contadores de monitor de rendimiento (PMC). Sin embargo, la asignación no es necesariamente de 1 a 1 en función de la implementación de las CPU. Además, la mayoría de las CPU proporcionan un número determinado de contadores de monitor de rendimiento (PMC) que pueden recopilar determinados eventos PMU. Por ejemplo, algunas CPU proporcionan cuatro contadores programables genéricos y tres contadores fijos. Los nombres de evento que terminan con "Fixed" son para los contadores fijos. Asegúrese de habilitar el recuento correcto de eventos PMU en el sistema.
Recopilación de eventos PMU en eventos ETW
Las CPU tienen varios contadores de monitor de rendimiento (PMC) que pueden contar eventos PMU. Puede registrar esos valores de contador cada vez que se activen eventos ETW seleccionados.
Para registrar los valores de PMC con eventos ETW mediante Windows Performance Recorder (WPR), use el elemento <HardwareCounter>
para agregar los eventos ETW y el contador en el perfil personalizado. En el ejemplo se definen eventos PMU; TotalCycles e InstructionRetired y recopilarlos en los eventos 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>
El elemento xml de perfil de wpr siguiente muestra cómo hacer referencia al elemento <HardwareCounter>
definido anteriormente en <SystemCollectorId>
.
<SystemCollectorId Value="SystemCollector">
<SystemProviderId Value="SystemProvider_General_Mobile" />
<HardwareCounterId Value="HC_PerfWorkloads.Base"></HardwareCounterId>
</SystemCollectorId>
Para registrar los valores de PMC mediante Xperf.exe, use la opción -pmc. En el ejemplo siguiente se inicia una sesión del sistema que recopila InstructionRetired y TotalCycles en el evento CSWITCH y otra sesión de eventos.
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
Si realiza un seguimiento con los contadores InstructionRetired, TotalCycles en el evento CSwitch en particular, y también con la palabra clave SystemProvider adecuada, como ProcessThread , Loader y CSwitch, el último Analizador de rendimiento de Windows mostrará la tabla Ciclos por instrucción.
Muestreo en PMC Overflow
Además del muestreo en el tiempo (recuento de ciclos) con la generación de perfiles de muestreo típica, también puede muestrear la frecuencia de eventos PMU, como errores de rama, errores de caché o errores de TLB.
Para realizar una muestra de eventos PMU en WPR, use <SampledCounters>
en el elemento <HardwareCounter>
. En el ejemplo siguiente se configura un contador de hardware que genera perfiles en los eventos de hardware InstructionRetired. El intervalo está en el número de eventos de ese 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>
El elemento xml de perfil de WPR siguiente muestra cómo hacer referencia al elemento <HardwareCounter>
definido anteriormente en <SystemCollectorId>
.
<SystemCollectorId Value="SystemCollector_General_Mobile">
<SystemProviderId Value="SystemProvider_General_Mobile" />
<HardwareCounterId Value="HC_Sampling.Base"/>
</SystemCollectorId>
Para realizar un ejemplo en eventos de PMU mediante Xperf.exe, use la opción -pmcprofile
. En el ejemplo siguiente se inicia una sesión del sistema que muestrea en InstructionRetired.
xperf -on proc_thread+loader+cswitch+dpc+interrupt+pmc_profile -pmcprofile instructionretired -stackwalk pmcinterrupt
Configuración de configuraciones de contadores PMU extendidas
Además de los eventos de PMU arquitectónicos que puede enumerar a través del comando (-pmcsources), también puede configurar eventos PMU no arquitectónicos a través de un perfil personalizado de WPR o a través de la configuración del Registro. Esta funcionalidad se agregó a la versión 1903 de Win10. Las descripciones de eventos PMU personalizadas se pueden encontrar en las hojas de datos o como compartidas por un proveedor de hardware. Estos contadores suelen ser específicos para el modelo de procesador exacto usado.
Configuración mediante el perfil personalizado de WPRP
En el ejemplo siguiente se muestra cómo definir estos contadores en el perfil personalizado. Tenga en cuenta que el valor del atributo Architecture distingue mayúsculas y mayúsculas. WPR se lo recordará sin embargo con un mensaje de error exacto si lo olvida.
<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>
A continuación, use la configuración de contador extendido en <MicroArchitecturalConfigId> igual que los contadores arquitectónicos integrados.
<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>
La marca estricta de HardwareCounter determinará si WPR producirá un error cuando se produzca un error en el registro. Si no se especifica strict, las herramientas omitirán silenciosamente el error y continuarán. Si se produce un error en el registro y uno usa un evento no registrado, se producirá un error más adelante. Esto permite flexibilidad, ya que hay otras herramientas heredadas, como la configuración del Registro, para registrar los contadores. El registro de un evento PMU con el mismo nombre se realizará correctamente si los datos del evento existentes tienen los mismos valores. Si la nueva programación entra en conflicto con la anterior, se producirá un error en el nuevo registro dejando el anterior en su lugar.
Para Arm, uno especifica contadores personalizados por Event y AllowsHalt es opcional. Los valores se encuentran en las hojas de datos principales de la familia Arm o en la hoja de datos específica del procesador (por ejemplo, Qualcomm). Para los procesadores AMD e Intel, uno especifica Event y Unit como se especifica en sus hojas de datos. Para Intel además de Event y Unit, también están disponibles algunos bits extendidos. Estos ExtendedBits son "CMask CMaskInvert AnyThread EdgeDetect" con cada dos dígitos como caracteres sin signo. Este campo es opcional, por lo que puede omitirlo si no necesita los bits especiales. Por ejemplo:
<ProfileSource Name="L1D_PEND_MISS.PENDING_CYCLES_ANY" Event="0x48" Unit="0x01" Interval="0x02000003" ExtendedBits="01000100" />
Configuración mediante el registro
También puede usar la configuración del Registro para configurar contadores que no son arquitectónicos. En el ejemplo del Registro siguiente se configuran contadores que no son arquitectónicos para la arquitectura Intel. Los mecanismos también funcionan en otras implementaciones de CPU y hacen referencia al manual de referencia técnica del proveedor.
[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