Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds kÀrnlansering . Bland de mest anmÀrkningsvÀrda förÀndringarna: stöd för AMD Navi GPU:er, Zhaoxi-processorer och Intel Speed Select för energihantering, möjligheten att anvÀnda umwait-instruktioner för att vÀnta utan att anvÀnda loopar,
ökar interaktiviteten med lĂ€get âutilization clampingâ för asymmetriska CPU:er, systemanropet pidfd_open, möjligheten att anvĂ€nda IPv4-adresser frĂ„n nĂ€tverket 0.0.0.0/8, möjligheten till hĂ„rdvaruaccelerering av nftables, stöd för HDR i DRM-systemet, integration av hypervisorn ACRN.
I Den nya versionen av Linus pÄminde alla utvecklare om den viktigaste regeln för kÀrnutveckling - att bevara beteendets konstanthet för anvÀndarrumskomponenter. FörÀndringar i kÀrnan fÄr pÄ inget sÀtt bryta mot befintliga applikationer och orsaka regressionsproblem pÄ anvÀndarnivÄ. OcksÄ, beteendeförÀndringar kan orsakas av inte bara Àndring av ABI, borttagning av förÄldrad kod eller uppkomsten av buggar, utan Àven indirekt pÄverka fungerande nyttiga förbÀttringar. Som ett tydligt exempel har en anvÀndbar i Ext4-koden, vilket minskar antalet Ätkomster till lagringsenheten genom att inaktivera förhandslÀsning av inode-tabellen vid smÄ I/O-förfrÄgningar.
Optimeringen ledde till att pÄ grund av minskad diskaktivitet sÄ samlades entropin för den slumpmÀssiga talgeneratorn getrandom() lÄngsammare, och under vissa konfigurationer kunde det pÄ vissa villkor observeras att det hÀngde sig vid uppstart tills entropipoolen var fylld. Eftersom optimeringen verkligen Àr anvÀndbar, uppstod en diskussion bland utvecklarna dÀr det föreslogs att ÄtgÀrda problemet genom att som standard inaktivera den blockerande lÀget för anropet getrandom() med tillÀgg av en valfri flagga för att vÀnta pÄ entropi, men en sÄdan Àndring kommer att pÄverka kvaliteten pÄ slumpmÀssiga tal i det inledande uppstartssteget.
I den nya versionen har 15794 korrigeringar gjorts av 1974 utvecklare,
patchens storlek Àr 92 MB (förÀndringarna omfattade 13986 filer, 258419 rader kod har lagts till,
599137 rader har tagits bort). Cirka 39% av alla Àndringar i version 5.3
Àr relaterade till enhetsdrivrutiner, cirka 12% av Àndringarna har
att göra med uppdatering av kod specifik för hÄrdvaruarkitekturer, 11%
kopplas till nĂ€tverksstacken, 3 % â filsystem och 3 % till interna
kÀrnunderavdelningar.
:
- Minne och systemtjÀnster
- Funktionaliteten för 'pidfd' har fortsatt att utvecklas, vilket hjÀlper till att hantera situationer med ÄteranvÀndning av PID (pidfd kopplas till en specifik process och Àndras inte, medan PID kan kopplas till en annan process efter att den aktuella processen, som Àr kopplad till denna PID, har avslutats). Tidigare lades
systemanropet pidfd_send_signal() och flaggan CLONE_PIDFD i anropet clone(), vilket möjliggör att fÄ pidfd för anvÀndning i idfd_send_signal(). NÀr man anvÀnder anropet clone() med flaggan CLONE_PIDFD kan det uppstÄ problem med tjÀnstehanterare eller system för tvÄngsavslut av processer vid minnesbrist i Android-plattformen. I detta fall anvÀnds anropet fork() eller clone() utan CLONE_PIDFD.I kÀrna 5.3 introducerades systemanropet , vilket möjliggör att fÄ en verifierad pidfd för en valfri befintlig process skapad utan att anvÀnda anropet clone() med flaggan CLONE_PIDFD. Stöd för polling av pidfd har ocksÄ lagts till genom poll() och epoll(), vilket gör att processhanterare kan övervaka avslutandet av valfria processer utan att oroa sig för race-conditions vid tilldelning av PID till en ny process. Mekanismen för meddelande om avslutandet av en process kopplad till pidfd liknar meddelandet om avslutandet av dess barnprocess;
- Stödet för belastningsbegrÀnsningsmekanismen har lagts till i schemalÀggaren (), vilket gör att minimum- eller maximumfrekvensintervall kan hÄllas beroende pÄ aktiva uppgifter pÄ CPU. Den presenterade mekanismen pÄskyndar uppgifter som direkt pÄverkar anvÀndarupplevelsen genom att köra dessa uppgifter Ätminstone vid den nedre grÀnsen för den "begÀrda" frekvensen. LÄgt prioriterade uppgifter som inte pÄverkar anvÀndarens arbete körs med hjÀlp av den övre grÀnsen för den "tillÄtna" frekvensen. GrÀnserna anges genom attributen sched_uclamp_util_min och sched_uclamp_util_max i systemanropet sched_setattr().
- Stöd för energihanteringsre teknologi har lagts till , tillgÀnglig pÄ vissa servrar med Intel Xeon-processorer. Den angivna teknologin möjliggör att stÀlla in prestanda- och bandbreddinstÀllningar för olika kÀrnor av CPU:n, vilket gör det möjligt att prioritera prestanda för uppgifter som utförs pÄ specifika kÀrnor, pÄ bekostnad av prestandan pÄ andra kÀrnor;
- Processer i anvÀndarrummet möjligheten att vÀnta en kort stund utan att anvÀnda cykler med hjÀlp av instruktionen umwait. Denna instruktion, tillsammans med instruktionerna umonitor och tpause, kommer att erbjudas i de kommande Intel-chipsen "Tremont", och möjliggör att implementera fördröjningar som Àr energieffektiva och inte pÄverkar prestandan för andra trÄdar nÀr Hyper Threading anvÀnds;
- För RISC-V-arkitekturen har stöd för stora minnessidor (huge pages) lagts till;
- I kprobes-spÄrningsmekanismen har möjligheten att avreferera kÀrnpointer till anvÀndarrummet lagts till, vilket kan anvÀndas, till exempel, för att utvÀrdera innehÄllet i strukturer som skickas till systemanrop. Möjligheten att stÀlla in kontroller vid laddningssteget har ocksÄ lagts till.
- I konfigurationsfilen har alternativet PREEMPT_RT lagts till för att arbeta i realtid. SjÀlva koden för att stödja realtid Ànnu inte har lagts till i kÀrnan, men framtrÀdandet av alternativet Àr ett bra tecken pÄ att det lÄngvariga arbetet med Realtime-Preempt-patcharna nÀrmar sig sin slutpunkt;
- Ett systemanrop clone3() har lagts till med en mer utbyggbar version av clone()-grÀnssnittet, som tillÄter fler flaggor;
- En hanterare bpf_send_signal() har lagts till, vilket tillÄter BPF-program att skicka signaler till godtyckliga processer;
- För perf-hÀndelser i KVM-hypervisorn har en ny mekanism för filtrering av hÀndelser lagts till, vilket gör det möjligt för administratören att bestÀmma vilka typer av hÀndelser som Àr tillÄtna eller otillÄtna för övervakning pÄ gÀstsidan;
- I verifieringsmekanismen för eBPF-applikationer har möjligheten att hantera program med loopar lagts till, förutsatt att loopens körning Àr begrÀnsad och inte kan leda till att grÀnsen för maximalt antal instruktioner överskrids;
- Funktionaliteten för 'pidfd' har fortsatt att utvecklas, vilket hjÀlper till att hantera situationer med ÄteranvÀndning av PID (pidfd kopplas till en specifik process och Àndras inte, medan PID kan kopplas till en annan process efter att den aktuella processen, som Àr kopplad till denna PID, har avslutats). Tidigare lades
- Disksubsystem, in- och utmatning och filsystem
- För filsystemet XFS har möjligheten till flertrÄdad traversering av inode implementerats (t.ex. vid kontroll av kvoter). Nya ioctl BULKSTAT och INUMBERS har lagts till, vilket ger tillgÄng till funktioner som tillkommit i den femte utgÄvan av filsystemformatet, sÄsom skapelsedatum för inode och möjligheten att stÀlla in parametrar för BULKSTAT och INUMBERS för varje grupp AG (Alloceringsgrupper);
- I Ext4 hÄl i kataloger (inte bundna block).
flaggan "i" (oförÀnderlig) för öppna filer (förbjuder skrivning i situationer dÀr flaggan har stÀllts in nÀr filen redan var öppen); - I Btrfs har snabb implementering av crc32c sÀkerstÀllts pÄ alla arkitekturer;
- I CIFS har stödet för smbdirect tagits bort frÄn experimentellt status. I SMB3 har möjligheten att anvÀnda krypteringsalgoritmer i GCM-lÀge lagts till. En ny monteringsalternativ har lagts till för att extrahera parametrar frÄn ACE-poster (Access Control Entry). Prestandan för open()-anropet har optimerats;
- I F2FS har ett alternativ lagts till för att begrÀnsa skrÀpuppsamlaren vid arbete i lÀget checkpoint=disable. En ioctl har lagts till för att ta bort blockintervall frÄn F2FS, vilket möjliggör justering av partitionsstorleken i farten. Möjligheten att placera en vÀxlingsfil i F2FS med direkt in-/utdata har lagts till. Stöd för filinlÄsning och blockallokering för liknande filer har lagts till för alla anvÀndare;
- I grÀnssnittet för asynkron in-/utdata io_uring har stöd för asynkrona operationer sendmsg() och recvmsg() lagts till;
- Filsystemet UBIFS har fÄtt stöd för komprimering med hjÀlp av zstd-algoritmen och möjlighet till verifiering av signerade filsystemsbilder;
- I filsystemet Ceph har stöd för SELinux sÀkerhetsmÀrken för filer lagts till;
- För NFSv4 har en ny monteringsoption "nconnect=" implementerats för att definiera antalet etablerade anslutningar till servern. Trafiken mellan dessa anslutningar kommer att fördelas med hjÀlp av lastbalansering. Dessutom skapar NFSv4-servern nu katalogen /proc/fs/nfsd/clients med information om aktuella klienter, inklusive information om öppna filer;
- Virtualisering och sÀkerhet
- I kÀrnan har en hypervisor för inbyggda enheter lagts till , som Àr skriven med tanke pÄ beredskap för att utföra realtidsuppgifter och lÀmplighet för anvÀndning i kritiska system. ACRN sÀkerstÀller minimala overhead, garanterar lÄg latens och adekvat respons för interaktion med hÄrdvara. Virtualisering av CPU-resurser, in-/utdata, nÀtverksunderhÄll, grafik- och ljudoperationer stöds. ACRN kan anvÀndas för att driva flera isolerade virtuella maskiner i elektroniska styrenheter, instrumentpaneler, bilinformation system, konsument-IoT-enheter och annan inbyggd teknik;
- I User-mode Linux tidsresenÀrslÀget, som möjliggör att sakta ner eller snabba upp tiden i UML:s virtuella miljö för att underlÀtta felsökning av tidsrelaterad kod. Dessutom har en parameter lagts till
time-travel-start, som tillÄter systemklockor att startas frÄn en angiven tid i epoch-format; - Nya alternativ för kommandoraden i kÀrnan "init_on_alloc" och "init_on_free" har lagts till, som, nÀr de anges, aktiverar nollstÀllning av allokerade och frigjorda minnesomrÄden (fyllning med nollor vid malloc och free), vilket förbÀttrar sÀkerheten genom extra overhead vid initialisering;
- En ny drivrutin har lagts till , med implementering av en paravirtualiserad enhet som möjliggör att skicka IOMMU-förfrÄgningar som ATTACH, DETACH, MAP och UNMAP, över virtio-transporter utan emulering av sidtabeller;
- En ny drivrutin har lagts till , som ger Ätkomst till lagringsenheter som speglas i det fysiska adressutrymmet, sÄsom NVDIMM;
- Möjligheten att koppla kryptografiska nycklar till anvÀndar- eller nÀtverksnamnrymder har implementerats (nycklarna blir otillgÀngliga utanför den valda namnrymden), liksom skydd av nycklar med hjÀlp av ACL;
- I kryptosystemet stöder en mycket snabb icke-kryptografisk hash-algoritm , vars hastighet begrÀnsas av minnesprestanda;
- NĂ€tverkssystemet
- Behandling av IPv4-adresser i intervallet 0.0.0.0/8 har sÀkerstÀllts, vilket tidigare inte var tillgÀngligt för anvÀndning. Introduktionen av detta subnÀt kan fördela ytterligare 16 miljoner IPv4-adresser;
- I Netfilter för nftables stöder mekanismer för hÄrdvaruaccelererad paketfiltrering genom anvÀndning av det som har lagts till i drivrutinerna Hela uppsÀttningar med regler kan överföras till nÀtverksadaptrar, inklusive alla kedjor. Aktivering sker genom att knyta flaggan NFT_TABLE_F_HW till tabellen. Enkla metadata för protokoll pÄ nivÄ 3 och 4 stöds, ÄtgÀrder att acceptera/avvisa, matchningar baserade pÄ IP och nÀtverksportar för avsÀndare/mottagare samt protokolltyp.
- inbyggt stöd för spÄrning av anslutningar för nÀtverksbryggor, vilket inte krÀver anvÀndning av det emulerande lagret br_netfilter;
- I nf_tables stöd för SYNPROXY-modulen, som Äterspeglar liknande funktionalitet frÄn iptables, samt implementering av möjligheten att kontrollera regler baserat pÄ specifika alternativ i IPv4-headern;
- Möjlighet att koppla BPF-program till systemanropen setsockopt() och getsockopt() har lagts till, vilket till exempel gör att man kan koppla sina egna Ätkomsthanterare till dessa anrop. Dessutom har en ny hook-lÀgespunkt lagts till, vilket möjliggör att anropa BPF-programmet en gÄng per varje RTT-intervall (round-trip-time, pingtid);
- För IPv4 och IPv6 en ny mekanism för lagring av routingdata nexthop, avsedd att öka skalbarheten hos routing-tabeller. Tester har visat att det nya systemet laddade in 743 000 rutter i kÀrnan pÄ endast 4,3 sekunder;
- För Bluetooth den funktionalitet som behövs för att stödja LE ping;
- Utrustning
- stöd för x86-kompatibla processorer frÄn , utvecklade som ett resultat av ett samarbetsprojekt mellan VIA Technologies och staden Shanghai. CPU-familjen ZX Àr byggd pÄ x86-64 Isaiah-arkitekturen, vilket fortsÀtter utvecklingen av teknologierna ;
- I DRM (Direct Rendering Manager)-subsystemet, liksom i grafiska drivrutiner som amdgpu och i915, har stöd lagts till för parsning, bearbetning och sÀndning av HDR-metadata (high dynamic range) via HDMI-porten, vilket gör det möjligt att anvÀnda HDR-paneler och skÀrmar som kan visa ytterligare ljusstyrkeomrÄden;
- I amdgpu-drivrutinen har grundlÀggande stöd för AMD NAVI GPU (RX5700) lagts till, vilket inkluderar en grundlÀggande drivrutin, kod för interaktion med skÀrmar (DCN2), stöd för GFX och berÀkningar (GFX10),
SDMA 5 (System DMA0), strömhanteringsverktyg och multimedia-kodnings-/decodingsverktyg (VCN2). Stödet för kort baserat pÄ GPU Vega12 och Vega20 har ocksÄ förbÀttrats i amdgpu, dÀr ytterligare möjligheter för minneshantering och energiförbrukning har lagts till. - I drivrutinen amdkfd (för diskreta GPU:er, som Fiji, Tonga, Polaris) har stöd lagts till för kort baserade pÄ GPU VegaM;
- I DRM-drivrutinen för Intel-grafikkort för Icelake-kretsar en ny flermodig gamma-korrigering. Stöd för utmatning via DisplayPort i YCbCr4:2:0-format har lagts till. Nya firmwareversioner har lagts till för SKL, BXT, KBL, GLK och ICL. Möjlighet att stĂ€nga av strömmen till skĂ€rmen i asynkront lĂ€ge har implementerats. stöd för att spara och Ă„terstĂ€lla renderingskontext för Ironlake-chips (gen5) och gen4 (Broadwater â Cantiga), vilket gör det möjligt att Ă„terstĂ€lla GPU:ns tillstĂ„nd frĂ„n anvĂ€ndarutrymmet nĂ€r man vĂ€xlar mellan olika batchoperationer;
- I Nouveau-drivrutinen har identifiering av NVIDIA Turing TU116-chipsetet sÀkerstÀllts;
- DRM/KMS-drivrutinens funktioner för ARM Komeda-skÀrmbearbetare (Mali D71) har utvidgats, stöd har lagts till för skalning, delning/sammanslagning av lager, rotation, fördröjd skrivning, AFBC, SMMU och fÀrgkodningsformaten Y0L2, P010, YUV420_8/10BIT;
- I MSM-drivrutinen har stöd lagts till för GPU:serien A540 Adreno, som anvÀnds i Qualcomm-processorer, samt stöd för DSI-kontrollern MSM8998 för Snapdragon 835;
- Drivrutiner för LCD-paneler frÄn Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 och VXT VL050-8048NT-C01 har lagts till; - drivrutin för att aktivera decoders accelerationsfunktioner
video, tillgÀnglig i SoC Amlogic Meson; - I v3d-drivrutinen (för Broadcom Video Core V GPU, som anvÀnds i Raspberry Pi) har det kommit hantering av berÀkningsshader;
- drivrutin för SPI-tangentbord och pekplattor som anvÀnds i moderna modeller av Apple MacBook och MacBookPro;
- ytterligare skydd för ioctl-anrop relaterade till floppy-drivrutinen, och sjÀlva drivrutinen Àr markerad som förÀldralös
(âorphanedâ), vilket innebĂ€r att dess testning har upphört. Drivrutinen finns fortfarande kvar i kĂ€rnan, men dess korrekta funktion garanteras inte. Drivrutinen anses vara förĂ„ldrad, eftersom det Ă€r svĂ„rt att hitta fungerande hĂ„rdvara för att testa den â alla aktuella externa lagringsenheter anvĂ€nder vanligtvis USB-grĂ€nssnitt. - cpufreq-drivrutin för Raspberry Pi-kort som gör det möjligt att dynamiskt hantera förĂ€ndringar i processorns klockfrekvens;
- Stöd har lagts till för nya ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP:er + MMA) och Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), samt kort:
- ,
- Aspeed BMC,
- Microsoft Olympus BMC,
- Kontron SMARC,
- Novtech Meerkat96 (i.MX7),
- ST Micro Avenger96,
- Google Cheza (Qualcomm SDM845),
- Qualcomm Dragonboard 845c (Qualcomm SDM845),
- Hugsun X99 TV Box (Rockchip RK3399),
- Khadas Edge/Edge-V/Captain (Rockchip RK3399),
- HiHope RZ/G2M,
- NXP LS1021A-TSN.
Samtidig Latinamerikansk Stiftelse för Fritt Programvara
en variant â , rengjord frĂ„n firmware och drivrutiner som innehĂ„ller icke-fri komponenter eller kodavsnitt begrĂ€nsade av tillverkaren. I den nya versionen har laddning av blobar i qcom-drivrutiner, hdcp drm, allegro-dvt och meson-vdec stĂ€ngts av.
Rensningskoden för blobar i drivrutiner och underavsnitt som amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, ljuddrivare för skylake har uppdaterats, liksom dokumentationen för mikroprogrammet.
KĂ€lla: opennet.ru
