Ok gente.
Ho aggiornato i contenuti in prima pagina (finalmente) e nel blog in cui trovate i links alla rom e al resto.
Ne approfitto per approfondire alcuni aspetti del changelog relativo al kernel, in attesa di aprire un thread separato dedicato, soprattutto per mettere al corrente gli utenti e renderli edotti riguardo a quello che usano.
Attivato il flag di ottimizzazione O3 del compilatore
Quote:
I livelli di ottimizzazione sono dei parametri che gestiscono il modo in cui il compilatore incrociato interpreta il flusso di codice al momento della compilazione del kernel.
Quelli principali sono 4: -Os; -O1; -O2; -O3
Ognuno di questi parametri consente di variare l'equilibrio tra dimensioni dell'immagine finale e velocità di esecuzione del kernel, perchè ciascun macro livello attiva altri sub-livelli, ad esempio attivando il livello -Os vengono abilitate le ottimizzazioni che non mirano a ridurre le dimensioni del kernel, mentre il livello -O3 attiverà le ottimizzazioni di O1 e O2 oltre ad altre specifiche che complessivamente causano un aumento delle dimensioni ma anche miglioramento nelle performance.
Per riassumere senza dilungare possiamo dire:
Il livello Os è ottimizzato per le dimensioni: a discapito delle prestazioni finali il kernel avrà delle dimensioni contenute.
Il livello O1 consente un leggero miglioramento delle prestazioni senza influire sulle dimensioni dell'immagine.
Il livello O2 fornirà un discreto aumento delle prestazioni ma aumenterà le dimesioni pur mantenendo l'aumento entro certi limiti.
Il livello O3 è tutto a vantaggio delle prestazioni, causando un aumento delle dimensioni dell'immagine finale. Per contro-bilanciare le dimensioni sono stati disattivati (escludendoli dalla compilazione) tutti driver relativi a debug e tracing, favorendo anche l'efficienza del kernel
Supporto init.d riscritto e migliorato
Quote:
Nelle versioni precedenti il supporto era limitato all'aggiunta di una riga nella init.rc del kernel per fare in modo che la busybox inizializzasse correttamente la cartela init.d, assegnado i giusti permessi ed eseguendo l'attivazione delle runparts sugli script presenti nella cartella.
Dalla versione attuale invece il kernel oltre a fornire il supporto per una cartella preesistente eseguirà un check per verificare o meno la presenza della cartella e ne creerà una nel caso in cui non sia presente, verificando in ambo i casi i permessi
.
Rinnovata Post-init
Quote:
Il post-init è un programma, non presente di default nelle boot.img stock, scritto in shell e che viene eseguito dopo le fasi di inizializzazione gestite dall'init.rc (da qui si intuisce il perchè del nome post-init). Per lo sviluppatore diventa un modo per introdurre e personalizzare alcuni processi che vengono eseguiti durante le fasi di avvio, sfruttando le potenzialità del mondo Unix, creando algoritmi, condizioni e modificando alcuni parametri del kernel. Rispetto alle precedenti versioni è stato snellito, riorganizzato e corretto per una maggiore efficienza.
Thunderbolt tweaks
Quote:
I tweaks più conosciuti nel mondo android. In questo caso sono stati inclusi come sub-programma e vengono invocati durante le fasi di boot dal programma principale post-init.
Codec audio patchato con il codice sorgente Boeffla sound mod
Quote:
Il driver per il codec audio del processore di suono Wolfson micro è stato modificato per fornire il supporto alla Boeffla Sound Mod
PegasusQ governor: patchato con il codice sorgente da siyah kernel per il GT I9300 (GokhanMoral)
Quote:
E' stato effettuato un porting del governor PegasusQ ottimizzato da GokhanMoral originariamente per il Galaxy S3. Le modifiche introdotte migliorano le logiche di hotplug del governor, migliorando il funzionamento dello scaling in base al carico pur mantenendo i tunables sotto le soglie Battery friendly (esempio: up_threshold settato a 85) per non peggiorare le performance della batteria.
Ridotto il buffer size a 1024 kb
Quote:
Nelle versioni precedenti del kernel il buffer era stato incrementato a 2048: dopo numerosi test e misurazioni di scrittura/lettura utilizzando i vari scheduler disponibili è emerso che contrariamente a quanto pensavo un valore così alto produceva una perdita di performance. La calibrazione ottimale è stata ottenuta testando invece vari valori del parametro partendo dallo stock (128 kb) trovando l'equilibrio ottimale con 1024 kb e scheduler cfq. E' in previsione l'introduzione di differenti scheduler che ovviamente richiederanno ulteriori test. Stay tuned.
Android logger è compilato come modulo
Quote:
L'utente può decidere quando e se caricare e quindi far funzionare il modulo, di default non viene utilizzato.
Per utilizzarlo è necessario che l'utente crei un file nascosto vuoto direttamente in /system o in /data che sia chiamato ".logcat" e riavviare il device - nota: il punto utilizzato come prefisso serve proprio per rendere il file "nascosto".
Nel programma post-init è stato inserito una condizione: se il kernel trova il file caricherà il modulo con l'istruzione insmod e renderà disponibile il logcat.
Supporto per l'animazione di avvio personalizzata
Quote:
Nei dispositivi Samsung il binario di default che viene invocato dalla init.rc per mostrare l'animazione non è quello stock AOSP ma ovviamente uno personalizzato samsung che a sua volta fa riferimento ad un particolare tipo di media e che di conseguenza inibisce l'uso del classico bootanimation.zip.
In questo caso l'hack consiste nel far caricare all'init.rc del kernel il binario corretto, a condizione che sia presente almeno uno zip contenente l'animazione, o in /system/media o in /data/local. Diversamente l'hack richiamerà il binario originale samsung e verrà mostrata l'animazione stock.
Al primo avvio il kernel instellerà in system le applicazioni Andromizer (free) e Boeffla sound (free)
Quote:
All'interno della boot.img sono contenute due applicazioni: Andromizer e Boeffla sound, entrambenella versione free.
Una condizione inserita nel post-init farà in modo che le due applicazioni vengano installate in /system/app solo se non sono già presenti. L'utilità che possono avere le due applicazioni nella gestione del kernel è semplice da intuire.
Rivista e corretta la funzione di zipallign automatico per tutte le applicazioni in partizioni di sistema e data
Quote:
Questa funzionalità è legata alla presenza della cartella init.d nel sistema, la quale abbiamo visto che sarà comunque presente a priori in sistema equipaggiato con questo kernel. Passati i check relativi all'init.d il kernel inietterà un binario (eseguibile) in /system/xbin e uno script nella cartella init.d. A questo punto verrà eseguito lo script che passerà al vaglio tutte le applicazioni in system e data, verificando l'allineamento dell'archivio e nel caso sia necessario eseguirà lo zipallign.
Verrà generato un database e un log delle operazioni compiute per far riconoscere al kernel al prossimo avvio quali sono le applicazioni già verificate (md5 checksum) e conseguentemente capire l'esito delle verifiche.
Al momento dell'installazione dei files necessari verrà anche creato una directory e un file (verificate voi stessi in /system/.speedwizz chiamato zipallign_installed) che eviterà che al prossimo avvio vengano reinstallati senza motivo.
Undervoltate molte parti sorgente e precisamente: Tensione GPU (-50mV), tensione ARM (-75 mV), tensione interna e bus (-50 mv)
Quote:
Questa parte è semplice da capire: siccome non sono in grado (per il momento) di fornirvi un supporto modificabile dei voltaggi mi sono limitato ad abbassare io i voltaggi. Se notate freeze oppure S.O.D. sapete chi andare a cercare. In ogni caso i valori non sono proibitivi ma può capitare che per molti funzionino e qualcuno creino fastidi :p
Aggiunto dynamic FSYNCH (Faux)
Quote:
E' stato inserito il supporto alla sincronia dinamica del file system.
Normalmente i flussi di operazioni Read Write sono immagazzinati nella cache per velocizzare le operazioni e vengono poi sincronizzate con lo stato attuale del file system in tempo reale, causando lag nel caso di operazioni di larghe dimensioni.
Implementando la suddetta funzionalità la situazione cambia: quando lo schermo è spento il file system è sincrono (sincronia attivata) mentre quando lo schermo è attivato il file system è asincrono (sincronia disattivata) per favorire le performance.
Il dinamismo è disattivabile utilizzando l'applicazione Andromizer oppure TricksterMOD.
Modificato Androi / staging / binder.c per evitare qualche problema di memory leak.
Quote:
Nel driver indicato è presente un bug: in pratica se un processo oppure un albero di processi viene interrotto mentre ad esempio il sistema è in attesa di una risposta la memoria allocata non viene liberata alla chiusura, causando un fenomeno chiamato memory leak. La modifica introdotta dovrebbe correggere il problema.
Incrementato il valore di entropia casuale per una migliore scorrevolezza del kernel (Googyanas)
Quote:
Proverò a spiegare in parole semplici...
L'entropia è una sorta di archivio di eventi prevedibili. In che senso? Nei kernel linux l'entropia è generata dalle operazioni comuni scaturite dal funzionamento dell hardware, che si presuppone siano conosciute a priori, collezionate come se fosse una sorta di cache per essere subito disponibili e nel complesso migliorare le performance. Innalzando la soglia di archiviazione è possibile arichiviare maggiori quantità di informazioni e migliorare ulteriormente le performance, come è facile intuire.
Modificato un parametro in rwsem:
Quote:
In pratica il semaphore per regolare le operazioni di scrittura causa un vero e proprio calo di prestazioni nel caso di operazioni sequenziali molto vicine tra loro, perchè si verifica una confusione di priorità tra le query in attesa e quelle effettivamente in scrittura. La patch introduce una modifica interessante: viene fatto in modo che il furto avvenga quando la query in attesa è anche in scrittura, recuperando pienamente le prestazioni senza cali anomali.
I rispettivi autori delle patch e delle modifiche al codice sorgente sono creditati nel gitHub dove risiedono i sorgenti dello speedwizz kernel.