Skip to main content

Perfilado por muestreo

Cuando este método de medición está activado, CODESYS genera una tarea adicional. Esta tarea interrumpe la tarea de la aplicación que se va a medir en momentos aleatorios y determina su árbol de llamadas actual.

El muestreo solo se admite en sistemas multinúcleo. Como usuario, debe asignar la tarea de creación de perfiles generada automáticamente a un grupo de tareas separado en la configuración de la tarea. Este grupo de tareas debe ejecutarse en un núcleo diferente al de la tarea de la aplicación que se va a medir.

Los árboles de llamadas registrados de la tarea a medir se transfieren en ciclos al sistema de desarrollo para su procesamiento. Por esa razón, este método funciona solo cuando el sistema de desarrollo está en modo en línea.

El muestreo no es adecuado para determinar los valores atípicos de los tiempos de ejecución de tareas. Utilice el método cuando desee determinar durante un período de tiempo más largo qué funciones requieren mucho tiempo y cuáles requieren muy poco tiempo. El resultado es una colección aleatoria durante muchos ciclos de tareas. No se pueden detectar efectos puntuales en ciclos individuales.

Una ventaja de este método de medición es que la influencia en el tiempo de ejecución de la tarea es comparativamente baja y que la medición se puede activar y desactivar en cualquier momento durante el tiempo de ejecución.

Funcionalidad de la medida

La tarea de creación de perfiles se ejecuta en un bucle infinito y con alta prioridad. En momentos aleatorios, la tarea de creación de perfiles comprueba si la tarea de la aplicación que se va a medir se está ejecutando actualmente o no. Si se está ejecutando, se detiene y se determina el árbol de llamadas actual. El árbol de llamadas determinado se introduce en una lista (matriz).

Esta lista de árboles de llamadas se transfiere cíclicamente al sistema de desarrollo y se procesa allí con las mediciones anteriores. Por lo tanto, el muestreo se ejecuta solo mientras el sistema de desarrollo esté conectado al tiempo de ejecución.

El método de muestreo se utiliza para determinar una distribución estadística de la ejecución de POU. Los tiempos de ejecución que se muestran en la vista de resultados no se miden directamente, sino que son el resultado de un cálculo. El cálculo se basa en la suposición de que las POU que se encuentran a menudo en el árbol de llamadas también necesitan un tiempo de ejecución más prolongado. La porción de las mediciones (muestras) de una POU al número total de muestras se convierte a la porción de tiempo de la llamada de POU al tiempo de ciclo de la tarea.

Ejemplo: En una tarea T1, dos programas P1 y P2 son llamados y el tiempo de ciclo de la tarea es de 20 ms. La tarea Profiler realiza 100 muestras y determina lo siguiente:

  • T1 se detiene en el programa P1 20 veces.

  • T1 se detiene en el programa P2 50 veces.

  • T1 no se ejecuta 30 veces.

Luego, Profiler detecta los siguientes tiempos de la proporción de la tarea al tiempo del ciclo y lo muestra en la vista en línea:

  • P1: 4ms

  • P2: 10ms

  • Idle: 6ms

El tiempo de ejecución de la tarea obviamente se extiende por una medición. Este aumento no es constante, sino que depende de la profundidad del árbol de llamadas. Dependiendo de la plataforma, se debe esperar una extensión del tiempo de ejecución en el rango de 10 µs – 100 µs, posiblemente incluso más.

Mediciones de la categoría "Muestras fallidas":

Importante

Pueden ocurrir errores al determinar el árbol de llamadas. Posibles causas de error:

  • La longitud de la matriz donde se almacena el árbol de llamadas es demasiado corta. En este caso, no se determina ningún árbol de llamadas. El usuario puede cambiar la longitud de la matriz en la configuración de Profiler (Profundidad máxima de la pila de llamadas).

  • La tarea está en un estado desfavorable, por ejemplo, en un "bloqueo" porque actualmente está intentando operar E/S (para acceder al hardware). La medición falla.

El número de mediciones fallidas se muestra en la vista en línea en la categoría Failed Samples:

Si el número de tales mediciones fallidas es muy alto a pesar de una lista suficientemente larga (matriz) para el árbol de llamadas, entonces debería intentar recurrir a otro método de medición.

Medidas de la categoría IDLE:

Las mediciones para las que la tarea no se está ejecutando actualmente se muestran en la vista en línea en el IDLE categoría. Antecedentes: una tarea cíclica generalmente se configura con un tiempo de ejecución más corto que el tiempo de ciclo. Como resultado, hay un período de tiempo dentro del ciclo en el que la tarea no se ejecuta.

Muestras que faltan:

Las muestras que faltan son registros de medición en el controlador que no se transfieren al sistema de desarrollo.

