Redmi 4x - Nem használt CPU magok kikapcsolása

írta: starr, 7 éve

Az alábbi beállítások csak a Qualcomm MSM8940 SOC-vel rendelkező Redmi 4x-re vonatkoznak.
Más telefon esetén csak ötlet szintjén kezeljétek!
Csak az csinálja meg, akinek volt már dolga Linux-szal, vagy vissza tudja hozni készüléket tégla állapotból.
Mindenkinek a saját felelőssége!

A 8db processzormag 2 csoportra oszlik:
Gyorsabb magok:
cpu0, cpu1, cpu2, cpu3
Órajel: 960 - 1401 Mhz
Energiatakarékos magok
cpu4, cpu5, cpu6, cpu7
Órajel: 768 - 1094 Mhz

Elvileg amikor alacsony a terhelés a takarékos magok járnak, amikor nagyobb az igénybevétel, bekapcsolódnak a gyorsabbak is. A háttéfolyamatok csak a takarékosokat, míg az előtérben lévő éppen aktuális applikáció mind a 8 magot igénybe veheti. Alacsony terhelésnél a szükségtelen cpu-k elmennek aludni. Vagy mégsem?

A problémám, hogy a 8-ból 6 mag állandóan ébren van. Mind a 4 takarékos, és a gyorsabbakból mindig valamelyik kettő.
Kernel Adiutor (ROOT) appal látható, hogy alacsony terhelésnél 1, max 2 mag futtat valamit, a többi 5-6 nem csinál semmit, mégis ébren vannak.

Csökkentsük le a minimálisan mindig ébren lévő cpu-k számát 2-re

Nyissuk meg mobilon egy szövegszerkesztővel a /system/etc/init.qcom.post_boot.sh sctiptet.
Látható a scriptben, hogy többféle SOC beállításait is tartalmazza.
A Redmi 4X Snapdragon 435 (MSM8940) SOC-vel rendelkezik. Keressünk ará a 8940 -re. Ez a blokk fog a mi telefonunkra vonatkozni.

Görgessünk lejjeb az # Enable core control részhez:
Az
echo 2 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpus
sor azt állítja be, hogy a gyorsabb csoportból minimum 2 cpu mindig ébren legyen. Írjuk át 0-ra:
echo 0 > /sys/devices/system/cpu/cpu0/core_ctl/min_cpus

cpu0 beállításai cpu0, cpu1, cpu2, és cpu3-ra,
cpu4 beállításai cpu4, cpu5, cpu6, és cpu7-re vonatkoznak.

A cpu0 konfigurálását tartalmazó rész után szúrjuk be a következő sorokat:
echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/need_cpus
echo 2 > /sys/devices/system/cpu/cpu4/core_ctl/min_cpus
echo 4 > /sys/devices/system/cpu/cpu4/core_ctl/max_cpus
echo 68 > /sys/devices/system/cpu/cpu4/core_ctl/busy_up_thres
echo 40 > /sys/devices/system/cpu/cpu4/core_ctl/busy_down_thres
echo 100 > /sys/devices/system/cpu/cpu4/core_ctl/offline_delay_ms

Ezek már cpu4-re (és cpu5-re,6-ra, 7-re) vonatkoznak. Gyakorlatilag lemásolhatjuk a cpu0 konfigurálását, átírjuk a cpu0-kat cpu4-re, és itt már 2-re állítjuk a min_cpus -t. Véletlenül se maradjon 0 !!!!
(Ügyeljünk, hogy ha copy-val csináljuk, az is_big_cluster-es sort ne szúrjuk be is, mert ez nem az. Ez a Little cluster)
Így nézzen ki:

Euztán mentsük, és indítsuk újra a telefont.
(Amíg újraindul Mekka felé leborulva imádkozunk. Ha elindult, az imánk meghallgattatott)
Ha minden jól ment az eredmény alacsony terhelés esetén:

Akksi idő javulást várok tőle.
Megcsináltam már úgy is, hogy csak 1 CPU maradjon ébren, de azt tapasztaltam, hogy olyankor rengetegszer bekapcsolgat egy másik is, úgyhogy visszaállítottam kettőre.

Tesztelve Xiaomi Redmi 4x 8.2.10.0 Global Stabil ROM-al