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