Note di rilascio del kernel

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

Nuove funzionalità del kernel 6.12

Questa sezione descrive 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 codice sorgente univoca, in modo che i problemi relativi alle allocazioni possano essere identificati rapidamente. Inoltre, la profilazione dell'allocazione della memoria:

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

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

  • Funziona sia per i moduli integrati nel kernel sia 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 del kernel implementa la lettura multishot, in cui una singola operazione di lettura può recuperare più parti di dati contemporaneamente, migliorando le prestazioni.

Funzionalità e supporto migliorati del filtro Berkeley Packet Filter (BPF)

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

Esecuzione del proxy

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

Nuove funzionalità del kernel 6.6

Questa sezione descrive 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_sem (precedentemente noto come mmap_lock). Di conseguenza, le app che utilizzano un numero elevato di thread potrebbero vedere i tempi di avvio ridotti fino al 20%.

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

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

Riduzione del consumo energetico dai callback di aggiornamento della copia di lettura (RCU)

L'opzione RCU_LAZY utilizza un metodo di batching del callback RCU basato sul 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 descrive le nuove funzionalità del kernel 6.1.

Sicurezza più rapida con l'integrità del flusso di controllo del kernel (KCFI)

KCFI sostituisce l'integrità del flusso di controllo (CFI), con conseguente riduzione del costo di runtime e nessun costo di compilazione. Il costo di runtime ridotto consente di attivare KCFI in più posizioni rispetto a CFI, in particolare nei punti di traccia e negli hook del fornitore.

Oltre a KCFI, il kernel 6.1 introduce diverse funzionalità di sicurezza, come il controllo rigoroso dei limiti di 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 ha problemi 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 di 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 RCU-safe aumenta le prestazioni grazie al suo footprint inferiore e all'assenza di blocchi.

Per ulteriori informazioni su MGLRU, consulta Multi-Gen LRU.

Pianificazione

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

  • È stata aggiunta la pianificazione sensibile al cluster, che aumenta le prestazioni eseguendo la migrazione ai core che condividono la cache L2.
  • Rimossa l'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.
  • I periodi di tolleranza RCU con procedura rapida sono stati 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 Vulcan Video.

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

Strumenti di debug

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

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

Miglioramenti del supporto ARM64

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

  • Supporto per le estensioni del timer ARMv8.6
  • Supporto dell'algoritmo di autenticazione del puntatore QARMA3
  • Supporto iniziale per l'estensione della matrice scalabile (SME) ARMv9
  • Miglioramenti al patching della funzionalità di alternative che comportano una dimensione dell'immagine del kernel più piccola