Lëshimi i kernelit Linux 5.1

Pas dy muajsh zhvillimi, Linus Torvalds paraqitur lëshimi i kernelit Linux 5.1. Ndër ndryshimet më të dukshme: një ndërfaqe e re për io_uring asinkron I/O, aftësia për të përdorur NVDIMM si RAM, mbështetje për memorien virtuale të përbashkët në Nouveau, mbështetje për monitorimin e shkallëzuar të sistemeve skedarësh shumë të mëdhenj përmes fanotify, aftësia për të konfiguruar kompresimin Zstd nivelet në Btrfs, një mbajtës i ri cpuidle TEO, zbatimi i thirrjeve të sistemit për të zgjidhur problemin 2038, aftësia për të nisur nga pajisjet e hartës së pajisjes pa initramfs, moduli SafeSetID LSM, mbështetje për arna të kombinuara të drejtpërdrejta.

Kryesore risitë:

  • Nënsistemi i diskut, I/O dhe sistemet e skedarëve
    • Zbatuar një ndërfaqe të re për I/O asinkrone - io_uring, i cili dallohet për mbështetjen e tij për sondazhet në I/O dhe aftësinë për të punuar me ose pa buffering. Le të kujtojmë se mekanizmi "aio" asinkron I/O i propozuar më parë nuk mbështeti I/O me bufer, mund të funksiononte vetëm në modalitetin O_DIRECT (pa buffering dhe anashkaluar cache), kishte probleme me kyçjen për shkak të pritjes për disponueshmërinë e meta të dhënave, dhe shfaqi kosto të mëdha shpenzimesh për shkak të kopjimit të të dhënave në memorie.

      Brenda API
      Zhvilluesit e io_uring u përpoqën të eliminonin të metat e ndërfaqes së vjetër aio. Nga produktiviteti io_uring është shumë afër SPDK dhe është dukshëm përpara libaio-s kur punon me anketimin e aktivizuar. Është përgatitur një bibliotekë për përdorimin e io_uring në aplikacionet fundore që ekzekutohen në hapësirën e përdoruesit çlirues, i cili siguron një kornizë të nivelit të lartë mbi ndërfaqen e kernelit;

    • Në mekanizmin e gjurmimit të ngjarjeve në FS fanotify() shtuar mbështetje për gjurmimin e situatave të superbllokut dhe ndryshimit të strukturës dirent (ngjarjet e krijimit, fshirjes dhe zhvendosjes së drejtorive). Veçoritë e paraqitura ndihmojnë në zgjidhjen e problemeve të shkallëzueshmërisë që lindin kur krijohet gjurmimi i ndryshimeve rekursive në sisteme skedarësh shumë të mëdhenj duke përdorur mekanizmin inotify (ndryshimet direkte më parë mund të gjurmoheshin vetëm përmes inotify, por
      performanca në kushtet e gjurmimit rekurziv të drejtorive të mëdha të mbivendosur la shumë për të dëshiruar). Tani një monitorim i tillë mund të bëhet në mënyrë efektive përmes fanotify;

    • Në sistemin e skedarëve Btrfs shtuar aftësia për të personalizuar nivelin e kompresimit për algoritmin zstd, i cili mund të konsiderohet si një kompromis optimal midis lz4 të shpejtë por joefektiv dhe kompresimit të ngadaltë por të mirë xz. Në analogji me mënyrën se si ishte e mundur më parë të vendosej niveli i kompresimit kur përdorni zlib, mbështetja për opsionin e montimit “-o compress=zstd:nivel” është shtuar për zstd. Gjatë testimit, niveli minimal i parë siguroi ngjeshje të të dhënave me 2.658 herë me një shpejtësi kompresimi prej 438.47 MB/s, shpejtësi dekompresimi 910.51 MB/s dhe konsum memorie prej 780 MB, dhe niveli maksimal 15 ofroi 3.126 herë, por me një kompresim. shpejtësia 37.30 MB/s, shpaketimi 878.84 MB/s dhe konsumi i memories 2547 MB;
    • Shtuar aftësia për të nisur nga një sistem skedar i vendosur në pajisjen e hartës së pajisjes, pa përdorur initramfs. Duke filluar me lëshimin aktual të kernelit, pajisjet e hartës së pajisjes mund të përdoren drejtpërdrejt gjatë procesit të nisjes, për shembull, si një ndarje me sistemin e skedarëve rrënjë. Ndarja është konfiguruar duke përdorur parametrin e nisjes "dm-mod.create". Modulet e hartës së pajisjes të lejuara për ngarkim përfshijnë: "kripta", "vonesa", "lineare", "origjina e pamjes së çastit" dhe "vërtetësia";
    • Flamuri F2FS_NOCOW_FL është shtuar në sistemin e skedarëve F2FS të orientuar drejt disqeve Flash, i cili ju lejon të çaktivizoni modalitetin e kopjimit në shkrim për një skedar të caktuar;
    • Sistemi i skedarëve u hoq nga kerneli Exofs, i cili është një variant i ext2, i përshtatur për të punuar me ruajtje të objekteve OSD (Object-based Storage Device). Mbështetja për protokollin SCSI për pajisje të tilla për ruajtjen e objekteve është hequr gjithashtu;
  • Virtualizimi dhe Siguria
    • U shtua opsioni PR_SPEC_DISABLE_NOEXEC në prctl() për të kontrolluar ekzekutimin spekulativ të udhëzimeve për procesin e zgjedhur. Një opsion i ri ju lejon të çaktivizoni në mënyrë selektive ekzekutimin spekulativ për proceset që potencialisht mund të sulmohen nga një sulm Spectre. Kyçja zgjat deri në thirrjen e parë në exec();
    • Moduli i implementuar LSM SafeSetID, i cili lejon shërbimet e sistemit të menaxhojnë në mënyrë të sigurt përdoruesit pa privilegje të përshkallëzuara (CAP_SETUID) dhe pa fituar privilegje rrënjësore. Privilegjet caktohen duke përcaktuar rregullat në sigurime bazuar në një listë të bardhë të lidhjeve të vlefshme (në formën "UID1:UID2");
    • Ndryshime të shtuara të nivelit të ulët të kërkuara për ngarkimin e moduleve të sigurisë (LSM) me bazë stek. Prezantoi opsionin e nisjes së kernelit "lsm" për të kontrolluar se cilat module ngarkohen dhe në çfarë rendi;
    • Mbështetja për hapësirat e emrave të skedarëve është shtuar në nënsistemin e auditimit;
    • Zgjeruar aftësitë e structleak të shtojcës GCC, e cila ju lejon të bllokoni rrjedhjet e mundshme të përmbajtjes së kujtesës Ofrohet inicializimi i çdo variabla që përdoret në kod përmes aksesit të referencës në stek;
  • Nënsistemi i rrjetit
    • Për priza zbatuar opsioni i ri "SO_BINDTOIFINDEX" i ngjashëm me
      "SO_BINDTODEVICE", por duke marrë si argument numrin e indeksit të ndërfaqes së rrjetit në vend të emrit të ndërfaqes;

    • Stacki mac80211 ka shtuar mundësinë për të caktuar disa BSSID (adresa MAC) në një pajisje. Si pjesë e një projekti për të optimizuar performancën WiFi, steka mac80211 ka shtuar llogaritjen e kohës së transmetimit dhe aftësinë për të shpërndarë kohën e transmetimit midis stacioneve të shumta (kur funksionon në modalitetin e pikës së hyrjes, duke caktuar më pak kohë transmetimi për stacionet e ngadalta wireless, në vend që të shpërndahet koha në mënyrë të barabartë midis të gjithëve stacione);
    • Mekanizmi i shtuar "devlink shëndetësor", i cili jep njoftime kur shfaqen probleme me ndërfaqen e rrjetit;
  • Shërbimet e kujtesës dhe sistemit
    • Zbatuar shpërndarje e sigurt e sinjalit që lejon ripërdorimin e PID. Për shembull, kur thirret vrasja më parë, mund të krijohet një situatë ku, menjëherë pas dërgimit të një sinjali, PID-i i synuar mund të lirohet për shkak të përfundimit të procesit dhe të pushtohet nga një proces tjetër, dhe sinjali do të përfundonte duke kaluar në një proces tjetër. Për të eliminuar situata të tilla, është shtuar një thirrje e re sistemi pidfd_send_signal, e cila përdor përshkruesit e skedarëve nga /proc/pid për të siguruar lidhje të qëndrueshme të procesit. Edhe nëse PID ripërdoret gjatë përpunimit të thirrjeve të sistemit, përshkruesi i skedarit nuk do të ndryshojë dhe mund të përdoret në mënyrë të sigurt për të dërguar një sinjal në proces;
    • Shtuar aftësia për të përdorur pajisje të memories së përhershme (memorie e vazhdueshme, për shembull NVDIMM) si RAM. Deri më tani, kerneli mbështeti pajisje të tilla si pajisje ruajtëse, por tani ato mund të përdoren edhe si RAM shtesë. Funksioni zbatohet në përgjigje të dëshirave të përdoruesve që janë të gatshëm të përballojnë një vonesë të performancës dhe duan të përdorin API-në vendase të menaxhimit të kujtesës së kernelit Linux në vend që të përdorin sistemet ekzistuese të alokimit të hapësirës së përdoruesit që funksionojnë në krye të mmap për dax dosje;
    • U shtua një mbajtës i ri i funksionit të CPU-së (cpuidle, vendos kur CPU-ja mund të vendoset në modalitete të thella të kursimit të energjisë; sa më i thellë të jetë modaliteti, aq më të mëdha janë kursimet, por edhe aq më shumë kohë duhet për të dalë nga modaliteti) - TEO (Guvernatori i Orientuar për Ngjarjet me kohëmatësin) ). Deri më tani, janë propozuar dy mbajtës të cpuidle - "menu" dhe "shkallë", që ndryshojnë në heuristikë. Trajtuesi i "menusë" ka probleme të njohura me marrjen e vendimeve heuristike, për të eliminuar të cilat u vendos të përgatitej një mbajtës i ri. TEO pozicionohet si një alternativë ndaj mbajtësit të "menusë", duke lejuar performancë më të lartë duke ruajtur të njëjtin nivel të konsumit të energjisë.
      Mund të aktivizoni mbajtësin e ri duke përdorur parametrin e nisjes “cpuidle.governor=teo”;

    • Si pjesë e punës për të eliminuar problemet e vitit 2038, i shkaktuar nga një tejmbushje e tipit time_t 32-bit, përfshin thirrjet e sistemit që ofrojnë numërues kohorë 32-bit për arkitekturat 64-bit. Si rezultat, struktura 64-bit time_t tani mund të përdoret në të gjitha arkitekturat. Ndryshime të ngjashme janë zbatuar edhe në nënsistemin e rrjetit për opsionet timestamp prizat e rrjetit;
    • Në sistemin e korrigjimit të nxehtë për bërthamën (patching drejtpërdrejt) shtuar Funksioni "Zëvendësimi Atomik" për aplikimin atomik të një sërë ndryshimesh në një funksion të vetëm. Kjo veçori ju lejon të shpërndani arna përmbledhëse që mbulojnë disa ndryshime njëherësh, në vend të procesit të aplikimit hap pas hapi të arnimeve të drejtpërdrejta në një rend të përcaktuar rreptësisht, gjë që është mjaft e vështirë për t'u ruajtur. Ndërsa më parë çdo ndryshim i mëvonshëm duhej të bazohej në gjendjen e funksionit pas ndryshimit të fundit, tani është e mundur të përhapen disa ndryshime të lidhura me një gjendje fillestare në të njëjtën kohë (d.m.th., mirëmbajtësit mund të mbajnë një copëz të konsoliduar në lidhje me kernelin bazë. të një zinxhiri arnash që varen nga njëra-tjetra);
    • I shpallur mbështetje e vjetëruar për formatin e skedarit të ekzekutueshëm a.out dhe
      fshihet kodi për gjenerimin e skedarëve bazë në formatin a.out, i cili është në një gjendje të braktisur. Formati a.out nuk është përdorur në sistemet Linux për një kohë të gjatë dhe gjenerimi i skedarëve a.out ka qenë prej kohësh i pambështetur nga mjetet moderne në konfigurimet e paracaktuara të Linux. Për më tepër, ngarkuesi për skedarët a.out mund të zbatohet tërësisht në hapësirën e përdoruesit;

    • Aftësia për të identifikuar dhe hequr kodin e papërdorur është shtuar në mekanizmin e verifikimit të programit BPF. Kerneli përfshin gjithashtu arna me mbështetje spinlock për nënsistemin BPF, duke ofruar aftësi shtesë për menaxhimin e ekzekutimit paralel të programeve BPF;
  • Оборудование
    • Shoferi në Nouveau shtuar mbështetje për menaxhimin heterogjen të memories, duke lejuar CPU-në dhe GPU-në të hyjnë në zonat e zakonshme të memories së sinkronizuar. Sistemi i përbashkët i memories virtuale (SVM, memorie virtuale e përbashkët) zbatohet në bazë të nënsistemit HMM (Menaxhimi heterogjen i kujtesës), i cili lejon përdorimin e pajisjeve me njësitë e tyre të menaxhimit të memories (MMU, njësia e menaxhimit të memories), të cilat mund të kenë qasje memoria kryesore. Në veçanti, duke përdorur HMM, mund të organizoni një hapësirë ​​​​të përbashkët adresash midis GPU-së dhe CPU-së, në të cilën GPU-ja mund të aksesojë memorien kryesore të procesit. Mbështetja SVM aktualisht është e aktivizuar vetëm për GPU-të e familjes Pascal, megjithëse mbështetja ofrohet edhe për GPU-të Volta dhe Turing. Për më tepër, në Nouveau shtuar ioctl i ri për të kontrolluar migrimin e zonave të memories së procesit në memorien GPU;
    • Në shoferin Intel DRM për GPU Skylake dhe më vonë (gen9+) përfshirë Si parazgjedhje, modaliteti fastboot eliminon ndryshimet e panevojshme të modalitetit gjatë nisjes. Shtuar новые identifikuesit e pajisjes bazuar në mikroarkitekturat e Coffelake dhe Ice Lake. Për patate të skuqura Coffelake shtuar Mbështetje GVT (Virtualizimi i GPU-së). Për GPU-të virtuale zbatuar Mbështetje VFIO EDID. Për panelet LCD MIPI/DSI shtuar mbështetje për elementët ACPI/PMIC. Zbatuar mënyrat e reja të televizorit 1080p30/50/60 TV;
    • Mbështetje e shtuar për Vega10/20 BACO GPU në drejtuesin amdgpu. Zbatuar tabelat e kontrollit të menaxhimit të energjisë Vega 10/20 dhe ftohësit Vega 10. U shtuan identifikuesit e rinj të pajisjes PCI për GPU-të Picasso. Shtuar ndërfaqe për menaxhimin e varësive të planifikuara për të shmangur bllokimet;
    • Shtuar Drejtues DRM/KMS për përshpejtuesit e ekranit ARM Komeda (Mali D71);
    • Mbështetje e shtuar për panelet e ekranit Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 dhe Kingdisplay kd097d04;
    • Mbështetje e shtuar për kodekët audio Rockchip RK3328, Cirrus Logic CS4341 dhe CS35L36, MediaTek MT6358, Qualcomm WCD9335 dhe Ingenic JZ4725B, si dhe platformën audio Mediatek MT8183;
    • Mbështetje e shtuar për kontrollorët NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Mbështetje e shtuar e përshpejtuesit për sistemet harduerike Habana AI;
    • Mbështetje e shtuar për kontrollorët Ethernet gigabit NXP ENETC dhe ndërfaqet me valë MediaTek MT7603E (PCIe) dhe MT76x8.

Në të njëjtën kohë, Fondacioni i Software-it të Lirë të Amerikës Latine formuar
alternativë kernel plotësisht i lirë 5.1 - Linux-Libre 5.1-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. Në versionin e ri, ngarkimi i blob është i çaktivizuar në drejtuesit mt7603 dhe goya. Kodi i përditësuar i pastrimit të blobit në drejtuesit dhe nënsistemet wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk dhe touchscreen_dmi. Pastrimi i blobit në ngarkuesin e firmuerit lantiq xrx200 është ndalur për shkak të heqjes së tij nga kerneli.

Burimi: opennet.ru

Shto një koment