Τι είναι ο Governor και τα Frequency Tables στο Android

Governor and Frequency Tables Android

Μπαίνοντας στα ενδότερα του Android, μετά την ανάλυση του Low Memory Killer (a.k.a. LMK), σειρά έχουν να δείξουμε την λειτουργία του Governor καθώς και των Frequency Tables του επεξεργαστή.

Πάμε λοιπόν να αναλύσουμε πώς αυτά δουλεύουν, δείχνοντας ταυτόχρονα και τον σχετικό κώδικα του Android.

Τι είναι ο Governor (στο Android)

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

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

Γνωστοί Governors είναι οι OnDemand, Performance, Powersave, Interactive, Smartass, Lagfree, Lazy, Lionheart, Hotplug καθώς και παραλλαγές τους (π.χ. Smartass V2 κτλ).

Τα 2 "άκρα" είναι οι Performance και Powersave, με τον μεν "Performance" να επιλέγει πάντα την μέγιστη δυνατή συχνότητα λειτουργίας, ενώ ο δε "Powersave" επιλέγει πάντα την ελάχιστη δυνατή.

Ο πιο "συνηθισμένος" Governor στο Android είναι ο "OnDemand" ο οποίος ας πούμε ότι αποτελεί την "χρυσή τομή" μεταξύ κατανάλωσης ενέργειας και επιδόσεων.

 

Πώς βλέπω ποιον Governor χρησιμοποιεί η Android συσκευή μου;

Εγκαταστήστε κάποιον Terminal Emulator (ή ανοίξτε adb shell από το PC στο κινητό) και γράψτε:

cd /sys/devices/system/cpu/cpu0/cpufreq cat scaling_governor

Το όνομα που θα μας επιστρέψει, αποτελεί τον επιλεγμένο Governor μας. (π.χ. ondemand, hotplug, κτλ) Ενδεικτικά:

Governor and Frequency Tables Android

Governor and Frequency Tables Android

Πολύ συνοπτικά πάμε να δούμε την λειτουργία του OnDemand Governor, ο οποίος κάνει δειγματοληψία της χρήσης της CPU, και αναλόγως την χρονίζει σε ψηλότερη, ή χαμηλότερη συχνότητα. Δηλαδή αν δει ότι ο επεξεργαστής δουλεύει το προηγούμενο διάστημα* με μέση χρήση 98%, ο OnDemand θα επιλέξει την αμέσως υψηλότερη συχνότητα λειτουργίας.

Κάποιες σημαντικές μεταβλητές (παράμετροι από το cpufreq_ondemand.c) είναι οι παρακάτω:

Governor and Frequency Tables Android

Συγκεκριμένο το sampling_rate (ρυθμός δειγματοληψίας) είναι σε μsec, και ορίζει το κάθε πότε ο πυρήνας θα ελέγχει την χρήση της CPU. Το up_threshold είναι το όριο το οποίο αν ξεπεραστεί (από την δειγματοληψία) ο governor θα επιλέξει μεγαλύτερη συχνότητα λειτουργίας.

 

Ποιες είναι οι διαθέσιμες συχνότητες λειτουργίας του επεξεργαστή μου;

Για να δούμε τις διαθέσιμες συχνότητες, από τις οποίες ο Governor επιλέγει την "κατάλληλη" κάθε στιγμή, δίνουμε σε Terminal Emulator ή adb shell το εξής:

cd /sys/devices/system/cpu/cpu0/cpufreq cat scaling_available_frequencies

Governor and Frequency Tables Android

Governor and Frequency Tables Android

Ναι, ξέρω, υπάρχουν εφαρμογές που μας δείχνουν πιο "εύκολα" το ποιον Governor χρησιμοποιούμε, και ποιες διαθέσιμες συχνότητας λειτουργίας έχουμε. Το point όμως όλων αυτών των άρθρων είναι να δούμε τον "σωστό" (a.k.a. δύσκολο?) τρόπο. Εξάλλου οι εφαρμογές που αυτοματοποιούν την διαδικασία, από τα παραπάνω file locations παίρνουν τα δεδομένα που δείχνουν.

 

Σχετικός κώδικας συχνοτήτων λειτουργίας επεξεργαστή

