Profilazione mediante campionamento
Quando questo metodo di misurazione è attivato, CODESYS genera un'attività aggiuntiva. Questa attività interrompe l'attività dell'applicazione da misurare in momenti casuali e determina il suo albero delle chiamate corrente.
Il campionamento è supportato solo su sistemi multicore. In qualità di utente, devi assegnare l'attività di profilatura generata automaticamente a un gruppo di attività separato nella configurazione dell'attività. Questo gruppo di attività deve essere eseguito su un core diverso rispetto all'attività dell'applicazione da misurare.
Gli alberi delle chiamate registrati dell'attività da misurare vengono trasferiti in cicli al sistema di sviluppo per l'elaborazione. Per questo motivo, questo metodo funziona solo quando il sistema di sviluppo è in modalità online.
Il campionamento non è adatto per determinare i valori anomali dei tempi di esecuzione delle attività. Utilizzare il metodo quando si desidera determinare in un periodo di tempo più lungo quali funzioni richiedono molto tempo e quali richiedono pochissimo tempo. Il risultato è una raccolta casuale su molti cicli di attività. Gli effetti una tantum nei singoli cicli non possono essere rilevati.
Un vantaggio di questo metodo di misurazione è che l'influenza sul runtime dell'attività è relativamente bassa e che la misurazione può essere attivata e disattivata in qualsiasi momento durante l'esecuzione.
Funzionalità della misura
L'attività di profilatura viene eseguita in un ciclo infinito e con priorità elevata. In momenti casuali, l'attività di profilatura verifica se l'attività dell'applicazione da misurare è attualmente in esecuzione o meno. Se è in esecuzione, viene interrotto e viene determinato l'albero delle chiamate corrente. L'albero delle chiamate determinato viene inserito in una lista (array).
Questo elenco di alberi delle chiamate viene trasferito ciclicamente al sistema di sviluppo e lì elaborato con le misurazioni precedenti. Pertanto, il campionamento viene eseguito solo finché il sistema di sviluppo è connesso al runtime.
Il metodo di campionamento viene utilizzato per determinare una distribuzione statistica dell'esecuzione delle POU. I tempi di esecuzione visualizzati nella vista dei risultati non vengono misurati direttamente, ma sono il risultato di un calcolo. Il calcolo si basa sul presupposto che anche le POU che si trovano spesso nell'albero delle chiamate necessitano di un tempo di esecuzione più lungo. La parte delle misurazioni (campioni) di una POU rispetto al numero totale di campioni viene convertita nella parte temporale della chiamata POU nel tempo di ciclo dell'attività.
Esempio: in un'attività T1
, due programmi P1
e P2
vengono chiamati e il tempo di ciclo del task è di 20 ms. L'attività Profiler esegue 100 campioni e determina quanto segue:
T1
si interrompe nel programmaP1
20 volte.T1
si interrompe nel programmaP2
50 volte.T1
non viene eseguito 30 volte.
Quindi il Profiler rileva i seguenti tempi dalla proporzione dell'attività al tempo di ciclo e lo visualizza nella vista in linea:
P1
: 4 msP2
: 10 msIdle
: 6 ms
Il tempo di esecuzione dell'attività è ovviamente esteso di una misurazione. Questo aumento non è costante, ma dipende dalla profondità dell'albero delle chiamate. A seconda della piattaforma, ci si deve aspettare un'estensione del runtime nell'intervallo 10 µs – 100 µs, possibilmente anche di più.
Misurazioni della categoria "Campioni non riusciti":
Importante
Possono verificarsi errori durante la determinazione dell'albero delle chiamate. Possibili cause di errore:
La lunghezza dell'array in cui è archiviato l'albero delle chiamate è troppo breve. In questo caso, non viene determinato alcun albero delle chiamate. L'utente può modificare la lunghezza dell'array nelle impostazioni del Profiler (Profondità massima dello stack di chiamate).
L'attività si trova in uno stato sfavorevole, ad esempio in un "blocco" perché sta attualmente tentando di azionare gli I/O (per accedere all'hardware). La misurazione fallisce.
Il numero di misurazioni non riuscite è mostrato nella vista online nella categoria Failed Samples
:
Se il numero di tali misurazioni non riuscite è molto alto nonostante un elenco (array) sufficientemente lungo per l'albero delle chiamate, allora dovresti provare a ricorrere a un altro metodo di misurazione.
Misure della categoria IDLE
:
Le misurazioni per le quali l'attività non è attualmente in esecuzione vengono visualizzate nella vista online in IDLE
categoria. Sfondo: un task ciclico viene generalmente configurato con un tempo di esecuzione più breve rispetto al tempo di ciclo. Di conseguenza, esiste un periodo di tempo all'interno del ciclo in cui l'attività non viene eseguita.
Campioni mancanti:
I campioni mancanti sono registrazioni di misurazioni sul controller che non vengono trasferite al sistema di sviluppo.
A causa di un grande array di albero delle chiamate (grande profondità richiesta dell'albero delle chiamate) e/o di un'elevata frequenza di campionamento (piccolo Intervallo di campionamento), può succedere che non tutti gli alberi delle chiamate registrati possano essere trasferiti al sistema di sviluppo. Tuttavia, poiché le misurazioni perse vengono distribuite nel ciclo allo stesso modo delle misurazioni trasmesse, il risultato non viene alterato. Per questo motivo, il numero di campioni mancanti viene visualizzato solo nella in linea – Panoramica Visualizza (Numero di campioni mancanti), non come una categoria separata nelle viste dei risultati (come i campioni non riusciti). Ma il numero di campioni persi indica una densità di campionamento forse troppo alta, che aumenta anche inutilmente il tempo di ciclo. In questo caso, è necessario modificare di conseguenza le impostazioni per il Profondità massima dello stack di chiamate o per il Intervallo di campionamento.
Note sulle impostazioni
Per il metodo di campionamento, ci sono i seguenti elementi speciali sul Impostazioni scheda dell'editor Profiler, nel file Parametri di campionamento gruppo:
Gruppo di attività Profiler: gruppo di attività che contiene l'attività Profiler.
Intervallo di campionamento: periodo di tempo in cui viene eseguito un campionamento in un momento casuale (viene effettuata e memorizzata una registrazione dell'albero delle chiamate).
Profondità massima dello stack di chiamate: Profondità massima di annidamento per la quale l'albero delle chiamate deve essere determinato durante il campionamento.
Attivazione ed esecuzione dell'operazione di profilatura per campionamento
Requisiti:
UN CODESYS l'applicazione del progetto con più POU è aperta in modalità offline.
La connessione a un controller multicore è configurata nelle impostazioni di comunicazione e il controller è in esecuzione.
L'attività Profiler per il campionamento è in esecuzione (idealmente come una singola attività) su un altro core rispetto all'attività dell'applicazione da misurare.
Nella configurazione delle attività viene quindi creato un gruppo di attività "Profiler" su un proprio core (idealmente con la proprietà "FixedPinned"). L'attività Profiler generata automaticamente è l'unica assegnata a questo gruppo. Il gruppo di attività per l'attività dell'applicazione IEC da misurare si trova su un altro core.
L'applicazione è l'applicazione attiva e può essere compilata senza errori.
Nell'applicazione è possibile creare una variabile booleana che può essere utilizzata per attivare e disattivare la profilazione a livello di codice. Questo è facoltativo. La profilatura può anche essere attivata e disattivata in fase di esecuzione facendo clic su Pausa/Cominciare pulsante nel pannello di controllo del in linea Visualizza.
Clic Aggiungi oggetto per aggiungere un Profiler oggetto sotto l'applicazione nella struttura dei dispositivi.
Fare doppio clic sull'oggetto.
Si apre l'editor degli oggetti. Il
Impostazioni la scheda è a fuoco.
Impostare il Metodo a Campionamento.
Nel Registrazione gruppo, selezionare il Compito dell'applicazione per la cui POU chiama si desidera eseguire le misurazioni del tempo.
Per Condizione, clicca il
e selezionare la variabile booleana dall'applicazione che si desidera utilizzare per attivare e disattivare la registrazione del valore. Nota: l'utilizzo di questo tipo di variabile è facoltativo. Se lasci il campo vuoto, ogni ciclo viene registrato.
Configura le seguenti impostazioni in Parametri di campionamento gruppo:
Gruppo di attività Profiler: nome del gruppo di attività che contiene l'attività generata automaticamente per la profilatura (vedere sopra: requisiti nella configurazione dell'attività).
Intervallo di campionamento: Tempo tra le misurazioni (consigliato: valore del tempo del ciclo del task)
Profondità massima dello stack di chiamate che dovrebbe essere determinato di volta in volta.
Sotto Aspetto dell'istantanea, seleziona il Formato orario per visualizzare la registrazione.
Clic
per scaricare l'applicazione nel controller.Il display
viene visualizzato nella barra di stato di CODESYS Profiler.
Clic
per avviare l'applicazione.Il progetto viene eseguito e vengono visualizzati i valori delle variabili correnti nella consueta vista di monitoraggio.
Se hai configurato una variabile booleana come condizione per iniziare la profilatura, ora imposta questa variabile su
TRUE
.Ora guarda i risultati del campionamento. Aprire l'editor dell'oggetto Profiler e relativo
in linea scheda. Clicca il Aggiorna istantanea pulsante e di nuovo dopo un po' di tempo.
Viene visualizzato l'albero delle chiamate dell'attività da misurare. Per i singoli blocchi vengono visualizzati il rispettivo numero di campioni (misurazioni) e il tempo totale determinato che consumano i richiami di blocco.