Debido a una gran matriz de árbol de llamadas (gran profundidad de árbol de llamadas requerida) y/o una tasa de muestreo alta (pequeña Intervalo de muestreo), puede suceder que no todos los árboles de llamadas grabados se puedan transferir al sistema de desarrollo. Sin embargo, debido a que las mediciones perdidas se distribuyen a lo largo del ciclo de la misma manera que las mediciones que se transmiten, el resultado no se corrompe. Por esta razón, el número de muestras que faltan se muestra sólo en el En líneaVisión de conjunto vista (Número de muestras que faltan), no como una categoría separada en las vistas de resultados (como las muestras fallidas). Pero el número de muestras perdidas indica una densidad de muestreo posiblemente demasiado alta, lo que también aumenta innecesariamente el tiempo del ciclo. En este caso, debe modificar la configuración en consecuencia para el Profundidad máxima de la pila de llamadas o para el Intervalo de muestreo.

Notas sobre la configuración

Para el método de muestreo, existen los siguientes elementos especiales en la Ajustes pestaña del editor Profiler, en la Parámetros de muestreo grupo:

Grupo de tareas del generador de perfiles: grupo de tareas que contiene la tarea Profiler.

Intervalo de muestreo: Periodo de tiempo en el que se realiza un muestreo en un momento aleatorio (se realiza y almacena un registro del árbol de llamadas).

Profundidad máxima de la pila de llamadas: Profundidad máxima de anidamiento para la cual se debe determinar el árbol de llamada durante el muestreo.

Activación y ejecución de la operación de perfilado mediante muestreo

Requisito:

  • A CODESYS la aplicación del proyecto con múltiples POU está abierta en modo fuera de línea.

  • La conexión a un controlador multinúcleo está configurada en los ajustes de comunicación y el controlador está funcionando.

  • La tarea del generador de perfiles para el muestreo se ejecuta (idealmente como una sola tarea) en otro núcleo que no sea la tarea de la aplicación que se va a medir.

    En la configuración de la tarea, se crea un grupo de tareas "Profiler" en su propio núcleo (idealmente con la propiedad "FixedPinned"). La tarea Profiler generada automáticamente es la única asignada a este grupo. El grupo de tareas para medir la tarea de su aplicación IEC se encuentra en otro núcleo.

  • La aplicación es la aplicación activa y se puede compilar sin errores.

  1. En la aplicación, puede crear una variable booleana que se puede usar para activar y desactivar la creación de perfiles mediante programación. Esto es opcional. La creación de perfiles también se puede activar y desactivar en tiempo de ejecución haciendo clic en el Pausa/Comienzo botón en el panel de control del En línea vista.

  2. Hacer clic Añadir objeto para agregar un perfilador objeto debajo de la aplicación en el árbol de dispositivos.

  3. Haga doble clic en el objeto.

    Se abre el editor de objetos. los _prf_icon_settings.png Ajustes la pestaña está enfocada.

  4. Selecciona el Método para Muestreo.

  5. En el Grabación grupo, seleccione el Tarea de su aplicación para cuyas llamadas de POU desea realizar las mediciones de tiempo.

    Para Condición, haga clic en el _cds_icon_three_dots.png y seleccione la variable booleana de su aplicación que desea usar para activar y desactivar el registro de valores. Nota: El uso de este tipo de variable es opcional. Si deja el campo en blanco, se registra cada ciclo.

  6. Configure los siguientes ajustes en el Parámetros de muestreo grupo:

    • Grupo de tareas del generador de perfiles: Nombre del grupo de tareas que contiene la tarea generada automáticamente para la creación de perfiles (ver arriba: requisitos en la configuración de la tarea).

    • Intervalo de muestreo: Tiempo entre las medidas (recomendado: valor del tiempo de ciclo de la tarea)

    • Profundidad máxima de la pila de llamadas eso debe determinarse cada vez.

  7. Bajo Aspecto de la instantánea, Selecciona el Formato de tiempo para mostrar la grabación.

  8. Hacer clic En línea → Iniciar sesión para descargar la aplicación al controlador.

    La pantalla _prf_img_status.png se muestra en la barra de estado de CODESYS Profiler.

  9. Hacer clic En línea → Inicio para iniciar la aplicación.

    El proyecto se ejecuta y ve los valores de las variables actuales en la vista de seguimiento habitual.

  10. Si configuró una variable booleana como condición para comenzar a generar perfiles, ahora establezca esta variable en TRUE.

  11. Ahora mire los resultados del muestreo. Abra el editor del objeto Profiler y su _prf_icon_online.png En línea pestaña. Haga clic en el Actualizar instantánea botón y otra vez después de algún tiempo.

    Verá el árbol de llamadas de la tarea a medir. Para los bloques individuales, se muestran el número respectivo de muestras (mediciones) y el tiempo total determinado que consumen las llamadas de bloque.