Monitor grafico della temperatura in background

Monitor grafico delle temperature

Nell’articolo precedente abbiamo mostrato uno script per avere sotto controllo i parametri funzionali del nostro sistema attraverso un unico comando.

E se invece volessimo monitorare un solo parametro, ma in modo costante? E magari per un periodo di tempo predeterminato? Potremmo salvare i dati raccolti in un file? E utilizzarli per una elaborazione successiva? La risposta a tutte queste domande verrà fornita all’interno di questo articolo: con una manciata di righe di script avremo uno strumento in grado di monitorare la temperatura del nostro sistema Linux per un periodo di tempo prefissato, ad intervalli predeterminati, e salvando i dati in un file il cui nome potremo scegliere.

Il cuore del programma

Il seguente listato mostra l’effettivo motore del monitor per le temperature: analizziamolo assieme.

La riga 1 è un commento, è messa lì per ricordarco cosa stiamo cercando di ottenere.

Le righe 2 e 9 rappresentano l’inizio e la fine di un ciclo di operazioni che verranno ripetute finché la variabile $start sarà minore o uguale alla variabile $values.

In riga 4 richiediamo l’ora, in formato HH:MM:SS, e la “spariamo” nel file pippo.

In riga 5 carichiamo il valore inserito nel file pippo, lo formattiamo e lo inseriamo nel file chiamato $outfile.

In riga 6 inseriamo invece il valore della temperatura del nostro sistema.

In riga 7 aggiorniamo il nostro contatore di ciclo.

In riga 8 fermiamo (sleep) l’esecuzione del programma per un numero di secondi definito nella variabile $step.

Ripetiamo tutto il ciclo sin quando la variabile $start (che aumenta dei 1 ad ogni ciclo) raggiungerà il valore finale, contenuto in $values.

Fine del programma

Definizione delle variabili

Per prima cosa impostiamo il valore del nostro contatore, $start=1.

Le variabili $values, $step e $outfile rappresentano, rispettivamente, il numero di campioni che desideriamo esaminare, l’intervallo di tempo (in secondi) tra un campione e l’altro, ed il nome del file nel quale i campioni verranno inseriti. Tali variabili hanno valori di default, rispettivamente 5 campioni, 1 secondo e “tempmon.csv” come nome file. Lanciando il programma senza parametri avremo quindi 5 campioni, presi ad intervalli di tempo di un secondo, e scritti nel file tempmon.csv, ma l’utente può modificare dinamicamente le variabili, inserendone il valore alla chiamata dello script.

Ad esempio, i comandi

e

hanno, come risultato, il primo di scrivere 20 campioni presi a distanza di 7 decimi di secondo l’uno dall’altro nel file risultati.csv, il secondo di scrivere 3 campioni presi ad intervalli di tempo di 12 secondi nel file di default, tempmon.csv.

Ma come fare per acquisire i parametri e renderli operativi?

Per la variabile $values ci comportiamo nel modo seguente:

Se il primo parametri imesso non è presente (-z) allora diamo alla variabile il valore di 5, altrimenti diamo alla variabile values il valore del primo parametro inserito.

Ci si comporta in mdo praticamente identico anche nel caso delle altre variabili.

Tempi di esecuzione e carico di CPU

La Teoria delle Misurazioni (e la legge di Heisenberg) ci informano che qualsiasi misurazione comporta una perturbazione del valore misurato.Quanto “pesa” il  nostros cript nell’ambito del sistema che stiamo monitorando? Esiste il rischio che il nostro script abbia sulla temperatura del sistema una maggiore influenza dei programmi che vogliamo controllare?

Per avere una prima informazione al riguardo, possiamo lanciare lo script utilizzando i valori standard e la funzione di sistema time().

Il risultato è il seguente:

In sostanza il nostro script ha girato per 5.8 secondi ma ha utilizzato solo 136 millesimi di secondo di CPU, corrispondenti a meno del 2.4 per cento. Su un Raspberry PI 3 con 4 cores al 100% di utilizzo. Questo ci rassicura: sicuramente non causeremo una variazione di temperatura con il nostro monitoraggio.

Resta però un apparente problemada risolvere: se noi lanciamo il monitor, come faremo poi a lanciare i nostri programmi per controllare la deriva di temperatura che essi causano? La risposta è, nuovamente, dovuta a Linux. Esiste la possibilità di lanciare un programma in background: lo facciamo partire da linea di comando, ed il sistema ci restituisce il prompt immediatamente dopo. Il programma gira, come detto, in background, nascosto alla vista: esegue le operazioni che deve fare e poi si chiude silenziosamente. Lavorare in background è una caratteristica dei servizi del sistema operativo, che per progetto non scrivono nulla a video, ma possiamo utilizzare questa flessibile caratteristica anche per i nostri script. se infatti lanciamo

Il prompt ci verrà immediatamente restituito mentre il monitor accumula ben 900 letture di temperatura successive ad intervalli di un secondo. Dopo circa 15 minuti, la riga

ci avvertirà che il programma è terminato, ed il nostro file con i risultati è pronto per la elaborazione.

Post-elaborazione del file dei risultati

Abbiamo salvato i nostri dati in formato CSV, comma-separated values. Quindi possiamo tranquillamente importare il nostro file dei risultati nel nostro foglio elettronico preferito, imponendo la virgola come separatore. Quindi richiediamo la preparazione di un bel grafico, in cui la data è sull’asse X e la temperatura sull’asse Y. Ecco cosa otterremo:

Monitor grafico delle temperature

Come avevo accennato, il mio Raspberry PI elabora programmi di matematica 24/7 sui 4 cores. Il povero PI si trova continuamente ad eseguire throttling: come appare evidente dal grafico, man mano che ci si avvicina alla fatidica temperatura di 85°C il sistema abbassa lafrequenza di elaborazione rallentando tutte le operazioni, sin quando si raggiunge la temperatura più tranquilla di 75°C. Probabilmente ne avete spesso sentito parlare, ma forse questa è la prima volta che potrete “toccare con mano” un simile comportamento. È evidente che il mio PI ha bisogno almeno di un set di dissipatori in rame. Quando me li sarò procurati, scriverò un articolo per mostrare il guadagno ottenuto.

Di seguito il listsato completo dello script di monitoring:

Ricordo infine che lo script aggiornato è reperibile su GitHub, a questo indirizzo. Se avete idee per rendere  lo script più utile, o aggiungere parametri importanti, scrivetemi: le soluzioni migliori verranno pubblicate.

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.