Linux kernel 6.18

En aquest article repassem les principals novetats del Kernel Linux 6.18: millores en gestió de memòria, nous mecanismes de seguretat, suport per hardware i optimitzacions en filesystems i virtualització.

En aquesta versió del kernel s’ha implementat un nou sistema de sheaves per millorar l’assignació de memòria, però primer hem d’entendre una mica com funciona aquest procés.

Quan el kernel necessita un objecte petit, no demana memòria a nivell de pàgina, sinó que utilitza un allocador d’objectes:

  • Slab - Disseny original, divideix una pàgina en objectes més petits i els recicla.

  • Slob - Com Slab però per sistemes embedded.

  • Slub - Implementació moderna, simple i escalable (i la que s’utilitza actualment).

Slub funciona molt bé però té un problema: la contenció. Quants molts nuclis intenten interactuar amb objectes del mateix tipus (mateixa slab cache), competeixen per un lock intern, i en entorns amb molts nuclis pot empitjorar el rendiment.

Amb els sheaves el que es fa és implementar una nova capa a aquesta gestió de memòria, permetent:

  • Preallocar memòria segons tipus d’objectes

  • Oferint un sheaf amb cert nombre d’objectes per CPU, evitant locks globals

  • Sheaves adicionals per gestionar pics d’ús

Amb aquesta implementació, es pot assignar memòria sense locks globals, pel que:

  • Accelera les assignacions

  • Redueix la latència

  • Millora l’escalabilitat

Si la política d’assignació no és adequada, pot augmentar l’us de memòria, empitjorar el rendiment i augmentar la feina del kernel.

SEV-SNP és la tecnologia d’AMD que permet xifrar la memòria de les màquines virtuals per protegir-les de l’hipervisor.

Aquesta memòria funciona xifrant blocs de 16 bytes, utilitzant una clau de la màquina virtual i un tweak basat en l’adreça física de memòria.

El problema amb això (només amb AMD) era que movent memòria dins l’hipervisor, es podia obtenir informació sobre el text xifrat.

Per solucionar-ho, l’hipervisor ja no pot llegir ciphertext.

S’ha afegit suport a KVM per CET (Control-Flow Enforcement Technology). CET conté dues funcionalitats:

  • Shadow Stacks (SHSTK)

    Fa una còpia de l’stack per verificar modificacions malicioses. Era suportat per Intel i AMD i ara també per KVM.

  • Indirect Branch Tracking (IBT)

    Qualsevol salt indirecte apunti a una instrucció ENDBRANCH.

Aquestes implementacions ajuden a mitigar atacs.

Una de les tècniques que utilitzen les CPUs actuals és la execució especulativa, amb el que la CPU intenta predir les següents instruccions d’un programa i, si no ha predit correctament el programa, descarta el resultat i torna enrere.

El problema és que a vegades la CPU ha de fer salts a adreces que poden ser forçats per algun atacant i podria arribar a executar codi maliciós, i encara que la CPU en descarti el resultat, pot quedar canvis a la caché.

La solució que s’ha implementat és retpoline (return trampoline), quan hi ha instruccions on la CPU ha d’especular, la CPU cau en un loop on quedarà atrapada en un lloc segur i no podran segrestar-la.

KEXEC és un mecanisme que utilitza el kernel per carregar i bootejar un kernel nou des d’un kernel corrent. Fins ara tenia problemes amb TDX (encriptació de memòria d’Intel), i han afegit la possibilitat de carregar un kernel nou des d’un kernel amb TDX.

S’ha millorat el rendiment del controlador PCIe dels processadors Xeon6.

Suport i optimitzacions per hardware Xilinx.

Hi havia instruccions que donaven conflictes al compilar un kernel de manera nativa. Ara han quedat corregides.

S’ha afegit suport per Longson Security Engine amb RNG, TPM2 i més funcionalitats de seguretat.

Suport per extensions com:

  • MIPS vendor extension

  • Zicbop

  • bfloat16

  • SBI FWFT

S’han implementat millores en el mecanisme d’invalidació del TLB (Translation Lookaside Buffer), reduint latència en canvis de mapping.

Suport per la mitigació VMSCAPE.

S’ha implementat SHA-256 2-way interleaved, que permet processar blocs SHA256 en paral·lel.

AVIC és una alternativa a x2APIC amb acceleració per hardware.

Ara Secure AVIC assigna la instància a la màquina virtual, reduint la necessitat d’emulació del hardware.

Evita que l’hipervisor manipuli el Timestamp Counter, oferint més seguretat i estabilitat de temps.

Millora el número màxim de vCPUs suportades.

S’ha millorat la compatibilitat i s’han afegit correccions.

S’ha afegit suport per:

  • SBI FWFT

  • Zicbop

  • bfloat16

El subsistema VFIO estava en risc de ser eliminat, però s’han trobat mantenidors.

S’han començat a realitzar proves amb un nou driver per GPUs ARM Mali. A més, aquest driver està escrit en Rust.

S’ha eliminat BCacheFS del kernel.

Es resol un problema de rendiment que tenia a veure amb cgroups i lectura intensiva.

Encara està en un estat experimental però segueix progressant.

Després d’uns dos anys des que s’implementés, ara Online FSCK ve habilitat per defecte.

SquashFS és un sistema d’arxius comprimit read-only.

S’ha implementat una millora a sparse files: ara permet copiar fitxers amb grans regions de zeros de manera més eficient (fins a 150 cops més ràpid).

Ara utilitza hash-only lookup per defecte, millorant la eficiència en les cerques.

S’ha optimitzat la càrrega del bitmap d’assignació.

S’ha implementat suport per case-insensitive.

Segueix mantingut, amb petites correccions.

Nova capa de cache al device mapper per proporcionar baixa latència i alt rendiment al utilitzar un dispositiu de bloc lent.

I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!