Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kern 6.13 gepresenteerd. Onder de meest opmerkelijke wijzigingen bevinden zich de lazy eviction-modus in de taakplanner, ondersteuning voor atomische schrijfacties in XFS en Ext4, het 'multigrain timestamps'-mechanisme, de adaptieve polling-modus in de netwerksubsystemen, mogelijkheid tot bouwen met AutoFDO-optimalisaties, ondersteuning voor het ARM65 Guarded Control Stack-beveiligingsmechanisme, isolatie van virtuele machines via de ARM CCA-uitbreiding, gescheiden stacks in BPF, verwijdering van ReiserFS, de virtual-cpufreq-driver, netlink API net-shaper, en de case-sensitive mount-modus van tmpfs, naast ondersteuning voor POSIX-uitbreidingen in SMB3 en de AMD Cache Optimizer-driver.
In de nieuwe versie zijn 14172 correcties opgenomen van 2086 ontwikkelaars, de patchgrootte is 46 MB (de wijzigingen hebben 15375 bestanden aangeraakt, 598707 regels code toegevoegd en 406294 regels verwijderd). In de vorige release waren 14607 correcties van 2167 ontwikkelaars, met een patchgrootte van 37 MB. Ongeveer 52% van alle wijzigingen in 6.13 heeft betrekking op apparaatsdrijvers, ongeveer 13% op de update van architectuurspecifieke code, 11% is gerelateerd aan de netwerkstack, 4% aan bestandssystemen en 3% aan interne subsystemen van de kernel.
Belangrijkste vernieuwingen in de kernel 6.13:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- Een nieuw 'multigrain timestamps'-mechanisme is toegevoegd, waarmee informatie over de tijd van wijziging of toegang tot bestanden met meer dan een milliseconde nauwkeurigheid kan worden verkregen, zonder de prestaties negatief te beïnvloeden. De verhoogde nauwkeurigheid van timestamps leidt tot extra overhead door de toegenomen intensiteit van het schrijven van metadata naar schijf, daarom worden de nauwkeuriger timestamps in de voorgestelde implementatie niet voor alle bestanden aangemaakt, maar alleen voor die bestanden waarvoor processen dergelijke timestamps aanvragen via de getattr()-aanroep.
- Ondersteuning voor atomische schrijfacties is toegevoegd, waarbij gegevens die groter zijn dan de grootte van een sector atomisch worden geschreven naar opslagapparaten die dergelijke mogelijkheden bieden. Momenteel is atomisch schrijven geïmplementeerd voor XFS, Ext4 in de O_DIRECT-modus (Direct I/O) en md RAID 0/1/10.
- Een nieuw referentietelmechanisme voor bestanden is voorgesteld, wat zorgt voor een prestatieverbetering van 3-5% in werklasten met meer dan 255 threads.
- De implementatie van het bestandssysteem ReiserFS is verwijderd, dat vorig jaar als verouderd werd beschouwd.
- De sysctl-parameter «fs.dentry-negative» is toegevoegd om de VFS-beleid voor het wissen van «dentry»-records (de interne weergave van directory-elementen) in te stellen na het verwijderen van de bijbehorende bestanden. Voor sommige belastingtypes is het optimaler om dergelijke records van verwijderde bestanden te behouden, terwijl voor andere de verwijdering beter is, daarom is in de kernel de mogelijkheid om te kiezen ingebouwd (standaard worden «dentry» niet automatisch verwijderd).
- De systeemaanroep statmount() heeft de vlag STATMOUNT_OPT_ARRAY gekregen voor het retourneren van een lijst van bestandssysteemopties als een array van strings die eindigen met een nullteken en geen escaping «\000» gebruiken. Ondersteuning voor het retourneren van de subtype van FS (fs_subtype, ter bepaling van het gebruik van FUSE), veilige montagedefinities en de oorspronkelijke superblock (sb_source) is ook toegevoegd.
- In OverlayFS is het mogelijk geworden om lagen aan te duiden via bestandsdescriptoren in plaats van bestands- of padnamen.
- De tmpfs-bestandssysteem heeft de montageoptie «casefold» toegevoegd om ongevoeligheid voor hoofdletters te ondersteunen en de optie «strict_encoding» om het maken van bestanden met namen die onjuiste UTF-8-tekens bevatten te blokkeren.
- Een nieuwe set systeemaanroepen is voorgesteld voor het beheren van uitgebreide bestandsattributen: setxattrat(), getxattrat(), listxattrat() en removexattrat(). In tegenstelling tot de systeemaanroepen setxattr(), getxattr(), listxattr() en removexattr() vereisen de nieuwe varianten dat de bestandsdescriptor van de directory wordt opgegeven, waarvoor het bestands pad wordt gezocht.
- In Btrfs is de ioctl-operatie BTRFS_IOC_SUBVOL_SYNC_WAIT toegevoegd, die het wachten op de voltooiing van het opruimen van subvolumes inschakelt, wat het mogelijk maakt om de opdracht «btrfs subvolume sync» uit te voeren door een niet-privilegeerde gebruiker zonder toegang tot ioctl SEARCH_TREE (bruikbaar in back-uptoepassingen die subvolumes opruimen). De ioctl-operatie ENCODED_READ is toegevoegd voor het lezen via io_uring van gecodeerde gegevens, bijvoorbeeld voor direct lezen van gecomprimeerde extensies zonder uitpakken. Het werk is voortgezet voor de overgang naar het gebruik van geheugen pagina's (page folios). De kans op concurrerende vergrendelingen («lock contention») bij het zoeken naar ingebouwde omgekeerde referenties en bij het doorlopen van bufferextensies is verminderd. De efficiëntie van de compressie van de extensiemap is verbeterd.
- In het EROFS (Extendable Read-Only File System) bestandssysteem, dat is ontworpen voor gebruik op partities die alleen-lezen zijn, is de mogelijkheid geïmplementeerd om in de systeemaanroep lseek() de opties SEEK_HOLE en SEEK_DATA te gebruiken.
- F2FS heeft ondersteuning voor apparaat-aliassen («device aliasing») toegevoegd, waarmee tijdelijk een gebied in F2FS kan worden gereserveerd voor gebruik van een deel van het blockapparaat in een ander bestandssysteem. Na voltooiing van de externe bewerking kan het gereserveerde gebied weer aan F2FS worden teruggegeven. Bijvoorbeeld, je kunt een bestandssysteem aanmaken met het commando «mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb», waarna de inhoud van het apparaat /dev/vdc gereserveerd zal zijn en wordt weerspiegeld in het bestand vdc.file en de partitie /dev/vdc kan worden gebruikt voor eigen doeleinden, bijvoorbeeld geformatteerd onder een ander bestandssysteem. Om de gereserveerde inhoud terug te geven, hoeft je alleen het bestand vdc.file te verwijderen.
- XFS heeft ondersteuning voor quotabele realtime-apparaten toegevoegd. Er is ondersteuning voor een metadata directory toegevoegd, waarin alle inode met metadata worden opgeslagen.
- In het FUSE-mechanisme is de mogelijkheid tot dynamische wijziging van het maximale aantal pagina's (FUSE_MAX_MAX_PAGES) ingeschakeld, met gebruik van «sysctl fs.fuse.max_pages_limit». Hierbij worden pagina-folios gebruikt.
- In SMB is ondersteuning voor POSIX-extensies voor SMB3 geïmplementeerd, die nodig zijn voor de opslag van speciale bestandstypen zoals fifo, apparaatbestanden en symbolische schakels. Er is de mogelijkheid toegevoegd om een partitie te mounten met een alternatief wachtwoord, dat wordt toegepast bij het roteren van wachtwoorden. Een nieuwe mountoptie «cifs.upcall» is toegevoegd om de naamruimte te bepalen. Er is herkenning van symbool- en blokapparaatbestanden mogelijk gemaakt die zijn aangemaakt in Windows NFS Server. Ondersteuning voor symbolische schakels in WSL-stijl (Windows Subsystem for Linux) is toegevoegd.
- De bestandssystemen UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS en ECRYPTFS zijn omgeschakeld naar gebruik van de nieuwe API voor het mounten van partities.
- De bestandssystemen ECRYPTFS, UFS en NILFS2 zijn omgeschakeld naar gebruik van pagina-folios.
- Geheugen en systeemdiensten
- In de planner is een model van luie pre-emptie van taken (PREEMPT_LAZY, lazy preemption) geïmplementeerd, dat overeenkomt met het model van volledige pre-emptie ('full preemption') voor realtime-taken (RR/FIFO/DEADLINE), maar de pre-emptie van normale taken (SCHED_NORMAL) vertraagt tot de tick-grens. Deze vertraging verkleint het aantal gevallen van pre-emptie van lockhouders, waardoor de prestaties dichter bij configuraties komen die het model van vrijwillige pre-emptie (voluntary preemption) gebruiken. Zo kan het nieuwe model de mogelijkheden van volledige pre-emptie voor realtime-taken behouden, maar minimaliseert het de prestatieschommelingen voor reguliere taken. Bovendien vereenvoudigt het nieuwe model de logica van taakpre-emptie-operaties in de kernel doordat het beheerders die zich in andere componenten van de kernel bevinden (buiten de taakscheduler) uitsluit van het planningsproces.
- Bij het compileren met de Clang-compiler is het mogelijk om optimalisaties te gebruiken.
Bron: opennet.ru
