Na twee maanden ontwikkeling heeft Linus Torvalds de release van de Linux-kernel 5.14 gepresenteerd. Enkele van de meest opvallende veranderingen zijn: nieuwe systeemaanroepen quotactl_fd() en memfd_secret(), verwijdering van de ide- en raw-drivers, een nieuwe invoer/uitvoer prioriteitscontroller voor cgroup, de taakplanning modus SCHED_CORE, en infrastructuur voor het maken van opstarters voor geverifieerde BPF-programma's.
In de nieuwe versie zijn 15883 correcties opgenomen van 2002 ontwikkelaars, de patchgrootte bedraagt 69 MB (de wijzigingen omvatten 12580 bestanden, 861501 regels code zijn toegevoegd en 321654 regels verwijderd). Ongeveer 47% van alle wijzigingen in 5.14 zijn gerelateerd aan apparaatsdrivers, ongeveer 14% betreft de update van code die specifiek is voor hardwarearchitecturen, 13% heeft betrekking op de netwerkstack, 3% op bestandssystemen en 3% op interne subsysteem van de kernel.
Belangrijkste vernieuwingen:
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- Voor cgroup is een nieuwe invoer/uitvoer prioriteitscontroller geïmplementeerd — rq-qos, die de prioriteit van verwerking van verzoeken aan blokapparaten, gegenereerd door de leden van elke cgroup, kan beheren. Ondersteuning voor de nieuwe prioriteitscontroller is toegevoegd aan de invoer/uitvoer scheduler mq-deadline.
- In het ext4-bestandssysteem is een nieuwe ioctl-opdracht EXT4_IOC_CHECKPOINT geïmplementeerd, die alle wachtende transacties uit het log en de bijbehorende buffers dwingt om naar de schijf te worden weggeschreven, en het door het log gebruikte gebied in de opslag herschrijft. Dit wijziging is voorbereid in het kader van een initiatief om datalekken uit bestandssystemen te voorkomen.
- In Btrfs zijn prestatie-optimalisaties doorgevoerd: door overbodige logging van uitgebreide attributen tijdens het uitvoeren van fsync te elimineren, is de prestatie van intensieve operaties met uitgebreide attributen met tot 17% verhoogd. Bovendien is bij het uitvoeren van operationele verkleiningen, die geen invloed hebben op extenten, de volledige synchronisatie uitgeschakeld, wat de operationele tijd met 12% heeft verkort. In sysfs is een instelling toegevoegd om de doorvoer van invoer/uitvoer te beperken tijdens bestandssysteemcontroles. ioctl-aanroepen zijn toegevoegd voor het annuleren van resize-operaties en het verwijderen van apparaten.
- In XFS is de implementatie van de buffer cache herzien, die nu is overgeschakeld op paginagroot geheugenallocatie in batchmodus. De efficiëntie van de cache is verbeterd.
- In F2FS is added an option to operate in read-only mode and implemented caching mode for compressed blocks (compress_cache) to enhance random read performance. Support for file compression reflected in memory via the mmap() operation has been implemented. A new mount option nocompress is offered for selectively disabling file compression based on a mask.
- In the exFAT driver, work has been done to improve compatibility with storage devices of certain digital cameras.
- A system call quotactl_fd() has been added, allowing quota management not through a special device file, but via a file descriptor associated with the filesystem to which the quota applies.
- Old drivers for block devices with an IDE interface have been removed from the kernel, replaced long ago by the libata subsystem.
- The 'raw' driver providing unbuffered access to block devices via the /dev/raw interface has been removed from the kernel. This functionality has long been implemented in applications using the O_DIRECT flag.
- Geheugen en systeemdiensten
- A new scheduling mode SCHED_CORE has been implemented in the task scheduler, allowing control over which processes can run together on a single CPU core. Each process can be assigned a cookie identifier defining the trust domain between processes (for example, belonging to the same user or container). When organizing code execution, the scheduler can ensure that a single CPU core is shared only for processes associated with one owner, which can be used to block some Spectre-class attacks by preventing trusted and untrusted tasks from executing in the same SMT (Hyper Threading) thread.
- Support for the kill operation has been implemented for cgroups, allowing all processes bound to the group to be terminated at once (sending SIGKILL) by writing '1' to the virtual file cgroup.kill.
- De mogelijkheden met betrekking tot het reageren op gedetecteerde gesplitste vergrendelingen ('split lock'), die optreden bij toegang tot niet-uitgelijnde gegevens in het geheugen omdat bij het uitvoeren van een atomische instructie de gegevens twee cachelijnen van de CPU overlappen. Dergelijke vergrendelingen leiden tot aanzienlijke prestatieverlies, daarom werd eerder de mogelijkheid geboden om geforceerd het programma dat de vergrendeling veroorzaakte af te sluiten. In de nieuwe release is er een kernel-opdrachtregelparameter 'split_lock_detect=ratelimit:N' toegevoegd, waarmee een algemene limiet voor de intensiteit van vergrendeloperaties per seconde kan worden bepaald. Als deze wordt overschreden, zal elk proces dat de bron van de gesplitste vergrendeling is, in plaats van te worden beëindigd, gedwongen worden om gedurende 20 ms te stoppen.
- In de CFS-breedte controle (CFS bandwidth controller), die bepaalt hoeveel CPU-tijd aan elke cgroup kan worden toegewezen, is de mogelijkheid toegevoegd om limieten vast te stellen die beperkt zijn tot een bepaalde tijdsduur, waardoor het beter mogelijk is om belasting te reguleren die gevoelig is voor vertragingen. Bijvoorbeeld, door cpu.cfs_quota_us in te stellen op 50000 en cpu.cfs_period_us op 100000, kan een groep processen elke 100 ms 50 ms CPU-tijd verbruiken.
- Een initiële infrastructuur is toegevoegd voor het creëren van BPF-programma's loaders, die in de toekomst zal toestaan dat alleen BPF-programma's worden geladen, die zijn ondertekend met een betrouwbaar digitaal sleutel.
- Een nieuwe futex-operatie FUTEX_LOCK_PI2 is toegevoegd, die een monotonische timer gebruikt voor het berekenen van time-outs, rekening houdend met de tijd die het systeem in slaapstand heeft doorgebracht.
- Voor de RISC-V-architectuur is ondersteuning voor grote geheugenseiten (Transparent Huge-Pages) geïmplementeerd en de mogelijkheid om het KFENCE-mechanisme toe te passen voor het detecteren van fouten bij geheugengebruik.
- De systeemaanroep madvise() heeft nieuwe vlaggen MADV_POPULATE_READ en MADV_POPULATE_WRITE gekregen om 'page faults' te genereren voor alle geheugenpagina's die zijn weerspiegeld voor lees- of schrijfoperaties, zonder dat daadwerkelijk lezen of schrijven (prefault) plaatsvindt. Het gebruik van deze vlaggen kan nuttig zijn om vertragingen in het programma te verminderen door de voorgeschreven uitvoering van de 'page fault'-handler voor alle niet-toegewezen pagina's gelijktijdig uit te voeren, zonder te wachten op feitelijke toegang.
- Het unit-test systeem kunit heeft ondersteuning gekregen voor het uitvoeren van tests in een QEMU-omgeving.
- Nieuwe tracers zijn toegevoegd: 'osnoise' voor het volgen van vertragingen in toepassingen veroorzaakt door interruptverwerking, en 'timerlat' voor gedetailleerde informatie over vertragingen bij het ontwaken door een timer-signaal.
- Virtualisatie en beveiliging
- De systeemaanroep memfd_secret() is toegevoegd, waarmee een privés geheugengebied kan worden gecreëerd in een geïsoleerde adressenruimte, dat alleen zichtbaar is voor het eigenaar-proces, niet gereflecteerd in andere processen en niet rechtstreeks toegankelijk is voor de kernel.
- In het systeem voor het filteren van systeemaanroepen seccomp, is het mogelijk gemaakt om één atomaire operatie te gebruiken om een bestandsdescriptor te creëren voor de te isoleren taak en deze terug te geven tijdens de verwerking van de systeemaanroep. Deze voorgestelde operatie lost het probleem op van het onderbreken van de handler in de gebruikersruimte bij ontvangst van een signaal.
- Een nieuw mechanisme is toegevoegd voor het beheren van resourcebeperkingen in de gebruikers-ID-namespace, die afzonderlijke rlimit-tellers aan een gebruiker in 'user namespace' koppelt. Deze wijziging lost het probleem op van het toepassen van gezamenlijke resource-tellers bij het uitvoeren van processen door een enkele gebruiker in verschillende containers.
- In de hypervisor KVM Voor ARM64-systemen is de mogelijkheid toegevoegd om MTE (MemTag, Memory Tagging Extension) uit te voeren in gast systemen, waardoor tags aan elke geheugenallocatie kunnen worden gekoppeld en de correctheid van het gebruik van pointers kan worden gecontroleerd om uitbuiting van kwetsbaarheden die ontstaan door toegang tot al vrijgegeven geheugens, bufferoverlopen, toegang vóór initialisatie en gebruik buiten de huidige context te blokkeren.
- De door het ARM64-platform geboden hulpmiddelen voor Pointer Authentication kunnen nu afzonderlijk worden ingesteld voor de kernel en de gebruikersruimte. Deze technologie maakt gebruik van gespecialiseerde ARM64-instructies om retouradressen te verifiëren met digitale handtekeningen die zijn opgeslagen in de ongebruikte bovenste bits van de pointer zelf.
- In User-mode Linux is ondersteuning toegevoegd voor het gebruik van stuurprogramma's voor PCI-apparaten met een virtuele PCI-bus, geïmplementeerd door de PCI-over-virtio-stuurprogramma.
- Voor x86-systemen is ondersteuning toegevoegd voor het paravirtualiseerde virtio-iommu-apparaat, waarmee IOMMU-verzoeken zoals ATTACH, DETACH, MAP en UNMAP kunnen worden verzonden via virtio-transport zonder emulatie van paginatabellen.
- Voor Intel CPU's, vanaf het Skylake-familie tot Coffee Lake, is het gebruik van Intel TSX (Transactional Synchronization Extensions) standaard uitgeschakeld. Deze extensies bieden middelen om de prestaties van multithreaded applicaties te verbeteren door onnodige synchronisatiebewerkingen dynamisch uit te schakelen. De extensies zijn uitgeschakeld vanwege de mogelijkheid van Zombieload-aanvallen, die informatielekken via zijkanalen manipuleren die optreden bij het werken van de asynchrone interruptmechanisme (TAA, TSX Asynchronous Abort).
- Netwerk subsysteem
- De integratie in de MPTCP (MultiPath TCP)-kernel is voortgezet, een protocoluitbreiding van TCP voor het tot stand brengen van TCP-verbindingen met gelijktijdige pakketlevering over meerdere routes via verschillende netwerkinterfaces. IP-adressenIn de nieuwe release is een mechanisme toegevoegd voor het definiëren van eigen verkeershashingbeleid voor IPv4 en IPv6 (multipath hash policy), waarmee vanuit de gebruikersruimte kan worden bepaald welke velden in pakketten, inclusief ingekapselde pakketten, zullen worden gebruikt voor het berekenen van de hash die het pad voor het pakket bepaalt.
- In het virtuele transport virtio is ondersteuning toegevoegd voor SOCK_SEQPACKET-sockets (geordende en betrouwbare levering van datagrammen).
- De mogelijkheden van de SO_REUSEPORT socketmechanisme zijn uitgebreid, waardoor meerdere luisterende sockets zich kunnen aansluiten op één poort voor het ontvangen van verbindingen, met de gelijktijdige verdeling van binnenkomende verzoeken over alle aangesloten sockets via SO_REUSEPORT. Dit vereenvoudigt de ontwikkeling van multithreaded serverapplicaties. De nieuwe versie voegt middelen toe voor het overdragen van de controle naar een andere socket in het geval van een fout bij de verwerking van een verzoek door de oorspronkelijk gekozen socket (dit lost het probleem van het verlies van afzonderlijke verbindingen tijdens de herstart van services op).
- Apparatuur
- In de amdgpu-driver is ondersteuning toegevoegd voor de nieuwe series GPU's AMD Radeon RX 6000, ontwikkeld onder de codenaam "Beige Goby" (Navi 24) en "Yellow Carp", evenals verbeterde ondersteuning voor de GPU Aldebaran (gfx90a) en APU Van Gogh. De mogelijkheid om gelijktijdig met meerdere eDP-panelen te werken is toegevoegd. Voor de APU Renoir is ondersteuning toegevoegd voor het gebruik van versleutelde buffers in videogeheugen (TMZ, Trusted Memory Zone). Ondersteuning voor het hot-unpluggen van grafische kaarten is toegevoegd. Voor de GPU Radeon RX 6000 (Navi 2x) en oudere AMD GPU's is standaard ondersteuning voor het energiebesparingsmechanisme ASPM (Active State Power Management) ingeschakeld, dat eerder alleen was geactiveerd voor GPU's van Navi 1x, Vega en Polaris.
- Voor AMD-chips is ondersteuning voor gedeeld virtueel geheugen (SVM, shared virtual memory) toegevoegd op basis van het HMM-systeem (Heterogeneous memory management), waardoor apparaten met eigen geheugenbeheersystemen (MMU, memory management unit) toegang kunnen krijgen tot het hoofdgeheugen. Met HMM kan bovendien een gezamenlijk adresruimte tussen GPU en CPU worden georganiseerd, waarbinnen de GPU toegang kan krijgen tot het hoofdgeheugen van het proces.
- Initiële ondersteuning voor de technologie AMD Smart Shift is toegevoegd, die de energieparameters van CPU en GPU dynamisch aanpast op laptops met AMD-chipsets en videokaarten om de prestaties tijdens het gamen, videobewerking en 3D-rendering te optimaliseren.
- In de i915-driver voor Intel-grafische kaarten is ondersteuning toegevoegd voor de Intel Alderlake P-chips.
- De drm/hyperv-driver voor de virtuele grafische adapter Hyper-V is toegevoegd.
- Ondersteuning voor de all-in-one computer Raspberry Pi 400 is toegevoegd.
- De dell-wmi-privacy-driver is toegevoegd voor ondersteuning van de hardwarecamera- en microfoonschakelaars die in Dell-laptops zijn ingebouwd.
- Voor Lenovo-laptops is er een WMI-interface toegevoegd voor het wijzigen van BIOS-instellingen via sysfs /sys/class/firmware-attributes/.
- Uitgebreide ondersteuning voor apparaten met USB4-interface.
- Ondersteuning toegevoegd voor geluidskaarten en codecs zoals AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 en Texas Instruments TAS2505. Verbeterde geluidskwaliteit op HP- en ASUS-laptops. Patches toegevoegd om de vertraging voor het afspelen van geluid op USB-apparaten te verminderen.
Bron: opennet.ru
