Τι είναι το Thermal Throttling και ανάλυση θερμικής συμπεριφοράς

Android Thermal Throttling

Μετά την ανάλυση της λειτουργίας του LMK αλλά και του Governor με τα Frequency Tables στο Android, σειρά έχει να αναφερθώ στο Thermal Throttling.

Για να αποτρέψουν την υπερβολική αύξηση της θερμοκρασίας, τα κινητά μας αντιδρούν με μείωση συχνότητας λειτουργίας CPU/GPU, μείωση φωτεινότητας οθόνης ή μείωση του ρυθμού φόρτισης.

Με πειραματόζωο το Nexus 4 μου, πάμε να τρέξουμε απανωτά κάποια απαιτητικά CPU/GPU Benchmarks, ώστε να "ζοριστεί" η CPU, και να αρχίσουμε να βλέπουμε πώς αντιδρά το κινητό σε αύξηση της θερμοκρασίας του.

Θυμίζω οι μέγιστες συχνότητες λειτουργίας για την CPU της συσκευής μου είναι 1,51Ghz, και για την GPU είναι 400Mhz.

Για να δούμε τις συμπεριφορές σχετικές με θερμοκρασία που καταγράφει ο ThermalDaemon στις συσκευές μας, δίνουμε:

adb logcat | grep ThermalDaemon

Μετά από λίγη ώρα στρεσαρίσματος, η μέγιστη συχνότητα λειτουργίας του επεξεργαστή περιορίστηκε στα ~1,3Ghz (1,296Ghz), η μέγιστη συχνότητα λειτουργίας της GPU περιορίστηκε στα 325Mhz, ενώ η μέγιστη φωτεινότητα της οθόνης περιορίστηκε στην τιμή 215 (από το 255 που είναι το μέγιστο).

Android Thermal Throttling

Λίγη ώρα αργότερα, η μέγιστη φωτεινότητα "έπεσε" κι άλλο, στο 192, ακολουθούμενη από νέα μείωση της μέγιστης συχνότητας λειτουργίας της CPU και GPU στα ~1,2 Ghz (1,188Ghz) και 200Mhz αντίστοιχα.

Αμέσως ακολούθησε κι άλλη μείωση της μέγιστης φωτεινότητας στο 181, συνοδευόμενη από "περιορισμό" την ταχύτητα φόρτισης της συσκευής.

Android Thermal Throttling

Σ αυτό το σημείο, θέλοντας να "πιέσω" κι άλλο την συσκευή, ενεργοποίησα τον κλιματισμό στο δωμάτιο σε ζεστό αέρα (για να εξομοιώσω λειτουργία του κινητού κατά τους καλοκαιρινούς μήνες), το οποίο είχε ως συνέπεια νέα μείωση του ρυθμού φόρτισή της.

Android Thermal Throttling

Λίγο αργότερα (επειδή η ζέστη στο δωμάτιο έγινε ανυπόφορη) σταμάτησα την διαδικασίατα βασανιστήρια στο Nexus 4, σταματώντας τα συνεχή Benchmarks (και κλείνοντας φυσικά και τον ζεστό αέρα του κλιματιστικού).

Όλοι οι περιορισμοί που είχαν τεθεί (φόρτιση, φωτεινότητα, χρονισμός λειτουργίας CPU/GPU) σταμάτησαν -σταδιακά- να ισχύουν.

Android Thermal Throttling

Αναλυτικότερα την "λογική" με την οποία το thermal throttling "περιορίζει" την συσκευή μου, από την μεγάλη έκλυση θερμοκρασίας, μπορούμε να δούμε ανοίγοντας με κάποιον editor το thermald.conf από το /system/etc

adb shell

su

cat etc/system/thermald.conf

Να εξηγήσω πολύ συνοπτικά τι σημαίνουν οι μεταβλητές του thermald.conf:

sampling: ρυθμός δειγματοληψίας μετρήσεων

thresholds: το όριο θερμοκρασίας για το οποίο αρχίζουν να ισχύουν κάποιες ενέργειες/περιορισμοί

thresholds_clr: το όριο θερμοκρασίας για το οποίο σταματάνε να ισχύουν οι παραπάνω ενέργειες/περιορισμοί

