Lëshimi i kernelit Linux 5.9

Pas dy muajsh zhvillimi, Linus Torvalds paraqitur lëshimi i kernelit Linux 5.9. Ndër ndryshimet më të dukshme: kufizimi i importit të simboleve nga modulet pronësore në modulet GPL, përshpejtimi i operacioneve të ndërrimit të kontekstit duke përdorur udhëzimet e procesorit FSGSBASE, mbështetja për kompresimin e imazhit të kernelit duke përdorur Zstd, ripërpunimi i prioritizimit të threads në kernel, mbështetje për PRP (Protokolli i tepricës paralele), planifikimi i ndërgjegjshëm për gjerësinë e brezit në planifikuesin e afateve, paketimi parandalues ​​i faqeve të memories, flamuri i aftësisë CAP_CHECKPOINT_RESTOR, telefonata e sistemit të intervalit të ngushtë(), përmirësime të performancës së dm-crypt, heqja e kodit për të ftuarit e rinj të Xen PV 32-bit, mekanizmi i menaxhimit, opsioni "shpëtim" në Btrfs, mbështetje për enkriptimin inline në ext4 dhe F2FS.

Versioni i ri përfshin 16074 rregullime nga zhvilluesit e vitit 2011,
madhësia e patch - 62 MB (ndryshimet prekën 14548 skedarë, u shtuan 782155 rreshta kodi, u fshinë 314792 rreshta). Rreth 45% e të gjitha të paraqitura në 5.9
ndryshimet lidhen me drejtuesit e pajisjes, afërsisht 15% e ndryshimeve janë
qëndrimi ndaj përditësimit të kodit specifik për arkitekturat e harduerit, 13%
lidhur me stack-in e rrjetit, 3% me sistemet e skedarëve dhe 3% me të brendshme
nënsistemet e bërthamës.

