Qualche mese fa stavo chattando con un mio collega, circa una sua preoccupazione, di cpufreq e dei governor conservative e ondemand. Il succo della questione era:
non è che a forza di regolare le frequenze della CPU si ha perdita di prestazioni? Cioé a forza di andare “su e giù” in continuazione perdo prestazioni?
Domanda più che legittima in effetti.
Non avendo una minima conoscenza del kernel (inteso come codice sorgente e teoria di qualsiasi natura) ma fidandomi di Linux la mia risposta è stata più o meno:
beh effettivamente non ci avevo mai pensato ma spero vivamente che quando hanno scritto il codice abbiano previsto anche questo!
Insomma facendo un ragionamento. Il passaggio da una frequenza ad un’altra vorremo tutti che lo facesse abbastanza velocemente (coerentemente con il governor) per non perdere prestazioni. Ma in realtà non troppo velocemente perché sennò impiega risorse per scalare aggressivamente la CPU.
Facciamo un esempio con il governor conservative che non salta alla massima frequenza quando il carico della CPU cresce, ma aumenta poco alla volta la frequenza. Se diminuisco la latenza di transito da una frequenza a una maggiore non è che abbia il risparmio energetico che mi aspetto.
Quando invece scala troppo velocemente da una frequenza a una minore ovvio che ho una perdita di prestazioni: da 800Mhz a 2,1Ghz poi però in un tempo infinitesimale ho bisogno di nuovo di 2,1Ghz ma ero appena ritornato a 800Mhz.
Però, anche se ci fidiamo dei Linux, ora abbiamo anche la possibilità di modificare la latenza!!! Ovviamente bisogna toccare solo avendo fatto un po’ di benchmark a priori per vedere quale valore della latenza può essere più adatto al tipo di governor e alle nostre esigenze.
Io lascerò le cose come stanno ma per i più ardimentosi lascio sperimentare.



