Lansarea nucleului Linux 6.7

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 6.7. Printre cele mai notabile modificări: integrarea sistemului de fișiere Bcachefs, întreruperea suportului pentru arhitectura Itanium, capacitatea Nouvea de a lucra cu firmware GSP-R, suport pentru criptarea TLS în NVMe-TCP, capacitatea de a folosi excepții în BPF, suport pentru futex în io_uring, optimizarea performanței planificatorului fq (Fair Queuing) ), suport pentru extensia TCP-AO (Opțiune de autentificare TCP) și capacitatea de a restricționa conexiunile de rețea în mecanismul de securitate Landlock, a adăugat controlul accesului la spațiul de nume al utilizatorului și io_uring prin AppArmor.

Noua versiune include 18405 de corecții de la 2066 de dezvoltatori, dimensiunea patch-ului este de 72 MB (modificările au afectat 13467 de fișiere, au fost adăugate 906147 de linii de cod, 341048 de linii au fost șterse). Ultima versiune a avut 15291 remedieri de la 2058 dezvoltatori, dimensiunea patch-ului a fost de 39 MB. Aproximativ 45% din toate modificările introduse în 6.7 sunt legate de driverele de dispozitiv, aproximativ 14% din modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 13% sunt legate de stiva de rețea, 5% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Inovații cheie în nucleul 6.7:

  • Subsistem de disc, I/O și sisteme de fișiere
    • Nucleul adoptă codul sistemului de fișiere Bcachefs, care încearcă să atingă performanța, fiabilitatea și scalabilitatea XFS, combinate cu elemente ale funcționalității avansate găsite în Btrfs și ZFS. De exemplu, Bcachefs acceptă funcții precum includerea mai multor dispozitive într-o partiție, aranjamente de unități cu mai multe straturi (stratul de jos cu date utilizate frecvent bazate pe SSD-uri rapide și stratul superior cu date mai puțin utilizate de pe hard disk), replicare (RAID 1/10), stocarea în cache, compresia transparentă a datelor (modurile LZ4, gzip și ZSTD), secțiunile de stare (instantanee), verificarea integrității folosind sume de control, capacitatea de a stoca coduri de corectare a erorilor Reed-Solomon (RAID 5/6), stocarea informațiilor în formă criptată (se folosesc ChaCha20 și Poly1305). În ceea ce privește performanța, Bcachefs este înaintea Btrfs și a altor sisteme de fișiere bazate pe mecanismul Copy-on-Write și demonstrează viteza de operare apropiată de Ext4 și XFS.
    • Sistemul de fișiere Btrfs introduce un mod simplificat de cotă care vă permite să obțineți performanțe mai mari prin urmărirea extensiilor doar în subpartiția în care sunt create, ceea ce simplifică semnificativ calculele și îmbunătățește performanța, dar nu vă permite să luați în considerare extinderile partajate în mai multe subpartiții.
    • Btrfs a adăugat o nouă structură de date de tip „stripe tree”, potrivită pentru maparea logică a extinderii în situațiile în care mapările fizice nu se potrivesc între dispozitive. Structura este utilizată în prezent în implementările RAID0 și RAID1 pentru dispozitive cu blocuri zonate. În viitor, ei plănuiesc să folosească această structură în RAID-uri de nivel superior, ceea ce va rezolva o serie de probleme existente în implementarea actuală.
    • Sistemul de fișiere Ceph implementează suport pentru maparea ID-urilor de utilizator ale sistemelor de fișiere montate, utilizate pentru a potrivi fișierele unui anumit utilizator de pe o partiție străină montată cu alt utilizator de pe sistemul curent.
    • S-a adăugat capacitatea de a specifica uid și gid la montare la efivarfs pentru a permite proceselor non-root să modifice variabilele UEFI.
    • S-au adăugat apeluri ioctl la exFAT pentru citirea și modificarea atributelor FS. S-a adăugat gestionarea directoarelor de dimensiune zero.
    • F2FS implementează capacitatea de a utiliza blocuri de 16K.
    • Mecanismul de montare automată autofs a fost schimbat pentru a utiliza noul API de montare a partițiilor.
    • OverlayFS oferă opțiuni de montare „lowerdir+” și „datadir+”. S-a adăugat suport pentru montarea imbricată a OverlayFS cu xattrs.
    • XFS a optimizat încărcarea procesorului în codul de alocare a blocurilor în timp real. Este oferită capacitatea de a efectua simultan operații de citire și FICLONE.
    • Codul EXT2 a fost convertit pentru a utiliza folii de pagină.
  • Servicii de memorie și sistem
    • Suportul pentru arhitectura ia64 utilizată în procesoarele Intel Itanium, care au fost complet întrerupte în 2021, a fost întrerupt. Procesoarele Itanium au fost introduse de Intel în 2001, dar arhitectura ia64 nu a reușit să concureze cu AMD64, în principal datorită performanței mai mari ale AMD64 și a tranziției mai lină de la procesoarele x32 pe 86 de biți. Drept urmare, interesele Intel s-au mutat în favoarea procesoarelor x86-64, iar lotul lui Itanium a rămas serverele HP Integrity, comenzile pentru care au fost oprite în urmă cu trei ani. Codul pentru suportul ia64 a fost eliminat din nucleu, în principal din cauza lipsei de suport pe termen lung pentru această platformă, în timp ce Linus Torvalds și-a exprimat dorința de a returna suportul ia64 la kernel, dar numai dacă există un întreținător care poate demonstra calitatea înaltă. suport pentru această platformă în afara nucleului principal timp de cel puțin un an.
    • S-a adăugat parametrul de comandă pentru linia de kernel „ia32_emulation”, care vă permite să activați sau să dezactivați suportul pentru emularea modului pe 32 de biți în nucleele construite pentru arhitectura x86-64 la etapa de pornire. Din punct de vedere practic, noua opțiune vă permite să construiți nucleul cu suport pentru compatibilitate cu aplicații pe 32 de biți, dar dezactivați acest mod în mod implicit pentru a reduce vectorul de atac pe kernel, deoarece API-ul de compatibilitate este mai puțin testat decât nucleul principal interfețe.
    • Migrarea continuă a modificărilor din ramura Rust-for-Linux legate de utilizarea limbajului Rust ca a doua limbă pentru dezvoltarea de drivere și module de kernel (suportul Rust nu este activ în mod implicit și nu duce la includerea Rust printre dependențele de asamblare necesare pentru nucleu). Noua versiune face tranziția la utilizarea versiunii Rust 1.73 și oferă un set de legături pentru lucrul cu cozile de lucru.
    • Este posibil să utilizați mecanismul binfmt_misc pentru a adăuga suport pentru noile formate de fișiere executabile (de exemplu, pentru a rula aplicații Java sau Python compilate) în spații de nume separate neprivilegiate.
    • Controlerul cpuset-ul cgroup, care vă permite să controlați utilizarea nucleelor ​​CPU atunci când executați o sarcină, oferă o împărțire în partiționare locală și la distanță, care diferă dacă cgroup-ul părinte este secțiunea rădăcină corectă sau nu. Noile setări „cpuset.cpus.exclusive” și „cpuset.cpus.excluisve.effective” au fost, de asemenea, adăugate la cpuset pentru legarea exclusivă a CPU.
    • Subsistemul BPF implementează suport pentru excepții, care sunt procesate ca o ieșire de urgență dintr-un program BPF cu capacitatea de a derula în siguranță cadrele stivei. În plus, programele BPF permit utilizarea pointerilor kptr în legătură cu CPU.
    • Suport pentru operațiuni cu futex a fost adăugat la subsistemul io_uring și noi operațiuni au fost implementate: IORING_OP_WAITID (versiunea asincronă a waitid), SOCKET_URING_OP_GETSOCKOPT (opțiunea getsockoptand), SOCKET_URING_OP_SETSOCKOPT (opțiunea setsockopt) și operațiunea nu se oprește (opțiunea setsockopt) și nu se oprește (opțiunea setsockopt) (opțiunea IORING_MTI_REAT) există date sau nu este tampon plin).
    • S-a adăugat implementarea cozilor FIFO ușoare, conectate unic, care necesită un blocare spin numai pentru scoaterea din coadă într-un context de proces și nu dispune de un blocare spin pentru adăugiri atomice la coadă în orice context.
    • S-a adăugat un buffer inel „objpool” cu o implementare scalabilă a unei cozi de înaltă performanță pentru alocarea și returnarea obiectelor.
    • Partea inițială a modificărilor a fost adăugată pentru a implementa noul API futex2, care are performanțe mai bune pe sistemele NUMA, acceptă alte dimensiuni decât 32 de biți și poate fi folosit în locul apelului de sistem futex() multiplexat.
    • Pentru arhitecturile ARM32 și S390x, a fost adăugat suport pentru setul curent (cpuv4) de instrucțiuni BPF.
    • Pentru arhitectura RISC-V, este posibil să se utilizeze modul de verificare Shadow-Call Stack disponibil în Clang 17, conceput pentru a proteja împotriva suprascrierii adresei de retur de la o funcție în cazul depășirii buffer-ului pe stivă. Esența protecției este de a salva adresa de retur într-o stivă separată „umbră” după transferul controlului către o funcție și preluarea acestei adrese înainte de a ieși din funcție.
    • Un nou mod inteligent de scanare a paginilor de memorie a fost adăugat la mecanismul de îmbinare a paginilor de memorie identice (KSM: Kernel Samepage Merging), care urmărește paginile scanate nereușit și reduce intensitatea re-scanării acestora. Pentru a activa noul mod, a fost adăugată setarea /sys/kernel/mm/ksm/smart_scan.
    • S-a adăugat o nouă comandă ioctl PAGEMAP_SCAN, care, atunci când este utilizată cu userfaultfd(), vă permite să determinați faptele de scriere într-un interval de memorie specific. Noua caracteristică, de exemplu, poate fi folosită în sistem pentru a salva și a restabili starea proceselor CRIU sau în sistemele anti-cheat de joc.
    • În sistemul de asamblare, dacă compilatorul Clang este disponibil, asamblarea exemplelor de utilizare a subsistemului perf, scrise ca programe BPF, este activată implicit.
    • Vechiul strat videobuf, care a fost folosit pentru a gestiona framebuffer-urile din subsistemul media și a fost înlocuit cu o nouă implementare a videobuf10 acum mai bine de 2 ani, a fost eliminat.
  • Virtualizare și securitate
    • Abilitatea de a cripta datele în blocuri mai mici decât dimensiunea blocului din sistemul de fișiere a fost adăugată la subsistemul fscrypt. Acest lucru poate fi necesar pentru a activa mecanismele de criptare hardware care acceptă numai blocuri mici (de exemplu, controlerele UFS care acceptă doar o dimensiune de bloc 4096 pot fi utilizate cu un sistem de fișiere cu o dimensiune de bloc de 16K).
    • Subsistemul „iommufd”, care vă permite să gestionați tabele de pagini de memorie IOMMU (I/O Memory-Management Unit) prin descriptori de fișiere din spațiul utilizatorului, a adăugat urmărirea datelor care nu au fost încă șterse din cache (murdar) pentru DMA operațiuni, care este necesară pentru determinarea memoriei cu date neșterse în timpul migrării procesului.
    • Suport pentru definirea regulilor de control al accesului pentru socket-urile TCP a fost adăugat la mecanismul Landlock, care vă permite să limitați interacțiunea unui grup de procese cu mediul extern. De exemplu, puteți crea o regulă care permite accesul numai la portul de rețea 443 pentru a stabili conexiuni HTTPS.
    • Subsistemul AppArmor a adăugat capacitatea de a controla accesul la mecanismul io_uring și de a crea spații de nume de utilizator, ceea ce vă permite să permiteți selectiv accesul la aceste capacități doar anumitor procese.
    • S-a adăugat API-ul de atestare a mașinii virtuale pentru a verifica integritatea procesului de pornire a mașinii virtuale.
    • Sistemele LoongArch acceptă virtualizarea folosind hypervisorul KVM.
    • Când utilizați hypervisorul KVM pe sistemele RISC-V, a apărut suportul pentru extensia Smstateen, care blochează mașina virtuală să acceseze registrele CPU care nu sunt acceptate în mod explicit de hypervisor. De asemenea, a adăugat suport pentru utilizarea extensiei Zicond în sistemele oaspeți, care permite utilizarea unor operațiuni întregi condiționate.
    • În sistemele invitate bazate pe x86 care rulează sub KVM, sunt permise până la 4096 de procesoare virtuale.
  • Subsistemul de rețea
    • Driverul NVMe-TCP (NVMe peste TCP), care vă permite să accesați unități NVMe prin rețea (NVM Express over Fabrics) folosind protocolul TCP, a adăugat suport pentru criptarea canalului de transmisie a datelor folosind TLS (folosind KTLS și un proces de fundal în spațiul utilizatorului tlshd pentru negocierea conexiunii).
    • Performanța planificatorului de pachete fq (Fair Queuing) a fost optimizată, ceea ce a făcut posibilă creșterea debitului cu 5% la sarcini grele în testul tcp_rr (TCP Request/Response) și cu 13% cu un flux nelimitat de pachete UDP.
    • TCP adaugă o capacitate opțională de marcaj temporal de precizie în microsecunde (TCP TS) (RFC 7323), care permite o estimare mai precisă a latenței și module de control mai avansate a congestiei. Pentru a-l activa, puteți folosi comanda „ip route add 10/8 ... features tcp_usec_ts”.
    • Stiva TCP a adăugat suport pentru extensia TCP-AO (TCP Authentication Option, RFC 5925), care face posibilă verificarea antetelor TCP folosind coduri MAC (Message Authentication Code), folosind algoritmi mai moderni HMAC-SHA1 și CMAC-AES- 128, în schimb, opțiunea TCP-MD5 disponibilă anterior, bazată pe algoritmul moștenit MD5.
    • A fost adăugat un nou tip de dispozitive de rețea virtuală „netkit”, logica de transfer de date în care este setată folosind un program BPF.
    • KSMBD, o implementare la nivel de kernel a unui server SMB, a adăugat suport pentru rezolvarea numelor de fișiere care conțin perechi surogat de caractere compuse.
    • NFS a îmbunătățit implementarea thread-urilor cu serviciile RPC. S-a adăugat suport pentru delegarea de scriere (pentru NFSv4.1+). NFSD a adăugat suport pentru rpc_status netlink handler. Suport îmbunătățit pentru clienții NFSv4.x la reexportarea către knfsd.
  • Оборудование
    • Suportul inițial pentru firmware-ul GSP-RM a fost adăugat la modulul kernel Nouveau, care este utilizat în GPU-ul NVIDIA RTX 20+ pentru a muta operațiunile de inițializare și control GPU pe partea unui microcontroler GSP separat (procesor de sistem GPU). Suportul GSP-RM permite driverului Nouveau să funcționeze prin apeluri de firmware, mai degrabă decât prin programarea directă a interacțiunilor hardware, ceea ce face mult mai ușoară adăugarea de suport pentru noile GPU-uri NVIDIA prin utilizarea apelurilor pre-construite pentru inițializare și gestionarea energiei.
    • Driverul AMDGPU acceptă GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 și DML2. Suport îmbunătățit pentru încărcare fără întreruperi (fără pâlpâire la comutarea modului video).
    • Driverul i915 adaugă suport pentru cipurile Intel Meteor Lake și adaugă o implementare inițială a Intel LunarLake (Xe 2).
    • S-a adăugat suport pentru canalele de transmisie asimetrice adăugat la specificația USB4 v2 (120/40G).
    • S-a adăugat suport pentru ARM SoC: Qualcomm Snapdragon 720G (utilizat în smartphone-urile Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (utilizat în routere și NAS).
    • S-a adăugat suport pentru smartphone-ul Fairphone 5 și plăcile ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • S-a adăugat suport pentru plăcile RISC-V Milk-V Pioneer și Milk-V Duo.
    • S-a adăugat suport pentru interfețele de sunet ale laptopurilor HUAWEI furnizate cu procesoare AMD. S-a adăugat suport pentru difuzoare suplimentare instalate pe laptopurile Dell Oasis 13/14/16. S-a adăugat suport pentru difuzoarele încorporate ASUS K6500ZC. S-a adăugat suport pentru indicatorul de sunet pe laptopurile HP 255 G8 și G10. S-a adăugat suport pentru driverele audio acp6.3. S-a adăugat suport pentru interfețele profesionale de înregistrare Focusrite Clarett+ 2Pre și 4Pre.

În același timp, Latin American Free Software Foundation a format o versiune a nucleului complet gratuit 6.7 - Linux-libre 6.7-gnu, curățată de elemente de firmware și drivere care conțin componente non-libere sau secțiuni de cod, al căror domeniu de aplicare este limitat. de către producător. În versiunea 6.7, codul de curățare blob a fost actualizat în diferite drivere și subsisteme, de exemplu, în driverele amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs și btqca. Codul pentru curățarea driverelor localtalk și rtl8192u a fost eliminat din cauza excluderii lor din nucleu. S-au eliminat componentele inutile pentru curățarea driverelor xhci-pci, rtl8xxxu și rtw8822b, adăugate anterior din greșeală. S-au curățat numele blob-urilor din fișierele dts pentru arhitectura Aarch64. S-au eliminat blob-urile din noile drivere mt7925, tps6598x, aw87390 și aw88399.

Sursa: opennet.ru

Adauga un comentariu