Note di rilascio del kernel

Questa pagina riassume le principali funzionalità di ogni release del kernel e fornisce link a ulteriori informazioni.

Nuove funzionalità del kernel 6.12

Questa sezione spiega le nuove funzionalità del kernel 6.12.

Profilazione dell'allocazione della memoria

La chiave per comprendere l'utilizzo della memoria è sapere dove vengono effettuate le allocazioni. Il kernel 6.12 include un nuovo sistema di attribuzione dell'allocazione della memoria chiamato profilazione dell'allocazione della memoria (CONFIG_MEM_ALLOC_PROFILING nella configurazione). Con la profilazione dell'allocazione della memoria, ogni allocazione viene attribuita a una riga di origine univoca, in modo che i problemi con le allocazioni possano essere identificati rapidamente. Inoltre, la profilazione dell'allocazione della memoria:

  • Viene utilizzata durante la fase di progettazione, ma è disponibile nell'immagine GKI standard.

  • Può essere abilitata utilizzando il parametro di avvio sysctl.vm.mem_profiling.

  • Funziona sia per i moduli in-kernel che per quelli caricati.

io_uring più veloce con lettura zero-copy e multishot

Nel kernel 6.12, i moduli statsd e logd utilizzano la copia zero di sendfile, migliorando le loro prestazioni.

Inoltre, questa versione kernel implementa la lettura multishot, in cui una singola operazione di lettura può recuperare più dati contemporaneamente, migliorando le prestazioni.

Funzionalità e supporto migliorati di Berkeley Packet Filter (BPF)

Nel kernel 6.12, la toolchain BPF è stata spostata per supportare CO-RE e diverse funzionalità moderne. Inoltre, un nuovo loader BPF consente l'utilizzo di BPF moderno per i programmi che fanno parte di AOSP.

Esecuzione proxy

L'esecuzione proxy consente allo scheduler di prendere in prestito cicli di CPU da processi ad alta priorità per recuperare i blocchi mantenuti da processi a priorità inferiore. Questa funzionalità attenua i problemi di inversione di priorità.

Nuove funzionalità del kernel 6.6

Questa sezione spiega le nuove funzionalità del kernel 6.6.

Supporto di Rust

Più progetti del kernel 6.6 utilizzano Rust.

Blocchi per area di memoria virtuale (VMA)

Il kernel 6.6 utilizza blocchi per area di memoria virtuale per risolvere i problemi di contesa con mmap_lock (precedentemente noto come mmap_sem). Di conseguenza, le app che utilizzano un numero elevato di thread potrebbero vedere i tempi di avvio ridotti fino al 20%.

Lo scheduler EEVDF (Earliest Eligible Virtual Deadline First) sostituisce CFS

EEVDF sostituisce CFS (Completely Fair Scheduler) per bilanciare meglio l'accesso alla CPU tra attività di breve e lunga durata.

Riduzione del consumo energetico dei callback RCU (Read Copy Update)

L'opzione RCU_LAZY utilizza un metodo di batching dei callback RCU basato su timer per risparmiare energia. Per un sistema con carico leggero o inattivo, questa opzione può ridurre il consumo energetico del 5-10%.

Migliore compressione della memoria ZRAM

La nuova impostazione di build CONFIG_ZRAM_MULTI_COMP consente a ZRAM di ricomprimere le pagine con uno dei tre algoritmi alternativi. Questa ricompressione riduce ulteriormente la memoria compressa, fornendo più spazio libero per le attività attive.

Nuove funzionalità del kernel 6.1

Questa sezione spiega le nuove funzionalità del kernel 6.1.

Maggiore sicurezza con KCFI (Kernel Control Flow Integrity)

KCFI sostituisce CFI (Control Flow Integrity) con conseguente riduzione del costo di runtime e nessun costo di build. Il costo di runtime ridotto consente di abilitare KCFI in più posizioni rispetto a CFI, in particolare tracepoint e hook del fornitore.

Oltre a KCFI, il kernel 6.1 introduce diverse funzionalità di sicurezza, come il controllo rigoroso dei limiti memcpy e le mitigazioni degli attacchi di speculazione in linea retta.

Per ulteriori informazioni su KCFI, consulta Integrità del flusso di controllo del kernel.

LRU multigenerazionale (MGLRU)

MGLRU è stato aggiunto al kernel 6.1 per migliorare la gestione della memoria identificando meglio le pagine effettivamente in uso. Questo miglioramento riduce la necessità di interrompere le app quando il sistema riscontra una carenza di memoria. Questo aggiornamento migliora anche l'esperienza utente, in quanto la reattività complessiva del dispositivo è migliore.

L'implementazione di MGLRU include anche il supporto per un nuovo albero di acero sicuro per RCU, che, in alcuni casi, può essere utilizzato per sostituire l'albero rosso-nero (rbtree). Se utilizzato, l'albero di acero sicuro per RCU aumenta le prestazioni grazie al suo footprint ridotto e alla mancanza di blocchi.

Per ulteriori informazioni su MGLRU, consulta LRU multigenerazionale.

Programmazione

La manutenzione e l'aggiornamento dello scheduler sono un aspetto fondamentale del lavoro di miglioramento del kernel. Gli aggiornamenti del kernel nella versione 6.1 includono:

  • Aggiunta della pianificazione con riconoscimento del cluster, che aumenta le prestazioni eseguendo la migrazione ai core che condividono la cache L2.
  • Rimozione dell'euristica del margine energetico non necessaria. Limitando alcune migrazioni, questo aggiornamento migliora l'utilizzo dell'energia fino al 5%.
  • Bilanciamento del carico migliorato per ridurre la latenza di riattivazione.
  • Periodi di tolleranza accelerati RCU spostati in un kthread in tempo reale. Questo aggiornamento ha ridotto notevolmente i valori anomali di latenza correlati a RCU.

Grafica

Il kernel 6.1 contiene nuovi metodi per dma-buf per l'esportazione e l'importazione di file di sincronizzazione, in linea con la necessità dell'API video Vulcan.

Il nuovo metodo futex_waitv() semplifica il porting dei giochi da altre piattaforme attendendo più futex contemporaneamente.

Strumenti di debug

Utilizza KCSAN (Kernel Concurrency SANitizer) nelle build di debug per identificare le race nel codice del kernel.

Inoltre, utilizza KMSAN (Kernel Memory SANitizer) per trovare i valori non inizializzati nel kernel.

Miglioramenti del supporto ARM64

Il kernel 6.1 offre diversi miglioramenti per l'architettura ARM64, tra cui:

  • Supporto per le estensioni del timer ARMv8.6
  • Supporto per l'algoritmo di autenticazione del puntatore QARMA3
  • Supporto iniziale per SME (Scalable Matrix Extension) ARMv9
  • Miglioramenti alla patch della funzionalità alternatives, con conseguente riduzione delle dimensioni dell'immagine del kernel