Come visualizzare i parametri che portano il nostro sistema al throttling,
Quattro giorni fa abbiamo visto in che modo interagire con Linux per ottenere il monitoraggio delle temperature del nostro sistema. Oggi approfondiamo l’argomento per aggiungere anche il monitoraggio delle frequenze di lavoro di ciascun core.
Ricordiamo innanzi tutto come accedere alla frequenza attuale di lavoro dei cores:
1 |
sudo cat /sys/devices/system/cpu/cpu?/cpufreq/cpuinfo_cur_freq |
ove con cpu? intendiamo cpu0, cpu1, cpu2 e cpu3. Ricordiamo anche che lo script è stato progettato per monitorare un Raspberry PI, ma dovrebbe funzionare allo stesso modo su tutte le macchine Linux.
Non dobbiamo far altro, quindi, che modificare il vecchio script per il monitoraggio delle temperature, ed aggiungere la lettura/scrittura dei parametri relativi alle frequenze, opportunamente formattati, nel nostro file dei risultati. Potremo così visualizzare il comportamento di ciascuno dei nostri cores e controllare se il nostro Raspy rallenta.
Ho testato la procedura sul mio Raspberry PI 3 sotto carico totale (i soliti programmi di matematica), ed ecco i risultati ottenuti dopo un test di 15 minuti.
Appare evidente come all’innalzamento delle temperature di lavoro corrisponda un repentino dimezzamento della frequenza di lavoro (da 1.2GHz a 600MHz). Ma alla fine del test, quale è stata la frequenza media di lavoro del PC? Possiamo estrarre questa informazione studiando l’andamento della frequenza nel tempo. Per evitare di sovraccaricare inutilmente il programma di monitoraggio, utilizzeremo un nuovo script per elaborare direttamente il file dei risultati in formato CSV.
Lo script leggerà la frequenza di ciascuno dei quattro cores, sommerà i valori in un’unica variabile e, dividendo il valore per 4 avremo la frequenza media dei cores.
Per avere il trend dell’andamento della frequenza sarà sufficiente utilizzare una variabile TREND che conterrà per ciascuna lettura la somma delle precedenti medie della frequenza, divisa per il numero di letture eseguite sino a quel momento. Per ciascuna lettura, infine, stamperemo il valore MEDIA_CPU e TREND.
1 2 3 4 5 6 |
#!/bin/bash -e i=0 totale=0 media=0 gawk 'BEGIN { FS=","; trend=0; i=0} { if ($1 != "Data") { i++; media_cpu=($2+$3+$4+$5)/4; trend=(trend+media_cpu); print media_cpu, trend/i; } }' |
Rispetto agli script precedenti, qui abbiamo una sezione di inizializzazione, BEGIN, ed il costrutto if-then per saltare la prima riga del file (quella con le inutili intestazioni).
Potremo leggere i dati a video, o redirigere l’output in un secondo file (ad esempio risultati.csv) con il comando:
1 |
./estrai_frequenze.sh < freqmon.csv > risultati.csv |
Da notare che al momento gli script sono forniti “as-is“, non sono implementate funzioni di controllo per filtrare eventuali errori. Terminata la fase di prototipizzazione dello script, sarà possibile aggiungere i controlli necesari.
L’elaborazione dei risultati espressi graficamente è riportata nell’immmagine seguente.
Ogni colonna rappresenta la frequenza media sui quattro cores del Raspberry PI 3. Abbiamo 4 cores, ciascuno dei quali lavora a pieno ritmo (1.2GHz) o in throttling (600MHz): questo spiega come4 mai si abbiano quttro letture di frequenza differenti a livello di frequenza media per lettura. La linea rossa indica la frequenza media cumulativa alla quale il Raspberry ha effettivamente lavorato. Sotto carico il nostro Raspy tende a perdere quasi il 25% di efficienza a causa delle temperature e del throttling. In un prossimo articolo vedremo se sia possibile ovviare ad un simile comportamento.
Come di norma, gli script completi sono presenti su GitHub, a questo indirizzo. Se avete idee per rendere lo script più utile, o aggiungere parametri importanti, scrivetemi: le soluzioni migliori verranno pubblicate.
Link utili: