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.
Esto muestra cómo medir algunas de las medidas de tiempo de rendimiento más importantes para una aplicación DirectX mediante las herramientas XPerf y GPUView que se incluyen como parte del Kit de herramientas de rendimiento de Windows. Esta no es una guía completa para comprender las herramientas, sino su aplicabilidad específica para analizar el rendimiento de la aplicación DirectX. Aunque la mayoría de las técnicas que se describen aquí son relevantes para todas las aplicaciones de DirectX, es más relevante para las aplicaciones que usan cadenas de intercambio y no para las aplicaciones directX basadas en XAML que usan animaciones SIS/VSIS y XAML. Le guiaremos por las medidas clave del tiempo de rendimiento, cómo adquirir e instalar las herramientas y tomar seguimientos de medidas de rendimiento y analizarlos para comprender los cuellos de botella de la aplicación.
Acerca de las herramientas
XPerf
XPerf es un conjunto de herramientas de análisis de rendimiento basadas en seguimiento de eventos para Windows (ETW) diseñadas para medir y analizar el rendimiento detallado del sistema y la aplicación y el uso de recursos. A partir de Windows 8, esta herramienta de línea de comandos tiene una interfaz gráfica de usuario y se denomina Windows Performance Recorder (WPR) y El Analizador de rendimiento de Windows (WPA). Puede encontrar más información sobre estas herramientas en la página web de Windows Performance Toolkit (WPT): Windows Performance Toolkit.
Un ETW recopila eventos de kernel solicitados y los guarda en un archivo denominado archivo de registro de seguimiento de eventos (ETL). Estos eventos de kernel proporcionan información extensa sobre una aplicación y características del sistema al ejecutar la aplicación. Los datos se recopilan habilitando la captura de seguimiento, realizando el escenario de aplicación deseado que necesita análisis, deteniendo la captura que guarda los datos en un archivo ETL. A continuación, puede analizar el archivo en la misma máquina o en otra mediante la herramienta de línea de comandos xperf.exe o la herramienta de análisis de seguimiento visual xperfview.exe.
GPUView
GPUView es una herramienta de desarrollo para determinar el rendimiento de la unidad de procesamiento de gráficos (GPU) y la CPU. Examina el rendimiento con respecto al procesamiento del búfer de acceso directo a memoria (DMA) y al resto del procesamiento de vídeo en el hardware de vídeo.
En el caso de las aplicaciones directX que dependen en gran medida de la GPU, GPUView es una herramienta eficaz para comprender la relación entre el trabajo realizado en la CPU frente a la GPU. Para obtener más información sobre GPUView, consulta Uso de GPUView.
De forma similar a XPerf, se realiza un seguimiento ETW iniciando el servicio de seguimiento, ejecutando el escenario que requiere análisis para la aplicación considerada, deteniendo el servicio y guardando la información en un archivo ETL. GPUView presenta los datos presentes en el archivo ETL en un formato gráfico.
Después de instalar la herramienta GPUView , se recomienda leer el tema "Pantalla principal de GPUView" en el menú "Ayuda de GPUView ". Contiene información útil sobre cómo interpretar la interfaz de usuario de GPUView .
Instalación de las herramientas
Tanto XPerf como GPUView se incluyen en Windows Performance Toolkit (WPT).
XPerf se distribuye como parte del Kit de desarrollo de software (SDK) de Windows para Windows. Descargue elde Windows SDK.
GPUView está disponible en windows Assessment and Deployment Kit (Windows ADK). Descargue Windows ADK.
Después de la instalación, debe agregar los directorios que contienen XPerf y GPUView a la variable "Path" del sistema.
Haga clic en el botón Inicio y escriba "Variables del sistema". Se abre la ventana Propiedades del sistema. Haga clic en "Editar las variables de entorno del sistema". Seleccione "Variables de entorno" en el cuadro de diálogo "Propiedades del sistema". La variable "Path" se encuentra en "Variables del sistema". Anexe el directorio que contiene xperf.exe y GPUView.exe a la ruta de acceso. Estos ejecutables se encuentran en el directorio "Windows Performance Toolkit" dentro de "Windows Kits". La ubicación predeterminada es: C:\Archivos de programa (x86)\Windows Kits\10\Windows Performance Toolkit.
Medidas de tiempo de rendimiento
La mayoría de las aplicaciones esperan ejecutarse sin problemas y responder a la entrada del usuario. Sin embargo, dependiendo del escenario que desee, un aspecto del rendimiento podría ser más importante que otro. Por ejemplo, para una aplicación lector de noticias que se ejecuta en un pc de tableta táctil, el aspecto más importante es ver un solo artículo a la vez y desplazarse por el mismo o otro artículo. En este escenario, la capacidad de representar todo el contenido de cada fotograma no es necesario. Sin embargo, la capacidad de desplazarse por el artículo sin problemas sobre un gesto táctil es sumamente importante.
En otro caso, un juego o una aplicación de renderizado de vídeo que utiliza muchas animaciones puede presentar fallos si se quitan fotogramas. En este caso, la capacidad de presentar contenido en la pantalla sin interrupción de la entrada del usuario es extremadamente importante.
Para comprender qué parte de la aplicación es problemática, el primer paso es decidir los escenarios más importantes. Una vez que se comprendan los aspectos básicos de la aplicación y cómo se ejercerán, buscar problemas con las herramientas resulta más fácil.
Algunas de las métricas de tiempo de rendimiento más comunes son las siguientes:
Tiempo de inicio
Tiempo medido desde el inicio del proceso hasta la primera vez que llega a la pantalla. Esta medida es más útil cuando el sistema es cálido, lo que significa que la medida se toma después de que la aplicación se inicie varias veces.
Tiempo de CPU por cuadro
Hora en la que la CPU procesa activamente la carga de trabajo de la aplicación para un fotograma. Si la aplicación se ejecuta sin problemas, todo el procesamiento necesario para un fotograma se produce dentro de un intervalo de sincronización virtual. Con la frecuencia de actualización del monitor de 60Hz, esto viene a 16 ms por fotograma. Si el tiempo o el período de CPU son mayores de 16 ms, es posible que se necesiten optimizaciones de CPU para generar una experiencia de aplicación sin problemas.
Tiempo de GPU por fotograma
El tiempo durante el cual la GPU procesa activamente la carga de trabajo de la aplicación para un fotograma. Una aplicación está limitada por la GPU cuando el tiempo necesario para procesar un fotograma es más de 16 ms.
La posibilidad de comprender si una aplicación está enlazada a CPU o GPU restringirá la parte problemática del código.
Captura del trazado de medición de tiempo de rendimiento
Realice estos pasos para realizar un seguimiento:
- Abra una ventana de comandos como administrador.
- Cierre la aplicación si ya se está ejecutando.
- Cambie los directorios al directorio gpuview dentro de la carpeta Windows Performance Toolkit.
- Escriba "log.cmd" para iniciar el seguimiento de eventos. Esta opción registra los eventos más interesantes. Otras opciones disponibles registran un ámbito diferente de los eventos. Por ejemplo, el modo de registro "v" o detallado captura todos los eventos que gpuView conoce.
- Inicie el ejemplo y haga ejercicio el ejemplo de una manera que abarque la ruta de rendimiento que necesita analizar.
- Vuelva a las ventanas de comandos y escriba "log.cmd" de nuevo para detener el registro.
- Esto genera un archivo denominado "merged.etl" en la carpeta gpuview . Puede guardar este archivo en otra ubicación y puede analizarlo en la misma máquina o en otra. Para ver los detalles del rastreo de pila, guarde el archivo de símbolos (.pdb) asociado con la app.
Medidas
Nota:
Las medidas para la muestra de realización de geometría se toman en un equipo de cuatro núcleos con una tarjeta gráfica DirectX11 integrada. Las medidas varían en función de la configuración de la máquina.
En esta sección se muestra cómo medir el tiempo de inicio, el tiempo de CPU y GPU por fotograma. Puede capturar una traza de rendimiento para el mismo ejemplo en tu máquina y ver las diferencias en las distintas medidas.
Para analizar el seguimiento en GPUView, abra el archivo "merged.elt" mediante GPUView.exe.
Tiempo de inicio
El tiempo de inicio se mide por el tiempo total invertido desde el inicio de la aplicación hasta que el contenido aparece primero en la pantalla.
La medida de tiempo de inicio se toma mejor siguiendo los pasos que se indican en la sección anterior con estas variaciones:
- Si realiza las mediciones de inicio en el preciso momento de lanzar la aplicación por primera vez, se denomina inicio en frío. Esto puede variar con respecto a las medidas tomadas después de iniciar la aplicación repetidas veces en un corto período de tiempo. Esto se denomina inicio en caliente. Dependiendo del número de recursos que crea una aplicación al iniciarse, puede haber una gran diferencia entre los dos tiempos de inicio. Dependiendo de los objetivos de la aplicación, medir uno u otro podría ser deseable.
- Al registrar la información de rendimiento, finalice la aplicación tan pronto como aparezca el primer fotograma en la pantalla.
Cálculo del tiempo de inicio mediante GPUView
En GPUView, desplácese hacia abajo hasta el proceso pertinente, en este caso GeometryRealization.exe.
La cola de CPU de contexto representa la carga gráfica en cola en el hardware, pero no necesariamente está siendo procesada por el hardware. Cuando se abre el archivo de seguimiento, muestra todos los eventos registrados entre el momento en que se tomó el seguimiento. Para calcular el tiempo de inicio, seleccione la región de interés y acérquese a la parte inicial de la primera cola de CPU de contexto, ya que esta es la que muestra actividad, mediante Ctrl + Z. Puede encontrar más información sobre los controles de GPUView en el archivo de ayuda, en la sección "Resumen de los controles GPUView". En la ilustración siguiente, solo se muestra el proceso GeometryRealization.exe acercado a la primera parte de la cola de la CPU de contexto. El color de la cola de la CPU de contexto se indica mediante el rectángulo justo debajo de la cola, y los paquetes de datos del mismo color en la cola muestran el trabajo de la GPU en espera en el hardware. El paquete de patrón de tramas en la cola de contexto muestra el paquete actual, lo que significa que la aplicación busca que el hardware presente el contenido en la pantalla.
El tiempo de inicio es la hora en que se inicia la aplicación por primera vez (en este caso, el módulo de punto de entrada del subproceso de interfaz de usuario SHCORE.dll) hasta que aparezca el contexto por primera vez (marcado por un paquete de sombreado). La ilustración aquí resalta el área de interés.
Nota:
La información presente actual se representa en la cola de volteo y, por lo tanto, el tiempo se extiende hasta que el paquete actual se complete realmente en la cola de volteo.
La barra de estado completa no está visible en la ilustración siguiente, que también muestra el tiempo transcurrido entre las partes resaltadas. Este es el tiempo de inicio de la aplicación. En este caso para la máquina mencionada anteriormente, resultó ser alrededor de 240 ms.
Tiempo de CPU y GPU por fotograma
Hay algunas cosas que pensar al medir el tiempo de CPU. Busque las áreas del registro en las que ha probado el escenario para analizar. Por ejemplo, en la muestra de realización de geometría uno de los escenarios que se han analizado es la transición entre la representación de primitivos 2048 y 8192, todos no realizados (como en, la geometría no se tesela cada fotograma). El seguimiento muestra claramente la diferencia en la actividad de CPU y GPU antes y después de la transición en el número de primitivos.
Se analizan dos escenarios para calcular el tiempo de CPU y GPU por fotograma. Son los siguientes.
- Pasar de representar 2048 primitivos no realizados a 8192 primitivos no realizados.
- La transición de renderizar 8192 primitivos realizados a 8192 primitivos no representados.
En ambos casos, se observó que la velocidad de fotogramas se redujo drásticamente. Medir el tiempo de CPU y GPU, la relación entre los dos y algunos otros patrones del seguimiento pueden proporcionar información útil sobre las áreas problemáticas de la aplicación.
Cálculo del tiempo de CPU y GPU cuando se procesan 2048 primitivas sin realizar
Abra el archivo de seguimiento mediante GPUView.exe.
Desplácese hacia abajo hasta el proceso de GeometryRealization.exe.
Seleccione un área para calcular el tiempo de CPU y acercarla mediante CTRL + Z.
Mostrar información de sincronización virtual alternando entre F8. Siga acercándose hasta que sea fácil ver con claridad una cantidad de datos equivalente a vsync. Las líneas azules indican los momentos de sincronización vertical. Normalmente, estos se producen una vez cada 16 ms (60 fps), pero si DWM encuentra un problema de rendimiento, se ejecuta más lento para que se produzcan una vez cada 32 ms (30 fps). Para obtener una percepción del tiempo, seleccione de una barra azul a la siguiente y, a continuación, observe el número de ms informado en la esquina inferior derecha de la ventana GPUView.
Para medir el tiempo de CPU por período, mida el tiempo que tardan todos los subprocesos implicados en la representación. Puede que valga la pena restringir el subproceso que se espera que sea más relevante desde el punto de vista del rendimiento. Por ejemplo, en el ejemplo de realización de geometría, el contenido está animado y debe representarse en la pantalla cada fotograma, lo que convierte al hilo de la interfaz de usuario en el más importante. Una vez que decida qué hilo examinar, mida la longitud de las barras en este hilo. Al promediar algunos de estos se obtiene el tiempo de CPU por fotograma. En la ilustración siguiente se muestra el tiempo empleado en el subproceso de la interfaz de usuario. También muestra que este tiempo se ajusta bien entre dos sincronizaciones verticales consecutivas, lo que implica que está alcanzando 60FPS.
También puede verificarlo examinando la cola de intercambio para el período de tiempo correspondiente, lo que muestra que DWM puede presentar cada fotograma.
El tiempo de GPU se puede medir de la misma manera que el tiempo de CPU. Haz zoom en el área pertinente como en el caso de medir el tiempo de la CPU. Mida la longitud de las barras de la cola de hardware de GPU con el mismo color que el color de la cola de CPU de contexto. Siempre que las barras se ajusten dentro de v-syncs consecutivas, la aplicación se ejecuta sin problemas a 60 cuadros por segundo (FPS).
Cálculo del tiempo de CPU y GPU cuando se representan 8192 primitivos sin realizar
Si sigue los mismos pasos de nuevo, el seguimiento muestra que todo el trabajo de CPU para un fotograma no cabe entre una sincronización virtual y la siguiente. Esto significa que la aplicación está enlazada a la CPU. El subproceso de interfaz de usuario está saturando la CPU.
Al examinar la cola de volteo, también está claro que DWM no puede presentar todos los fotogramas.
Para analizar dónde se invierte el tiempo, abra el seguimiento en XPerf. Para analizar el tiempo de inicio en XPerf, primero busque el intervalo de tiempo en GPUView. Pase el cursor sobre el lado izquierdo y derecho del intervalo y tome nota del tiempo absoluto que se muestra en la parte inferior de la ventana GPUView. A continuación, abra el mismo archivo .etl en XPerf y desplácese hacia abajo hasta el gráfico "Muestreo de CPU por CPU", haga clic con el botón derecho y seleccione "Seleccionar intervalo..." Esto permite escribir en el intervalo de interés que se detectó examinando el seguimiento de GPU.
Vaya al menú Seguimiento y asegúrese de que está activada la opción "Cargar símbolos". Además, vaya a Rastrear -> Configurar rutas de símbolos y escriba la ruta de símbolos de la aplicación. Un archivo de símbolos contiene información de depuración sobre un ejecutable compilado en una base de datos independiente (.pdb). Este archivo se conoce normalmente como PDB. Puede encontrar más información sobre los archivos de símbolos aquí: Archivos de símbolos. Este archivo se puede encontrar en la carpeta "Depurar" del directorio de la aplicación.
Para obtener el desglose de dónde se invierte el tiempo en la aplicación, haga clic con el botón derecho en el intervalo seleccionado en el paso anterior y haga clic en Tabla de resumen. Para obtener información general sobre cuánto tiempo se invierte en cada dll, desactive "Stack" en el menú "Columnas". Tenga en cuenta que la columna "Count" aquí muestra cuántos ejemplos se encuentran dentro de la dll o función especificadas. Dado que se toma aproximadamente una muestra por ms, este número se puede usar como una mejor estimación para cuánto tiempo se invierte en cada dll/función. Seleccionar la "Pila" en el menú de Columnas mostrará el tiempo total invertido en cada función del diagrama de llamada. Esto ayudará a desglosar aún más los puntos del problema.
La información de seguimiento de pila de primitivos no realizados de 2048 revela que 30% del tiempo de CPU se invierte en el proceso de realización de geometría. De ese tiempo, cerca del 36% se está gastando en teselación de geometría y escorzando.
La información de seguimiento de pila para primitivos no realizados 8192 revela que alrededor de 60% del tiempo de CPU (4 núcleos) se invierte en la realización de la geometría.
Cálculo del tiempo de CPU para cuando se procesan 8192 primitivos
Está claro de los perfiles que la aplicación está enlazada a la CPU. Para reducir el tiempo invertido en la CPU, las geometrías se pueden crear una vez y almacenarse en caché. El contenido almacenado en caché se puede renderizar cuadro por cuadro sin incurrir en el costo de teselación de geometría por cuadro. Al examinar el seguimiento en GPUView para la parte realizada de la aplicación, es evidente que DWM puede presentar cada fotograma y el tiempo de CPU se ha reducido drásticamente.
En la primera parte del gráfico se muestran 8192 primitivas realizadas. El tiempo de CPU por fotograma correspondiente puede caber en dos sincronizaciones virtuales consecutivas. En la parte posterior del gráfico, esto no es cierto.
Al analizar XPerf, la CPU permanece inactiva durante mucho tiempo, dedicando solo cerca de 25% del tiempo de CPU al procesamiento de la aplicación de geometría.
Resumen
Tanto GPUView como XPerf y herramientas eficaces para analizar el rendimiento de las aplicaciones DirectX. Este artículo es una guía para usar estas herramientas y comprender las medidas básicas de rendimiento y las características de la aplicación. Además de comprender el uso de las herramientas, es importante comprender la aplicación que se está analizando. Comience con la búsqueda de respuestas a preguntas como cuál es la aplicación que intenta lograr? ¿Qué subprocesos del sistema son más importantes? ¿Qué desventajas estás dispuesto a hacer? Al analizar los seguimientos de rendimiento, empiece por examinar lugares problemáticos obvios. ¿Está limitada por la CPU o la GPU la aplicación? ¿La aplicación puede presentar cada fotograma? Las herramientas junto con una comprensión de la aplicación pueden proporcionar información muy útil para comprender, encontrar y finalmente resolver problemas de rendimiento.