Vista de subprocesos (rendimiento paralelo)
La vista de subprocesos es la más detallada y con mayor número de características del visualizador de simultaneidad.Mediante esta vista, se puede identificar si los subprocesos se están ejecutando o se bloquean debido a la sincronización, a la E/S o a algún otro motivo.
Durante el análisis de perfiles, el visualizador de simultaneidad examina todos los eventos de cambio de contexto del sistema operativo, para cada subproceso de la aplicación.Los cambios de contexto pueden ocurrir por muchos motivos, por ejemplo:
Un subproceso se bloquea en una primitiva de sincronización.
El cuanto de un subproceso expira.
Un subproceso realiza una solicitud de E/S que provoca un bloqueo.
La vista de subprocesos asigna una categoría a cada cambio de contexto cuando un subproceso deja de ejecutarse.Las categorías se muestran en la leyenda, en la parte inferior izquierda de la vista.El visualizador de simultaneidad clasifica los eventos de cambio de contexto, mediante la búsqueda de la pila de llamadas del subproceso, para las API de bloqueo conocidas.Si no hay ninguna coincidencia en la pila de llamadas, se utiliza la razón de espera proporcionada por Windows. Sin embargo, la categoría de Windows se puede basar en un detalle de implementación y puede no reflejar el intento del usuario. Por ejemplo, Windows designa la razón de espera de bloqueo en un bloqueo fino nativo de lectura-escritura como E/S en lugar de sincronización. En la mayoría de los casos, se puede identificar la causa principal de un evento de bloqueo examinando las pilas de llamadas que corresponden a los eventos de cambio de contexto.
La vista de subprocesos también muestra las dependencias entre subprocesos.Por ejemplo, si se identifica un subproceso que esté bloqueado en un objeto de sincronización, se puede buscar el subproceso que lo desbloquea y se puede examinar la actividad en la pila de llamadas para ese subproceso en el punto en que desbloquea al otro.
Cuando se ejecutan los subprocesos, el visualizador de simultaneidad recopila muestras.En la vista de subprocesos, se puede analizar qué código es ejecutado por uno o varios subprocesos durante un segmento de ejecución.También se pueden examinar informes de bloqueo e informes de perfiles del árbol de pila de llamadas.
Uso
Estas son algunas maneras en que se puede utilizar la vista de subprocesos:
Identificar las razones por las que la interfaz de usuario de una aplicación no responde durante ciertas fases de ejecución.
Identificar la cantidad de tiempo dedicado al bloqueo, en la sincronización, en la E/S, en los errores de página, etc.
Identificar el grado de interferencia de otros procesos que se ejecutan en el sistema.
Identificar problemas de equilibrio de carga de la ejecución en paralelo.
Identificar las razones que explican una escalabilidad poco óptima o no existente (por ejemplo, porque el rendimiento de una aplicación paralela no mejora cuando existen más núcleos lógicos disponibles en el sistema).
Comprender el grado de simultaneidad en la aplicación, para ayudar en la puesta en paralelo.
Entender las dependencias entre los subprocesos de trabajo y las rutas críticas de ejecución.
Examinar tiempos específicos de los subprocesos y los intervalos
La vista de subprocesos muestra una escala de tiempo.Se puede hacer un acercamiento y activar la vista panorámica dentro de la línea de tiempo para examinar intervalos específicos y los subprocesos de la aplicación.El eje X es el tiempo y el eje Y son varios canales:
Dos canales de E/S para cada unidad de disco en el sistema, un canal para lecturas y uno para las escrituras.
Un canal para cada subproceso en el proceso.
Canales de marcador, si hay eventos de marcador en la traza.Los canales de marcador aparecen inicialmente en los canales de subprocesos que generaron esos eventos.
Canales de la GPU
Aquí se muestra una ilustración de la vista de subprocesos:
Vista de subprocesos
Inicialmente, los subprocesos se ordenan en el orden en que se crean, para que el subproceso principal de la aplicación sea el primero.Se puede utilizar la opción de ordenación en la esquina superior izquierda de la vista, para ordenar los subprocesos por otro criterio (por ejemplo, por mayor parte del trabajo de ejecución realizado).
Se pueden ocultar los subprocesos que no están realizando trabajo, seleccionando sus nombres en la columna a la izquierda y, a continuación, eligiendo Ocultar subprocesos seleccionados en la barra de herramientas.Se recomienda ocultar los subprocesos que están completamente bloqueados porque sus estadísticas son irrelevantes y pueden obstruir los informes.
Para identificar subprocesos adicionales que hay que ocultar, en la leyenda activa, elija Por resumen de subprocesos un informe en la pestaña Informe de perfil.Este informe muestra el gráfico de desglose de ejecución, en el que aparece el estado de subprocesos para el intervalo de tiempo seleccionado.En algunos niveles de zoom, algunos subprocesos no se pueden mostrar.Cuando esto ocurre, las elipses se muestran a la derecha.
Cuando se haya seleccionado un intervalo de tiempo y algunos subprocesos, se puede iniciar el análisis de rendimiento.
Herramientas de análisis
Esta sección describe los informes y otras herramientas de análisis.
Detalles del bloqueo de subprocesos
Para obtener información sobre un evento de bloqueo en una región determinada en un subproceso, posicione el puntero en dicha región para mostrar información sobre las herramientas.Contiene información como, por ejemplo, categoría, hora de inicio de la región, duración del bloqueo y una API de bloqueo si la hay.Si se selecciona la región de bloqueo, la pila en ese momento se muestra en el panel inferior, junto con la misma información que se muestra en la información sobre herramientas.Al examinar la pila de llamadas, puede determinar la razón subyacente del evento de bloqueo del subproceso.Se puede encontrar información adicional de procesos y subprocesos seleccionando el segmento y examinando la pestaña actual.
Una ruta de acceso de ejecución puede tener varios eventos de bloqueo.Se pueden examinar estos bloqueos por la categoría del bloqueo, de forma que se puedan encontrar las áreas problemáticas más rápidamente.Sólo se tiene que elegir una de las categorías de bloqueo en la leyenda de la izquierda.
Dependencias entre subprocesos
El visualizador de simultaneidad puede mostrar las dependencias entre los subprocesos del proceso, para determinar qué estaba intentando hacer un subproceso bloqueado y obtener información acerca de lo que otro subproceso le habilitaba para ejecutar.Para determinar qué subproceso desbloqueó otro subproceso, seleccione el segmento pertinente de bloqueo.Si el visualizador de simultaneidad puede determinar el subproceso de desbloqueo, este dibuja una línea entre el subproceso de desbloqueo y el segmento de ejecución que sigue al segmento de bloqueo.Además, la pestaña Pila de desbloqueo muestra la pila de llamadas pertinente.
Detalles de ejecución del subproceso
En el gráfico de escala de tiempo de un subproceso, los segmentos verdes muestran cuándo estaba ejecutando código.Se puede obtener información más detallada acerca de un segmento en ejecución.
Cuando se selecciona un punto en un segmento de ejecución, el visualizador de simultaneidad busca ese punto en el tiempo, en la pila de llamadas pertinente y después muestra un símbolo de intercalación negro, sobre el punto seleccionado en el segmento de ejecución y muestra la propia pila de llamadas en la pestaña Pila actual.Se pueden seleccionar varios puntos en el segmento de ejecución.
[!NOTA]
El visualizador de simultaneidad podría no ser capaz de resolver una selección en un segmento de ejecución.Normalmente, esto se produce cuando la duración del segmento es de menos de un milisegundo.
Para obtener una ejecución de perfil de los subprocesos (sin ocultar) habilitados en el intervalo temporal actualmente seleccionado, elija el botón Ejecución en la leyenda activa.
Gráfico de escala de tiempo
El gráfico de escala de tiempo muestra la actividad de todos los subprocesos del proceso y todos los dispositivos de disco físicos del equipo host.También se muestran los eventos de actividad y marcador de la GPU.Se puede acercar la imagen para ver más detalles de entrada o salida, o alejar para ver un intervalo de tiempo más largo.También se pueden seleccionar puntos en el gráfico, para obtener detalles sobre las categorías, los tiempos de inicio, duraciones y estados de la pila de llamada.
En el gráfico de escala de tiempo, el color indica el estado de un subproceso en un momento determinado.Por ejemplo, los segmentos verdes se están ejecutando, los segmentos rojos están bloqueados para sincronización, los segmentos amarillos se han adelantado y los segmentos púrpura están dedicados a la E/S del dispositivo.Se puede utilizar esta vista para examinar el equilibrio de trabajo entre los subprocesos que participan en un bucle paralelo o en tareas simultáneas.Si un subproceso tarda más tiempo en completarse que otros, el trabajo podría estar desequilibrado.Se puede utilizar esta información para mejorar el rendimiento del programa mediante la distribución de trabajo más uniforme entre los subprocesos.
Si sólo un subproceso es verde (ejecutándose) en un punto en el tiempo, la aplicación puede no estar aprovechando la simultaneidad en el sistema.Se puede utilizar también el gráfico de escala de tiempo para examinar las dependencias entre subprocesos y las relaciones temporales entre los subprocesos que bloquean y los bloqueados.Para reorganizar los subprocesos, seleccione un subproceso y después en la barra de herramientas, elija el boton de arriba o abajo.Para ocultar los subprocesos, selecciónelos y, a continuación, elija el botón Ocultar subprocesos.
Informes de perfil
Debajo del gráfico de escala de tiempo hay una escala de tiempo de perfiles y un panel con pestañas para varios informes.Los informes automáticamente se actualizan a medida que se cambia la vista de los subprocesos.Para los seguimientos de gran tamaño, el panel de informes puede no estar disponible mientras se calculan las actualizaciones.Para cada informe, hay dos ajustes de filtro: Reducción de nodos irrelevantes y Sólo mi código.La reducción de nodos irrelevantes ayuda a ocultar las entradas del árbol de llamadas donde apenas transcurre tiempo.El valor de filtro predeterminado es de 2 por ciento, pero se puede ajustar entre 0 y 99 por ciento.Para ver sólo el árbol de llamadas para el código, seleccione la casilla de verificación Sólo mi código.Para ver todos los árboles de llamadas, desactívela.
Informe de perfil
Esta pestaña muestra informes que corresponden a las entradas en la leyenda activa.Para mostrar un informe, elija una de las entradas.
Pila actual
Esta pestaña muestra la pila de llamadas para un punto seleccionado en un segmento de subproceso en el gráfico de línea de tiempo.Las pilas de llamadas se recortan para mostrar sólo la actividad relacionada con el programa.
Pila de desbloqueo
Para ver qué subproceso desbloqueó el subproceso seleccionado y en qué línea de código, seleccione la pestaña Pila de desbloqueo .
Execution
El informe de ejecución muestra el desglose de tiempo que la aplicación invierte en la ejecución.
Para encontrar la línea de código en la que transcurre el tiempo de ejecución, expanda el árbol de llamadas y, a continuación, en el menú de acceso directo para la entrada del árbol de llamada, elija Ver código fuente o Ver sitios de llamada.Ver código fuente localiza la línea de código ejecutada.Ver sitios de llamada localiza la línea de código que llama a la línea de código ejecutada.Si sólo hay un sitio de llamada, la línea de código se resalta.Si hay varios sitios de llamada, se puede seleccionar el que se desee en el cuadro de diálogo que aparece y, a continuación, elegir el botón Ir a código fuente para resaltar el código del sitio de llamada.A menudo es más útil buscar el sitio de llamada que tiene el mayor número de apariciones, la mayor parte del tiempo o ambas.Para obtener más información, vea Informe del perfil de ejecución.
Sincronización
El informe de sincronización muestra las llamadas responsables de los bloques de sincronización, junto con los tiempos de bloqueo agregados de cada pila de llamadas.Para obtener más información, vea Hora de sincronización.
E/S
El informe de E/S muestra las llamadas responsables de los bloques de E/S, junto con los tiempos de bloqueo agregados de cada pila de llamadas.Para obtener más información, vea Tiempo de E/S (Vista de subprocesos).
Sleep
El informe en suspensión (Sleep) muestra las llamadas responsables de los bloques en suspensión junto con los tiempos de bloqueo agregados de cada pila de llamadas.Para obtener más información, vea Tiempo de suspensión.
Administración de la memoria
El informe de administración de memoria muestra las llamadas donde aparecen los bloques de administración de memoria, junto con los tiempos de bloqueo agregados de cada pila de llamadas.Se puede utilizar esta información para identificar las áreas que tienen problemas de recopilación de basura o de paginación excesivas.Para obtener más información, vea Tiempo de administración de la memoria.
Adelantamiento
El informe preventivo muestra las apariciones en las que los procesos del sistema se han adelantado al proceso actual y los subprocesos individuales que reemplazaron los subprocesos del proceso actual.Se puede utilizar esta información para identificar los procesos y subprocesos que son más responsables del adelantamiento.Para obtener más información, vea Tiempo de adelantamiento.
Procesamiento de interfaz de usuario
El informe de procesamiento de la interfaz de usuario muestra las llamadas responsables de los bloques de procesamiento de la IU, junto con los tiempos de bloqueo agregados de cada pila de llamadas.Para obtener más información, vea Tiempo de procesamiento de la interfaz de usuario.
Resumen por subproceso
Esta pestaña muestra una vista de columna codificada con colores del tiempo total transcurrido de cada subproceso en ejecución, en bloqueo y en E/S.Las columnas se etiquetan en la parte inferior.Al ajustar el nivel de zoom en el gráfico de línea de tiempo, esta pestaña se actualiza automáticamente.En algunos niveles de zoom, algunos subprocesos pueden no ser mostrados.Cuando esto ocurre, las elipses se muestran a la derecha.Si el subproceso que desea no aparece, se pueden ocultar otros subprocesos.Para obtener más información, vea Informe de resumen por subproceso.
Operaciones de disco
Esta pestaña muestra qué procesos y subprocesos estaban implicados en la E/S de disco en nombre del proceso actual, qué archivos han tocado (por ejemplo, archivos DLL que se han cargado), el número de bytes que se han leído, además de otro tipo de información.Este informe puede resultar útil para evaluar el tiempo dedicado a obtener acceso a los archivos durante la ejecución, sobre todo si el proceso parece estar enlazado a E/S.Para obtener más información, vea Informe de operaciones de disco (Vista de subprocesos).