Η μαγεία του open source λοιπόν, μας επιτρέπει να δούμε, να αναλύσουμε (και να τροποποιήσουμε!) τον κώδικα. Ενδεικτικά στο acpuclock-8064.c του Nexus 4 μου θα δούμε το παρακάτω frequency table.

Governor and Frequency Tables Android

Από το οποίο θα πάρουμε ενδεικτικά μία γραμμή να αναλύσουμε:

{ 1, { 1512000, HFPLL, 1, 0, 0x38 }, L2(15), 1200000 }

Το 1 ή το 0 στην αρχή δείχνει ότι η συγκεκριμένη συχνότητα λειτουργίας είναι διαθέσιμη. Το αρχείο scaling_governor που διαβάσαμε πριν, δείχνει μόνο τις συχνότητες που αρχίζουν με "1".

Το 1512000 δείχνει την συχνότητα λειτουργίας, δηλαδή στην συγκεκριμένη γραμμή 1,51Ghz, που αποτελεί την μέγιστη στο Nexus 4 μου. Σχετικά με το HFPLL (ή το PLL) υπάρχει σχετική σημείωση παρακάτω. Το 1200000 είναι τιμή που σχετίζεται με το voltage.

Το L2(x) μας παραπέμπει σε έναν άλλο πίνακα, με συχνότητες για την L2 του επεξεργαστή!

Governor and Frequency Tables Android

Όπου συγκεκριμένα, το L2(15) αντιστοιχεί στην γραμμή:

[15] = { { 1188000, HFPLL, 1, 0, 0x2C }, 1150000, 1150000, 5 }

Εξηγώντας λοιπόν και αυτή την γραμμή, το 1188000 σημαίνει ότι η L2 λειτουργεί σε 1,188Ghz, ενώ τα 1150000 αποτελούν τιμή για το voltage. Το 5 στο τέλος αντιστοιχεί σε έναν άλλο πίνακα, και συγκεκριμένα σε αυτόν του memory bus bandwidth.

Governor and Frequency Tables Android

Το 5 λοιπόν αντιστοιχεί στο 5ο στοιχείο του πίνακα και συγκεκριμένα στην γραμμή:

[5] = BW_MBPS(4264), /* At least 533 MHz on bus. */

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

Το Bus της μνήμης λοιπόν, όταν ο επεξεργαστής δουλεύει στα 1,51Ghz (και άρα η L2 δουλεύει στα 1,188Ghz), θα δουλεύει στα (τουλάχιστον) 533Mhz!

Μην διανοηθείτε να ρωτήσετε τι είναι το PLL και το HFPLL. Οκ, πλάκα κάνω, το point όμως είναι ότι καταβάλλω τεράστια προσπάθεια να μείνω σε ένα συγκεκριμένο θέμα, και τα phased locked loops είναι ένα τεράστιο διαφορετικό κεφάλαιο, στο οποίο αναγκαστικά μπλέκονται και ηλεκτρονικά και αυτόματος έλεγχος.

 

Ερωτήσεις για Governor και Frequency Tables στο Android

Επίπεδο δυσκολίας: Χαμηλό

01Ο developer του συγκεκριμένου Custom Kernel του Nexus 4 έχει δώσει δυνατότητα στον επεξεργαστή να λειτουργεί "και πιο πάνω" από τα 1,5Ghz. Ποια είναι η νέα μέγιστη συχνότητα λειτουργίας του;

 

Επίπεδο δυσκολίας: Μέτριο-Χαμηλό

02Σε ROM που έχει γίνει Compile για το Nexus 4 χρησιμοποιώντας το εξής kernel file της γνωστής ROM CyanogenMod (CM10.2), επιλέγω Governor Powersave και στην συνέχεια τρέχω μία πολύ απαιτητική εφαρμογή (π.χ. Benchmark). Ποια συχνότητα λειτουργίας θα επιλεχθεί στον επεξεργαστή;

 

Επίπεδο δυσκολίας: Μέτριο-Υψηλό

03Με βάση το εξής αρχείο πυρήνα της CM 10.2 για το Nexus 4 , βρείτε την (ελάχιστη) συχνότητα που δουλεύει ο Memory Bus όταν ο επεξεργαστής δουλεύει σε συχνότητα 1026Mhz (1,026Ghz).

 

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

Γνωστοί ROM Developers (Sotmax για σένα χτυπάει η καμπάνα) παρακαλούνται να μην Spoilάρουν τις απαντήσεις.

aByte