Buongiorno!!
Prima una breve premessa: sono sparito perché avevo speso troppo tempo su questa cosa, il kernel Cor Plenus 2.1.7 era completo e stabile (si lo è. A parte una bug in uno script che spiegherò poi) ma visto che mi si è impiantato tutto recentemente mi sono concentrato sul problema delle prestazioni e voglio condividere con voi i miei risultati. Quindi eccoci qui:
HINT PER OTTIMIZZARE LE PRESTAZIONI:
- ROOTING (quel maledetto): Il discorso è semplice. Il meccanismo di messaging delle applicazioni di rooting è generalmente un disastro. Per ogni richiesta di autorizzazione, notifica, e penso anche logging da parte del binario "su"viene lanciato un processo il cui compito è fare un broadcasting alla applicazione (Java), quella dell'apk per intenderci. Questo in taluni casi può letteralmente impiantare il telefono.
Soluzione. A livello di opzioni dell'applicazione:
- Disabilitare le notifiche
- Disabilitare il logging
- Concedere sempre il rooting. Questo è "pericoloso" nel senso che una applicazione maligna avrebbe possesso totale del sistema. Ma poiché di norma tutti o quasi autorizziamo sempre qualsiasi cosa lo richieda…
Alternativamente:
- Disinstallare l'applicazione Java, facendo attenzione che il binario "su" (di solito in /system/xbin) non venga rimosso a sua volta. La mia opzione favorita. Si consiglia comunque il binario/applicazione di SuperSU.
Attenzione ai kernel come il cyanus o il PX che hanno il loro rooting (su) in RAM disk senza avere l'applicazione. Con tali kernel la disinstallazione dell'applicazione, se presente per altri motivi, è fortemente raccomandata.- MINFREE: si tratta del valore (una sestupla) in /sys/module/lowmemorykiller/parameters/minfree. Definisce la quantità minima di memoria che deve essere libera per ciascun livello di applicazione/servizio. Più alta la memoria libera, meno processi girano nello stesso istante, migliori le prestazioni. E' lo stesso che viene modificato nel mio (infausto) script 07setvm. Apparentemente lo script può realmente causare problemi, in quanto non mi ero accorto di aver ridotto il primo e terzo valore. Do qui di seguito una lista di istruzioni per applicare diversi valori:Questo valore può essere settato anche da applicazioni come ROM Toolbox Pro, o altre gratuite che sicuramente trovate in internet. Provate voi a settare vari valori, tenendovi sempre più alti del default e giudicate quale vi sembra il più appropriato in quanto dipende dal numero massimo di servizi concorrenti che girano nel telefono. Mi riprometto di riscrivere lo script 07setvm senza modifiche al minfree e aggiungerne un altro, opzionale, con alcuni valori predefiniti.
- Default: echo 1536,2048,6144,8192,12288,15360 > /sys/module/lowmemorykiller/parameters/minfree
- 07setvm: echo 1024,2048,3072,24000,25000,26000 > /sys/module/lowmemorykiller/parameters/minfree
(si noti come i valori in grassetto fossero stati ridotti invece che aumentati. Il che non va bene. Mea culpa)- Mio attuale: echo 1636,2248,6444,15000,20000,25640 > /sys/module/lowmemorykiller/parameters/minfree
Il problema peggiore che vi possa capitare alzando i valori di minfree è che certi processi schedulati non partano proprio e, forse, alcune applicazioni talvolta si chiudano da sole. Per quanto mi capiti anche con valori standard. I benefici invece sono immediati. Si passa da una applicazione all'altra in uno o due secondi e non dopo un minuto.
- CPU GOVERNOR: L'eterna domanda. Qual'è il governor migliore? Nella mia esperienza, almeno nel nostro telefono, sono più o meno uguali. In termini di consumi della batteria ho l'impressione che cambi poco o nulla. Se usate il Cor Plenus raccomando comunque lagfree (riduce la frequenza max al sleep time), minmax e bcm21553. Se usate il kernel Cyanus, almeno nella versione 1.7, solo il bcm21553, perché i governor e le frequenze custom sono tutti sballati (Sorry. Ha le stesse e più bug che aveva nelle prime versioni il Cor Plenus). Oh, e settate la frequenza minima a 312MHz. La 156 (o era 104? Non si capisce perché setti una e riporta l'altra) non funziona. Per il resto è un ottimo kernel, deve aver implementato le modifiche CM per la GPU che riporta benchmark ben più alti.
- TONI SELEZIONE: Si, il click-click quando si fa una selezione. "Cosa c'entra?!" direte giustamente voi! Ebbene, questo fantastico sistema operativo non fa riprodurre l'audio direttamente dalle applicazioni, ma bensì mette i suoni in una coda per poi essere riprodotti da un processo, "mediaserver", che a ogni click (o altro suono) viene eseguito consumando un 10-30% della CPU per un paio di secondi. Ciò si applica ovviamente anche ai Toni Tastiera. Il processo mediaserver è il motivo per cui quando arriva una chiamata o un SMS la suoneria può arrivare anche alcuni secondi dopo la vibrazione. Vedete voi se disabilitarli oppure meno.
NB: questo sembra essere il caso solo se tweak audio come quelli di Volume+ sono abilitati.
- PARTIZIONE SWAP: Android gestisce la memoria delle applicazioni a livello Dalvik, mentre la swap è gestita dal kernel. Ciò fa si che non si capisca bene come utilizzare in modo efficiente la swap e se comporta qualche beneficio. Nella mia esperienza la swap migliora le prestazioni all'inizio, ma poi le deteriora drammaticamente quando la swap è piena. Se dopo un certo utilizzo il telefono lagga sensibilmente si consiglia di disabilitarla.
- zRAM: Come la swap, solo che usa la RAM (compressa con LZMA) per la partizione di memoria virtuale. E' più veloce a scrivere e a leggere della swap su disco/memoria flash per ovvie ragioni, ma toglie RAM che potrebbe forse essere meglio utilizzata per i buffer di I/O. Forse tenendola bassa (20-40MB) si avrebbe qualche vantaggio, ma come per la swap non si capisce bene come Android poi usi tale memoria virtuale. Di nuovo, se dopo un certo utilizzo il telefono lagga sensibilmente si consiglia di disabilitarla.
- KERNEL: Come scritto sopra il cyanus 1.7 è più performante, il Cor Plenus a mio avviso più stabile. Non ho potuto testare il cyanus 1.8 perché col cavolo che riformatto la /system in ext4… Ho suggerito nella thread in XDA come fare per permettere di avere entrambi i formati rfs e etx4.
- ADRENALINE ENGINE & C.: L'ho detto, ripetuto e lo sostengo ancora: Non sono affidabili. Il maggior guadagno in prestazioni lo avete perché anche quelli settano il valore di minfree. Per il resto è mia regola d'oro lasciar perdere troppi tuning. Quelli standard fatti dai produttori e sviluppatori del kernel Linux sono stati studiati, quelli custom a disposizione sono valori buttati li, che spesso non si sa cosa facciano e altrettanto spesso rischiano di farlo male. Vedi il mio errore nel minfree nello script 07setvm.
Ok, più o meno è tutto. Ribadisco che i due elementi che possono dare una sensazione di maggiore fluidità sono la rimozione dei messaggi del rooting se non la rimozione dell'applicazione di rooting stessa ("su" escluso) e l'aumento dei valori di minfree. La cosa l'ho verificata monitorando il consumo della CPU di tutti i processi da adb shell con il comando "top". Il mio telefono da totalmente impiantato (avevo tolto 07setvm) ora gira tranquillo persino con GO Launcher e GO Locker attivi. Con il kernel Cor Plenus 2.1.7.
Come ho detto tra qualche giorno pubblicherò un nuovo pacchetto zip di Cor Plenus 2.1.7, con gli script riveduti e corretti, stesso kernel. Devo farlo per me quindi tanto vale metterlo a disposizione. Pensavo anche di fare un Cor Plenus Light, con solo kernel e moduli, per poter facilmente passare da un kernel all'altro. Ma quando avrò tempo e pure voglia.
Per il resto… no, non mi metterò a sviluppare il kernel per la CM!! A me serve un telefono che funzioni, e di esperimenti ne ho fatti anche troppi con risultati troppo spesso massacranti. Con Android ho finito la pazienza.