actions: το τι ενέργειες να γίνουν αν περάσουμε το thresholds, π.χ. none (καμία ενέργεια)/ shutdown (απενεργοποίηση της συσκευής) / cpu (περιορισμός της λειτουργίας της CPU)/ gpu (περιορισμός της λειτουργίας της GPU)/lcd (μείωση φωτεινότητας της LCD)/ battery (μείωση ρυθμού φόρτισης).

actions_info: τι παράμετρος να ισχύσει για τις παραπάνω ενέργειες. Π.χ. για την cpu το actions_info αφορά την συχνότητα λειτουργίας της.

Αρχικά παρατηρούμε ότι οι αισθητήρες μηδέν μέχρι έξι είναι απλά "ενημερωτικοί", (none στο actions) χωρίς κάποια ενέργεια να είναι συνδεδεμένη με αυτούς (παρά μόνο η εγγραφή στο log). Δηλαδή απλά "γράφουν" στο log όταν η θερμοκρασία ξεπεράσει την μεταβλητή "thresholds", και ξαναγράφουν στο log όταν πέσει κάτω από το thresholds_clr.

Android Thermal Throttling Android Thermal Throttling

Οι αισθητήρες 7 μέχρι 10 έχουν περισσότερο ενδιαφέρον. Ενδεικτικά, θα πάρουμε τον αισθητήρα 7: Αν η θερμοκρασία ξεπεράσει το όριο των 120 βαθμών Κελσίου, η συσκευή μας "κλείνει", και μπορούμε να την ξαναανοίξουμε μόνο όταν πέσει κάτω από 115 βαθμούς.

Android Thermal Throttling

Παρατηρούμε συνεπώς ότι η μόνη μεταβλητή/μέτρηση στο Nexus 4 που καθορίζει το "throttling" είναι η batt_therm (θερμοκρασία στον αισθητήρα της μπαταρίας).

Στην παρακάτω εικόνα, το κυκλωμένο πλαίσιο αφορά την στιγμή που η batt_therm ξεπεράσει τους 37 βαθμούς, όπου θα γίνει αλλαγή σε cpu+gpu+lcd (η τιμή του battery είναι 0, και δεν περιγράφει κάποια αλλαγή).

Android Thermal Throttling

Για 41 βαθμούς Κελσίου, παρατηρούμε τις τιμές χρονισμού επεξεργαστή/gpu που πέφτουν κι άλλο, το ίδιο η τιμή φωτεινότητας, αλλά και ότι το battery έγινε 1 (άρα περιορισμός στην ταχύτητα φόρτισης).

Android Thermal Throttling

 

Περί throttling και αντί επιλόγου

Το throttling αποτελεί φυσιολογικότατη λειτουργία της συσκευής μας, δεν αποτελεί ελάττωμα όπως συχνά αναφέρεται, και σκοπός του είναι να προστατεύσει την συσκευή μας από υψηλές θερμοκρασίες.

Για την ακρίβεια "throttling" κάνει συνεχώς και το PC/laptop σου, και (αν και σε κάποιους δεν θα αρέσει αυτή η παρομοίωση) μέχρι και το αυτοκίνητό σου, "κόβοντας" ισχύ στον κινητήρα για μείωση της θερμοκρασίας.

Ένα σημαντικό point είναι ότι κάποιες συσκευές (λέγε με Nexus) κάνουν πολύ πιο "συντηρητικό" throttling απ' ότι άλλες συσκευές με το ίδιο SoC. Παραμετροποιώντας το thermald.conf (προφανώς με δική σας ευθύνη) μπορείτε να το αποτρέψετε.

Παρ' όλα αυτά, δεδομένου ότι η συνηθισμένη λειτουργία της CPU ενός Smartphone είναι κατά κανόνα "μικρά spikes υψηλής απαίτησης επεξεργαστικής ισχύος" (και όχι συνεχόμενο στρεσάρισμα όπως κάνουν τα Benchmarks), οπότε δεν θεωρώ ότι αξίζει να κάνετε κάτι τέτοιο.

Android Thermal Daemon

aByte