Kryesore risitë:

  • Shërbimet e kujtesës dhe sistemit
    • Shtrënguar mbrojtje kundër përdorimit të shtresave GPL për lidhjen e drejtuesve të pronarit me komponentët e kernelit të eksportuar vetëm për modulet nën licencën GPL. Flamuri TAINT_PROPRIETARY_MODULE tani është trashëguar në të gjitha modulet që importojnë simbole nga modulet me këtë flamur. Nëse një modul GPL përpiqet të importojë simbole nga një modul jo-GPL, atëherë ai modul GPL do të trashëgojë etiketën TAINT_PROPRIETARY_MODULE dhe nuk do të jetë në gjendje të aksesojë komponentët e kernelit të disponueshëm vetëm për modulet e licencuara nga GPL, edhe nëse moduli ka importuar më parë simbole nga kategoria "gplonly". Bllokimi i kundërt (duke eksportuar vetëm EXPORT_SYMBOL_GPL në modulet që importuan EXPORT_SYMBOL_GPL), të cilat mund të prishin punën e drejtuesve të pronarit, nuk zbatohet (trashëgohet vetëm flamuri i modulit të pronarit, por jo lidhjet e GPL).
    • Shtuar mbështetje për motorin kcompactd për parapaketimi i faqeve të kujtesës në sfond për të rritur numrin e faqeve të memories të mëdha të disponueshme për kernel. Sipas vlerësimeve paraprake, paketimi në sfond, me koston e shpenzimeve minimale, mund të zvogëlojë vonesat gjatë ndarjes së faqeve të mëdha të memories (faqe të mëdha) me 70-80 herë në krahasim me mekanizmin e paketimit të përdorur më parë, i nisur kur lind nevoja (sipas kërkesës ). Për të vendosur kufijtë e fragmentimit të jashtëm që do të sigurojë kcompactd, është shtuar sysctl vm.compaction_proactiveness.
    • Shtuar mbështetje për kompresimin e imazhit të kernelit duke përdorur algoritmin Standarde (zstd).
    • Mbështetja për udhëzimet e procesorit është zbatuar për sistemet x86 FSGSBASE, i cili ju lejon të lexoni dhe ndryshoni përmbajtjen e regjistrave FS/GS nga hapësira e përdoruesit. Në kernel, FSGSBASE përdoret për të përshpejtuar operacionet e ndërrimit të kontekstit duke eliminuar operacionet e panevojshme të shkrimit MSR për GSBASE, dhe në hapësirën e përdoruesit shmang thirrjet e panevojshme të sistemit për të ndryshuar FS/GS.
    • Shtuar parametri "lejoj_shkruan" ju lejon të ndaloni ndryshimet në regjistrat MSR të procesorit nga hapësira e përdoruesit dhe të kufizoni aksesin në përmbajtjen e këtyre regjistrave për të lexuar operacionet, pasi ndryshimi i MSR mund të çojë në probleme. Si parazgjedhje, shkrimi nuk është ende i çaktivizuar dhe ndryshimet në MSR pasqyrohen në regjistër, por në të ardhmen është planifikuar të kaloni aksesin e paracaktuar në modalitetin vetëm për lexim.
    • Tek ndërfaqja asinkrone I/O io_uring U shtua mbështetje e plotë për operacionet e leximit me bufer asinkron që nuk kërkojnë thread-e të kernelit. Mbështetja e regjistrimit pritet në një version të ardhshëm.
    • Në afatin e programuesit I/O zbatuar planifikimi i bazuar në kapacitet, duke lejuar merrni vendime të sakta për sistemet asimetrike siç janë sistemet e bazuara në ARM DynamIQ dhe big.LITTLE, të cilat kombinojnë bërthama të fuqishme dhe më pak efikase të CPU-së me efikasitet energjetik në një çip. Në veçanti, modaliteti i ri ju lejon të shmangni mospërputhjet e planifikimit kur një bërthamë e ngadaltë CPU nuk ka burimet e duhura për të përfunduar një detyrë në kohë.
    • Modeli i konsumit të energjisë në kernel (korniza e Modelit të Energjisë) është tani përshkruan jo vetëm sjellja e konsumit të energjisë së CPU-së, por mbulon edhe pajisjet periferike.
    • Thirrja e sistemit close_range() është zbatuar për të lejuar një proces të mbyllë një gamë të tërë të përshkruesve të skedarëve të hapur menjëherë.
    • Nga zbatimi i tastierës së tekstit dhe drejtuesit të fbcon kodi u hoq, i cili ofron mundësinë për të lëvizur në mënyrë programore tekstin prapa (CONFIG_VGACON_SOFT_SCROLLBACK) me më shumë se sasia e kujtesës video në modalitetin e tekstit VGA.
    • E ripunuar algoritmi për caktimin e prioriteteve te thread-eve brenda kernelit. Opsioni i ri siguron qëndrueshmëri më të mirë në të gjitha nënsistemet e kernelit kur cakton prioritetet për detyrat në kohë reale.
    • U shtua sysctl sched_uclamp_util_min_rt_default për të kontrolluar cilësimet e rritjes së CPU-së për detyrat në kohë reale (për shembull, mund të ndryshoni sjelljen e detyrave në kohë reale në fluturim për të kursyer energji pas kalimit në fuqinë e baterisë ose në sistemet celulare).
    • Janë bërë përgatitje për të zbatuar mbështetjen për teknologjinë Transparent Huge Pages në cache-in e faqeve.
    • Motori fanotify zbaton flamuj të rinj FAN_REPORT_NAME dhe FAN_REPORT_DIR_FID për të raportuar emrin e prindit dhe informacionin unik FID kur ndodhin ngjarje të krijimit, fshirjes ose lëvizjes për artikujt e drejtorisë dhe objektet jo të drejtorisë.
    • Për cgrupet zbatuar një kontrollues i ri i memories së pllakave, i cili është i dukshëm për lëvizjen e kontabilitetit të pllakave nga niveli i faqes së kujtesës në nivelin e objektit të kernelit, i cili bën të mundur ndarjen e faqeve të pllakave në cgrupe të ndryshme, në vend që të alokohen cache të veçanta të pllakave për çdo cgroup. Qasja e propozuar bën të mundur rritjen e efikasitetit të përdorimit të pllakës, zvogëlimin e madhësisë së memories së përdorur për pllakën me 30-45%, uljen e ndjeshme të konsumit të përgjithshëm të memories së kernelit dhe zvogëlimin e fragmentimit të kujtesës.
    • Në nënsistemin e zërit ALSA и Grup USB, në përputhje me miratuar së fundmi rekomandime për përdorimin e terminologjisë gjithëpërfshirëse në kernelin Linux; termat politikisht të pasakta u pastruan. Kodi është pastruar nga fjalët "skllav", "master", "lista e zezë" dhe "lista e bardhë".
  • Virtualizimi dhe Siguria
    • Kur ndërtoni kernel duke përdorur përpiluesin Clang u shfaq aftësia për të konfiguruar (CONFIG_INIT_STACK_ALL_ZERO) inicializimin automatik në zero të të gjitha variablave të ruajtura në pirg (kur ndërtoni, specifikoni “-ftrivial-auto-var-init=zero”).
    • Në nënsistemin seccomp, kur përdorni modalitetin e kontrollit të procesit në hapësirën e përdoruesit, shtuar mundësi zëvendësimi i përshkruesve të skedarëve në procesin e monitoruar për të imituar plotësisht thirrjet e sistemit që çojnë në krijimin e përshkruesve të skedarëve. Funksionaliteti është i kërkuar në sistemet e kontejnerëve të izoluar dhe implementimet e sandbox për Chrome.
    • Për arkitekturat xtensa dhe csky, është shtuar mbështetje për kufizimin e thirrjeve të sistemit duke përdorur nënsistemin seccomp. Për xtensa, mbështetja për mekanizmin e auditimit zbatohet gjithashtu.
    • Shtuar flamuri i ri i aftësisë CAP_CHECKPOINT_RESTORE, i cili ju lejon të siguroni akses në aftësitë që lidhen me ngrirjen dhe rivendosjen e gjendjes së proceseve pa transferuar privilegje shtesë.
    • GCC 11 ofron të gjitha veçoritë që ju nevojiten
      mjet korrigjimi KCSAN (Kernel Concurrency Sanitizer), i krijuar për të zbuluar në mënyrë dinamike kushtet e garës brenda kernelit. Kështu, KCSAN tani mund të përdoret me kernelet e ndërtuara në GCC.

    • Për AMD Zen dhe modelet më të reja CPU shtuar mbështetje për teknologjinë P2PDMA, e cila ju lejon të përdorni DMA për transferimin e drejtpërdrejtë të të dhënave midis memories së dy pajisjeve të lidhura me autobusin PCI.
    • Një modalitet është shtuar në dm-crypt që ju lejon të reduktoni vonesën duke kryer përpunimin e të dhënave kriptografike pa përdorur radhët e punës. Kjo mënyrë është gjithashtu e nevojshme për funksionimin e duhur me zonuar bllok pajisje (pajisje me zona që duhet të shkruhen në mënyrë sekuenciale, duke përditësuar të gjithë grupin e blloqeve). Është bërë punë për të rritur xhiron dhe për të zvogëluar vonesën në dm-crypt.
    • Kodi u hoq për të mbështetur vizitorët 32-bit që funksionojnë në modalitetin e paravirtualizimit duke ekzekutuar hipervizorin Xen. Përdoruesit e sistemeve të tilla duhet të kalojnë në përdorimin e bërthamave 64-bit në mjediset e ftuar ose të përdorin mënyra të virtualizimit të plotë (HVM) ose të kombinuara (PVH) në vend të paravirtualizimit (PV) për të ekzekutuar mjediset.
  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • Në sistemin e skedarëve Btrfs zbatuar një opsion montimi "shpëtim" që unifikon aksesin në të gjitha opsionet e tjera të rikuperimit. Mbështetja për opsionet "alloc_start" dhe "subvolrootid" është hequr dhe opsioni "inode_cache" është zhvlerësuar. Janë bërë optimizime të performancës, veçanërisht duke shpejtuar dukshëm ekzekutimin e operacioneve fsync(). Shtuar aftësia për të përdorur lloje alternative të shumave kontrolluese të ndryshme nga CRC32c.
    • Shtuar aftësia për të përdorur enkriptimin inline (Inline Encryption) në sistemet e skedarëve ext4 dhe F2FS, për të mundësuar që ofrohet opsioni i montimit "inlinecrypt". Modaliteti i enkriptimit në linjë ju lejon të përdorni mekanizmat e enkriptimit të integruara në kontrolluesin e diskut, i cili kodon dhe deshifron në mënyrë transparente hyrjen/daljen.
    • Në XFS siguruar Rivendosja e inodes (flush) në një modalitet plotësisht asinkron që nuk bllokon proceset kur kryen një operacion pastrimi të kujtesës. Zgjidhet një problem i gjatë i kuotave që shkaktoi gjurmimin e gabuar të paralajmërimeve të kufirit të butë dhe kufirit inode. Implementimi i unifikuar i mbështetjes DAX për ext4 dhe xfs.
    • Në Ext4 zbatuar Parangarkimi i bitmap-ve të alokimit të bllokut. I kombinuar me skanimin kufizues të grupeve të pa inicializuara, optimizimi reduktoi kohën e nevojshme për montimin e ndarjeve shumë të mëdha.
    • Në F2FS shtuar ioctl F2FS_IOC_SEC_TRIM_FILE, i cili ju lejon të përdorni komandat TRIM/fshi për të rivendosur fizikisht të dhënat e specifikuara në një skedar, për shembull, për të fshirë çelësat e aksesit pa lënë të dhëna të mbetura në disk.
      Në F2FS gjithashtu shtuar modaliteti i ri i mbledhjes së mbeturinave GC_URGENT_LOW, i cili funksionon më agresivisht duke eliminuar disa kontrolle për të qenë në gjendje të papunë përpara se të ndizet mbledhësi i plehrave.

    • Në bcache, madhësia e kovës për shtrirjet është rritur nga 16 në 32 bit në përgatitje për aktivizimin e memorieve të zonuara të pajisjes.
    • Aftësia për të përdorur enkriptimin inline bazuar në enkriptimin e integruar të harduerit të ofruar nga kontrollorët UFS është shtuar në nënsistemin SCSI (Magazinimi Universal i Flash -it).
    • Është shtuar një parametër i ri i linjës komanduese të kernelit "debugfs", i cili ju lejon të kontrolloni disponueshmërinë e pseudo-FS me të njëjtin emër.
    • Klienti NFSv4.2 ofron mbështetje për atributet e skedarëve të zgjeruar (xattr).
    • Në dm-pluhur shtuar ndërfaqe për të shfaqur menjëherë një listë të të gjitha blloqeve të këqija të identifikuara në disk (“dmsetup message dust1 0 listbadblocks”).
    • Për md/raid5, parametri /sys/block/md1/md/stripe_size është shtuar për të konfiguruar madhësinë e bllokut STRIPE.
    • Për pajisjet ruajtëse NVMe shtuar mbështetje për komandat e zonimit të diskut (ZNS, NVM Express Zoned Namespace), e cila ju lejon të ndani hapësirën e ruajtjes në zona që përbëjnë grupe blloqesh për kontroll më të plotë mbi vendosjen e të dhënave në disk.
  • Nënsistemi i rrjetit
    • Në Netfilter shtuar aftësia për të refuzuar paketat në fazën përpara kontrollit të rrugëtimit (shprehja REJECT tani mund të përdoret jo vetëm në zinxhirët INPUT, FORWARD dhe OUTPUT, por edhe në fazën PREROUTING për icmp dhe tcp).
    • Në nftables shtuar aftësia për të audituar ngjarjet që lidhen me ndryshimet e konfigurimit.
    • Në nftables në API të netlink shtuar mbështetje për zinxhirët anonimë, emri i të cilave caktohet në mënyrë dinamike nga kerneli. Kur fshini një rregull të lidhur me një zinxhir anonim, vetë zinxhiri fshihet automatikisht.
    • BPF shton mbështetje për përsëritësit për të përshkuar, filtruar dhe modifikuar elementet e grupeve asociative (hartat) pa kopjuar të dhënat në hapësirën e përdoruesit. Iteratorët mund të përdoren për prizat TCP dhe UDP, duke i lejuar programet BPF të përsëriten mbi listat e prizave të hapura dhe të nxjerrin informacionin që u nevojitet prej tyre.
    • U shtua një lloj i ri i programit BPF BPF_PROG_TYPE_SK_LOOKUP, i cili niset kur kerneli kërkon një prizë të përshtatshme dëgjimi për një lidhje hyrëse. Duke përdorur një program BPF si ky, ju mund të krijoni mbajtës që marrin vendime se me cilën prizë duhet të lidhet një lidhje, pa u kufizuar nga thirrja e sistemit bind(). Për shembull, mund të lidhni një prizë të vetme me një sërë adresash ose portash. Përveç kësaj, mbështetja për flamurin SO_KEEPALIVE i është shtuar bpf_setsockopt() dhe është zbatuar aftësia për të instaluar mbajtësit BPF_CGROUP_INET_SOCK_RELEASE, të thirrur kur lirohet foleja.
    • Mbështetja e protokollit u zbatua PRP (Parallel Redundancy Protocol), i cili lejon kalimin e bazuar në Ethernet në një kanal rezervë, transparent për aplikacionet, në rast të dështimit të ndonjë komponenti të rrjetit.
    • Stack mac80211 shtuar mbështetje për negocimin e kanalit me katër faza WPA/WPA2-PSK në modalitetin e pikës së hyrjes.
    • U shtua aftësia për të ndërruar programuesin qdisc (disiplinë në radhë) për të përdorur si parazgjedhje algoritmin e menaxhimit të radhës së rrjetit FQ-PIE (Flow Queue PIE), që synon të zvogëlojë ndikimin negativ të bufferimit të ndërmjetëm të paketave në pajisjet e rrjetit skajor (bufferbloat) në rrjetet me modemet kabllore.
    • Karakteristika të reja janë shtuar në MPTCP (MultiPath TCP), zgjerime të protokollit TCP për organizimin e funksionimit të një lidhjeje TCP me dërgimin e paketave njëkohësisht përgjatë disa rrugëve përmes ndërfaqeve të ndryshme të rrjetit të lidhura me adresa IP të ndryshme. Mbështetje e shtuar për syn cookie-t, DATA_FIN, akordimin automatik të tamponit, diagnostikimin e prizës dhe flamujt REUSEADDR, REUSEPORT dhe V6ONLY në setsockopt.
    • Për tabelat e rrugëtimit virtual VRF (Virtual Routing and Forwarding), të cilat lejojnë organizimin e funksionimit të disa domeneve të rrugëtimit në një sistem, është zbatuar modaliteti "strikt". Në këtë mënyrë, një tabelë virtuale mund të shoqërohet vetëm me një tabelë rrugëtimi që nuk përdoret në tabela të tjera virtuale.
    • Shoferi me valë është ath11k shtuar mbështesin frekuencën 6 GHz dhe skanimi spektral.
  • Оборудование
    • Kodi i hequr për të mbështetur arkitekturën UniCore, i zhvilluar në Qendrën e Mikroprocesorëve të Universitetit të Pekinit dhe i përfshirë në kernelin Linux në 2011. Kjo arkitekturë është e pamirëmbajtur që nga viti 2014 dhe nuk ka mbështetje në GCC.
    • Mbështetja për arkitekturën RISC-V është zbatuar kcov (ndërfaqja e korrigjimit të gabimeve për analizimin e mbulimit të kodit të kernelit), kmemleak (sistemi i zbulimit të rrjedhjeve të memories), mbrojtja e stivës, shenjat e kërcimit dhe operacionet pa kontroll (duke kryer shumë detyra të pavarura nga sinjalet e kohëmatësit).
    • Për arkitekturën e PowerPC, është zbatuar mbështetje për radhët spinlock, gjë që ka përmirësuar ndjeshëm performancën në situatat e konfliktit të bllokimit.
    • Për arkitekturat ARM dhe ARM64, mekanizmi i rregullimit të frekuencës së procesorit është aktivizuar si parazgjedhje planifikimi (guvernator cpufreq), i cili përdor drejtpërdrejt informacionin nga planifikuesi i detyrave për të marrë një vendim për ndryshimin e frekuencës dhe mund të aksesojë menjëherë drejtuesit e cpufreq për të ndryshuar shpejt frekuencën, duke rregulluar në çast parametrat e funksionimit të CPU-së me ngarkesën aktuale.
    • Drejtuesi i i915 DRM për kartat grafike Intel përfshin mbështetje për çipat e bazuar në mikroarkitekturë Liqeni i raketave dhe shtoi mbështetjen fillestare për kartat diskrete Intel Xe DG1.
    • Shoferi Amdgpu shtoi mbështetjen fillestare për GPU-të AMD Navi 21 (Navy Flounder) dhe Navi 22 (Sienna Cichlid). Mbështetje e shtuar për motorët e përshpejtimit të kodimit dhe dekodimit të videove UVD/VCE për GPU-në e Ishujve Jugor (Radeon HD 7000).
      U shtua një veçori për të rrotulluar ekranin me 90, 180 ose 270 gradë.

      Interesante, shoferi për AMD GPU është drejtuesi më i madh në kernel - ai ka rreth 2.71 milion rreshta kodi, që është afërsisht 10% e madhësisë totale të kernelit (27.81 milion rreshta). Në të njëjtën kohë, 1.79 milion linja llogariten nga skedarët e kokës të gjeneruar automatikisht me të dhëna për regjistrat GPU, dhe kodi C është 366 mijë rreshta (për krahasim, drejtuesi i Intel i915 përfshin 209 mijë rreshta, dhe Nouveau - 149 mijë).

    • Shoferi në Nouveau shtuar mbështetje për kontrollin e integritetit kornizë për kornizë duke përdorur CRC (Kontrollet ciklike të tepricës) në motorët e ekranit GPU NVIDIA. Zbatimi bazohet në dokumentacionin e ofruar nga NVIDIA.
    • Drejtues të shtuar për panelet LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 dhe XBD599da.
    • Nënsistemi audio ALSA mbështet Intel Silent Stream (Modaliteti i vazhdueshëm i energjisë për pajisjet e jashtme HDMI për të eliminuar vonesën gjatë fillimit të riprodhimit) dhe pajisje e re për të kontrolluar ndriçimin e butonave të aktivizimit dhe heshtjes së mikrofonit, si dhe shtoi mbështetje për pajisje të reja, duke përfshirë një kontrollues Longson 7A1000.
    • Mbështetje e shtuar për bordet, pajisjet dhe platformat ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (përdoret në Sony Xperia 10, 10 X2, Xperia Plus2, 2, 2, Plus Ultra), Jetson Xavier NX, Amlogic WeTek Core6, Aspeed EthanolX, pesë borde të reja të bazuara në NXP i.MX3011, MikroTik RouterBoard 950, Xiaomi Libra, Microsoft Lumia 5, Sony Xperia Z5, MStar, Microchip Keep Bay, Intel. v3, Renesas RZ/G2H.

Në të njëjtën kohë, Fondacioni i Software-it të Lirë të Amerikës Latine formuar
alternativë kernel plotësisht i lirë 5.9 - Linux-Libre 5.9-Gnu, i pastruar nga elementët e firmuerit dhe drejtuesit që përmbajnë komponentë jo të lirë ose seksione kodi, fushëveprimi i të cilave është i kufizuar nga prodhuesi. Publikimi i ri çaktivizon ngarkimin e blob në drejtuesit për WiFi rtw8821c dhe SoC MediaTek mt8183. Kodi i përditësuar i pastrimit të blobit në drejtuesit dhe nënsistemet e ekranit me prekje Habanalabs, Wilc1000, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) dhe x86, amdgpu.

Burimi: opennet.ru

Shto një koment