Note di rilascio del kernel

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

Nuove funzionalità del kernel 6.12

Questa sezione illustra 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 profiling dell'allocazione della memoria (CONFIG_MEM_ALLOC_PROFILING nella configurazione). Con il profiling dell'allocazione della memoria, ogni allocazione viene attribuita a una riga di codice sorgente univoca, in modo da identificare rapidamente i problemi relativi alle allocazioni. Inoltre, la profilazione dell'allocazione della memoria:

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

  • Può essere attivato utilizzando il parametro di boot sysctl.vm.mem_profiling.

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

io_uring più veloce con lettura senza copia e multishot

Nel kernel 6.12, i moduli statsd e logd utilizzano sendfile zero-copy, migliorandone le prestazioni.

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

Funzionalità e supporto migliorati per 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 di utilizzare BPF moderno per i programmi che fanno parte di AOSP.

Esecuzione del proxy

L'esecuzione proxy consente allo schedulatore di prendere in prestito cicli della CPU dai processi con priorità elevata per recuperare i blocchi detenuti da processi con priorità inferiore. Questa funzionalità consente di mitigare i problemi di inversione della priorità.

Nuove funzionalità del kernel 6.6

Questa sezione illustra le nuove funzionalità del kernel 6.6.

Supporto di Rust

Diversi progetti del kernel 6.6 utilizzano Rust.

Blocchi per area di memoria virtuale (VMA)

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

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

L'EEVDF sostituisce lo scheduler completamente equo (CFS) per bilanciare meglio l'accesso alla CPU tra attività brevi e a lungo termine.

Consumo energetico ridotto dai callback di aggiornamento della copia di lettura (RCU)

L'opzione RCU_LAZY utilizza un metodo di raggruppamento dei callback RCU basato su timer per risparmiare energia. Per un sistema con carico ridotto o inattivo, questa opzione può ridurre il consumo di energia dal 5% al 10%.

Migliore compressione della memoria ZRAM

La nuova impostazione di compilazione CONFIG_ZRAM_MULTI_COMP consente a ZRAM di ricacciare le pagine con uno di tre algoritmi alternativi. Questa nuova compressione consente di ridurre ulteriormente la memoria compressa, offrendo più spazio libero per le attività attive.

Nuove funzionalità del kernel 6.1

Questa sezione illustra 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 un conseguente costo ridotto in fase di esecuzione e nessun costo in fase di compilazione. Il costo ridotto del runtime consente di attivare KCFI in più punti rispetto al CFI, in particolare nei tracepoint e negli hook del fornitore.

Oltre a KCFI, il kernel 6.1 introduce diverse funzionalità di sicurezza, come il controllo dei limiti memcpy rigoroso e le mitigazioni degli attacchi di speculazione a 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 presenta 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 di una nuova struttura ad albero di aceri sicura per RCU, che in alcuni casi può essere utilizzata per sostituire l'albero rosso-nero (rbtree). Se utilizzato, l'acero RCU-safe aumenta le prestazioni grazie al suo ingombro inferiore e alla sua assenza di blocchi.

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

Pianificazione

La manutenzione e l'aggiornamento dell'organizzatore sono un aspetto fondamentale del lavoro per migliorare il kernel. Gli aggiornamenti del kernel in 6.1 includono:

  • È stata aggiunta la pianificazione a conoscenza del cluster, che aumenta le prestazioni eseguendo la migrazione a core che condividono la cache L2.
  • È stata rimossa l'euristica relativa al margine di energia non necessaria. Limitando alcune migrazioni, questo aggiornamento migliora l'utilizzo dell'energia fino al 5%.
  • Miglioramento del bilanciamento del carico per ridurre la latenza di risveglio.
  • Sono stati spostati i periodi di tolleranza accelerati RCU in un kthread in tempo reale. Questo aggiornamento ha ridotto notevolmente gli outlier della latenza correlati al 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 in quanto attende più futex contemporaneamente.

Strumenti di debug

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

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

Miglioramenti al supporto di ARM64

Il kernel 6.1 apporta diversi miglioramenti all'architettura ARM64, tra cui:

  • Supporto per le estensioni del timer ARMv8.6
  • Supporto per l'algoritmo di autenticazione del cursore QARMA3
  • Supporto iniziale per l'estensione SME (Scalable Matrix Extension) ARMv9
  • Miglioramenti ai patch delle funzionalità alternative che hanno comportato una dimensione dell'immagine del kernel più ridotta