Linux 6.1 -ytimen julkaisu

Kahden kuukauden kehitystyön jälkeen Linus Torvalds esitteli Linux-ytimen 6.1:n julkaisun. Merkittävimpiä muutoksia: tuki ajurien ja moduulien kehittämiseen Rust-kielellä, käytettyjen muistisivujen määritysmekanismin modernisointi, erityinen muistinhallinta BPF-ohjelmille, järjestelmä muistiongelmien diagnosointiin KMSAN, KCFI (Kernelk Control) -Flow Integrity) suojamekanismi, Maple-rakennepuun käyttöönotto.

Uusi versio sisältää 15115 2139 korjausta 51 2 kehittäjältä, korjaustiedoston koko on 6.0 MB, mikä on noin 5.19 kertaa pienempi kuin ytimien 13165 ja 716247 korjaustiedostot. Muutokset vaikuttivat 304560 45 tiedostoon, 6.1 14 koodiriviä lisättiin ja 14 3 riviä poistettiin. Noin 3 % kaikista XNUMX:ssä tehdyistä muutoksista liittyy laiteajureihin, noin XNUMX % muutoksista liittyy laitteistoarkkitehtuurikohtaiseen koodin päivittämiseen, XNUMX % liittyy verkkopinoon, XNUMX % liittyy tiedostojärjestelmiin ja XNUMX %. liittyvät sisäisiin ytimen alijärjestelmiin.

Tärkeimmät innovaatiot ytimessä 6.1:

  • Muisti- ja järjestelmäpalvelut
    • Lisätty mahdollisuus käyttää Rustia toisena kielenä ohjaimien ja ydinmoduulien kehittämiseen. Pääasiallinen syy Rustin tukemiseen on turvallisten ja laadukkaiden laiteajureiden kirjoittamisen helpottaminen vähentämällä virheiden todennäköisyyttä työskennellessäsi muistin kanssa. Ruosteen tuki on oletusarvoisesti poistettu käytöstä, eikä se johda ruosteen sisällyttämiseen vaadittavana ytimen koontiriippuvuutena. Ydin on toistaiseksi omaksunut korjaustiedostojen minimaalisen, riisutun version, joka on vähennetty 40 tuhannesta koodirivistä 13 tuhanteen ja tarjoaa vain tarvittavan vähimmäismäärän, joka riittää yksinkertaisen Rust-kielellä kirjoitetun ydinmoduulin rakentamiseen. Jatkossa on tarkoitus lisätä asteittain olemassa olevaa toiminnallisuutta siirtämällä muut muutokset Rust-for-Linux-haaraan. Samanaikaisesti kehitetään projekteja ehdotetun infrastruktuurin käyttämiseksi ajurien kehittämiseen NVMe-asemille, 9p-verkkoprotokollalle ja Apple M1 GPU:lle Rust-kielellä.
    • Järjestelmiin, jotka perustuvat AArch64-, RISC-V- ja LoongArch-arkkitehtuureihin EFI:llä, on otettu käyttöön kyky ladata suoraan pakatut ytimen kuvat. Lisätty käsittelijät ytimen kuvien lataamiseen, suorittamiseen ja purkamiseen, kutsutaan suoraan EFI zbootista. Käsittelijät protokollien asentamiseen ja poistamiseen EFI-protokollatietokannasta on myös lisätty. Aiemmin pakkauksen purkaminen suoritettiin erillisellä käynnistyslataimella, mutta nyt sen voi tehdä itse ytimessä oleva käsittelijä - ytimen näköistiedosto muodostetaan EFI-sovelluksena.
    • Koostumus sisältää osan korjauksista, joissa on toteutettu monitasoinen muistinhallintamalli, jonka avulla voit erottaa muistipankit, joilla on erilaiset suorituskykyominaisuudet. Esimerkiksi eniten käytetyt sivut voidaan tallentaa nopeimpaan muistiin, kun taas harvemmin käytetyt sivut voidaan tallentaa suhteellisen hitaaseen muistiin. Kernel 6.1 esittelee mekanismin, jolla määritetään, missä paljon käytetyt sivut sijaitsevat hitaassa muistissa, jotta ne voidaan ylentää nopeaksi muistiksi, ja esittelee myös yleisen käsitteen muistitasoista ja niiden suhteellisesta suorituskyvystä.
    • Se sisältää MGLRU (Multi-Generational LRU) -mekanismin, joka korvaa vanhan kahteen jonoon perustuvan LRU (Least Recently Used) -toteutuksen monivaiheisella rakenteella, joka määrittää paremmin, mitkä muistisivut ovat todella käytössä ja mitkä voidaan työntää ulos swap-osio.
    • Lisätty tuki Oraclen insinöörien ehdottamalle "vaahterapuu" -tietorakenteelle, joka on sijoitettu tehokkaammin korvaamaan "punamusta puu" -rakenne. Maple tree on B-treen muunnos, joka tukee alueindeksiä ja on suunniteltu hyödyntämään tehokkaasti nykyaikaisten prosessorien välimuistia. Osa muistinhallinnan osajärjestelmistä on jo siirretty vaahterapuuhun, mikä on vaikuttanut positiivisesti niiden suorituskykyyn. Jatkossa vaahterapuuta voidaan käyttää alueen lukituksen toteuttamiseen.
    • Mahdollisuus luoda "tuhoisia" BPF-ohjelmia, jotka on erityisesti suunniteltu käynnistämään hätäpysäytys kutsun crash_kexec() kautta, on lisätty BPF-alijärjestelmään. Tällaisia ​​BPF-ohjelmia voidaan tarvita virheenkorjaustarkoituksiin, jotta kaatumisvedos voidaan luoda tietyllä hetkellä. Jotta voit käyttää tuhoisia operaatioita BPF-ohjelmaa ladattaessa, sinun on määritettävä BPF_F_DESTRUCTIVE-lippu, aktivoitava sysctl kernel.destructive_bpf_enabled ja oltava CAP_SYS_BOOT-oikeudet.
    • BPF-ohjelmissa on mahdollista luetella cgroup-elementtejä sekä luetella tietyn säikeen tai tehtävän resurssit (tiedostot, vma, prosessit jne.). Uusi karttatyyppi on otettu käyttöön käyttäjäsoittopuskureiden luomiseksi.
    • Lisätty erityiskutsu muistin varaamiseen BPF-ohjelmissa (muistivaraaja), joka tarjoaa turvallisemman muistin varauksen BPF-kontekstissa kuin tavallinen kmalloc().
    • Ensimmäinen osa muutoksista on integroitu, mikä tarjoaa mahdollisuuden luoda ajureita syöttölaitteisiin, joissa on HID (Human Interface Device) -liitäntä, joka on toteutettu BPF-ohjelmien muodossa.
    • Ydin on poistanut kokonaan koodin tukeakseen a.out-suoritettavaa tiedostomuotoa, joka vanhentui julkaisussa 5.1 ja on poistettu käytöstä tärkeimmissä arkkitehtuureissa versioista 5.18 ja 5.19 lähtien. A.out-muoto on jo pitkään ollut vanhentunut Linux-järjestelmissä, ja nykyaikaiset työkalut eivät tue a.out-tiedostojen luomista Linuxin oletuskokoonpanoissa. A.out-tiedostojen latausohjelma voidaan toteuttaa kokonaan käyttäjätilassa.
    • Järjestelmissä, jotka perustuvat Loongson 3 5000 -prosessoreissa käytettyyn LoongArch-käskysarjaarkkitehtuuriin ja jotka toteuttavat uuden RISC ISA:n, joka on samanlainen kuin MIPS ja RISC-V, tuki suorituskyvyn mittaustapahtumille (perf-tapahtumat), kexec, kdump ja BPF JIT -käännös. .
    • Asynkroninen io_uring I/O-rajapinta tarjoaa uuden tilan, IORING_SETUP_DEFER_TASKRUN, joka mahdollistaa soittopuskuriin liittyvän työn väliaikaisen lykkäämisen, kunnes sovelluspyyntö on tehty. Sitä voidaan käyttää erätyöskentelyyn ja ennaltaehkäisystä johtuvien latenssiongelmien välttämiseen. väärä aika.
    • Käyttäjätilassa oleville prosesseille annetaan mahdollisuus käynnistää normaalien muistisivujen muuntaminen suuriksi muistisivuiksi (Transparent Huge-Pages).
    • Lisätty /dev/userfaultfd-laitteen toteutus, joka mahdollistaa pääsyn userfaultfd()-järjestelmäkutsun toimintoihin käyttämällä käyttöoikeuksia FS:ssä. userfaultfd-toiminnon avulla voit luoda käsittelijöitä, joilla päästään käyttäjätilassa oleville varaamattomille muistisivuille (sivuvirheille).
    • GNU Make -apuohjelman version vaatimuksia on korotettu - ytimen rakentamiseen tarvitaan nyt vähintään versio 3.82.
  • Levyalijärjestelmä, I/O ja tiedostojärjestelmät
    • Btrfs-tiedostojärjestelmään on tehty merkittäviä suorituskykyoptimointeja, mm. FIEMAP ioctl -kutsun suorituskykyä on parannettu suuruusluokkaa. Lisätty tuki asynkroniselle puskuroidulle kirjoitukselle sovelluksille, jotka käyttävät io_uring-funktiota. Lisätty tuki fs-verityllä suojatuille tiedostoille "lähetä"-toimintoon.
    • Ext4-tiedostojärjestelmä on lisännyt suorituskyvyn optimointeja, jotka liittyvät lokien ylläpitoon ja vain luku -toimintoon.
    • EROFS (Enhanced Read-Only File System) -tiedostojärjestelmä, joka on suunniteltu käytettäväksi vain luku -tilassa käytettävissä olevissa osioissa, toteuttaa mahdollisuuden jakaa eri tiedostojärjestelmissä kopioituja tietoja.
    • Statx()-järjestelmäkutsu on lisätty näyttämään tietoja siitä, voidaanko suoraa I/O:ta käyttää tiedostoon.
    • FUSE (Filesystems in User Space) -alijärjestelmään on lisätty tuki väliaikaisten tiedostojen luomiselle O_TMPFILE-lipulla.
  • Virtualisointi ja turvallisuus
    • CFI (Control Flow Integrity) -suojausmekanismin toteutus on korvattu lisäämällä tarkistukset ennen jokaista funktion epäsuoraa kutsua havaitakseen tietyt määrittelemättömän toiminnan muodot, jotka voivat mahdollisesti johtaa normaalin suoritusjärjestyksen (ohjausvirran) rikkomiseen. seurausta hyväksikäytöstä, joka muuttaa osoittimia muistiin tallennettuihin toimintoihin. LLVM-projektin CFI:n standarditoteutus on korvattu vaihtoehdolla, joka perustuu myös Clangin käyttöön, mutta on erityisesti mukautettu suojaamaan matalan tason alijärjestelmiä ja käyttöjärjestelmän ytimiä. LLVM:ssä uusi toteutus tarjotaan Clang 16 -julkaisussa, ja se otetaan käyttöön "-fsanitize=kcfi"-vaihtoehdolla. Keskeinen ero uuteen toteutukseen verrattuna on, että se ei ole sidottu linkkiaikaoptimointiin (LTO) eikä se johda toimintoosoittimien korvaamiseen linkeillä hyppytaulukossa.
    • LSM-moduuleille (Linux Security Module) on mahdollista luoda käsittelijöitä, jotka sieppaavat toimintoja nimitilojen luomiseksi.
    • Tarjolla on työkaluja PKCS#7-digitaalisen allekirjoituksen tarkistamiseen BPF-ohjelmissa.
    • Mahdollisuus avata estotilassa (O_NONBLOCK), joka vahingossa poistettiin ytimessä 5.6, on palautettu kansioon /dev/random.
    • Järjestelmiin, joissa on x86-arkkitehtuuri, on lisätty varoitus, jos ytimen alijärjestelmä kartoittaa muistisivuja, jotka samanaikaisesti sallivat suorituksen ja kirjoittamisen. Tulevaisuudessa harkitaan mahdollisuutta kieltää tällainen muistikartoitus kokonaan.
    • Lisätty KMSAN (Kernel Memory Sanitizer) -virheenkorjausmekanismi, joka havaitsee alustamattoman muistin käytön ytimessä sekä alustamattomat muistivuodot käyttäjätilan ja laitteiden välillä.
    • Getrandom-puhelussa käytettyyn salausturvalliseen CRNG-pseudosatunnaislukugeneraattoriin on tehty parannuksia. Muutokset valmisteli VPN WireGuardin kirjoittaja Jason A. Donenfeld, ja niillä pyritään parantamaan näennäissatunnaisten kokonaislukujen poiminnan turvallisuutta.
  • Verkkoalijärjestelmä
    • TCP-pino tarjoaa mahdollisuuden (oletusarvoisesti poissa käytöstä) käyttää socket hash -taulukoita erikseen jokaiselle nimiavaruudelle, mikä parantaa suorituskykyä järjestelmissä, joissa on paljon nimiavaruuksia.
    • Koodi poistettiin tukemaan vanhaa DECnet-protokollaa. Käyttäjätilan API-osat jätetään paikoilleen, jotta DECnetiä käyttävät sovellukset voidaan kääntää, mutta nämä sovellukset eivät voi muodostaa yhteyttä verkkoon.
    • Netlink-protokolla on dokumentoitu.
  • Оборудование
    • Amdgpu-ohjain on lisännyt tuen DSC- (Display Stream Compression) -edelleenlähetykselle häviötöntä tietojen pakkaamista varten, kun tietoja vaihdetaan erittäin korkeaa resoluutiota tukevien näyttöjen kanssa. Työ jatkuu AMD RDNA3 (RX 7000)- ja CDNA (Instinct) -alustojen tukemiseksi. Lisätty tuki DCN 3.2-, SMU 13.x-, NBIO 7.7-, GC 11.x-, PSP 13.x-, SDMA 6.x- ja GMC 11.x IP -komponenteille. Amdkfd-ohjain (erillisille AMD GPU:ille, kuten Polaris) tukee GFX 11.0.3 -versiota.
    • i915 (Intel) -ohjain sisältää tuen Meteor Lake GPU:lle. Meteor Lake ja uudemmat GPU:t tukevat DP 2.0 (DisplayPort) -liitäntää. Lisätty tunnisteet näytönohjainkortteille, jotka perustuvat Alder Lake S -mikroarkkitehtuuriin.
    • Lisätty tuki Apple Silicon-, Intel SkyLake- ja Intel KabyLake -prosessoreihin toteutetuille äänialijärjestelmille. CS35L41 HDA -ääniohjain tukee lepotilaa. Lisätty ASoC (ALSA System on Chip) -tuki integroiduille äänisiruille Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake ja Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280SM8250X8450, Qualcomm SC4392XXNUMX SMXNUMX ja Texas Instruments SRCXNUMX
    • Lisätty tuki LCD-paneeleille Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-1BO116E B01.6ACA-116NT21. N116, INX N2BCA- EA116, INX N1BCN-EA0800, Multi-Inno-tekniikka MI9FT-XNUMX.
    • Lisätty tuki AHCI SATA -ohjaimille, joita käytetään Baikal-T1 SoC:ssa.
    • Lisätty tuki Bluetooth-siruille MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), Realtek RTL8852C, RTW8852AE ja RTL8761BUV (Edimax BT-8500).
    • Qualcommin langattomien moduulien ath11k-ohjain on lisännyt tuen spektrisen skannaukseen 160 MHz:n alueella, toteuttanut monisäikeisen NAPI:n ja parannetun tuen Qualcomm WCN6750 Wi-Fi -siruille.
    • Lisätty ajurit PinePhone-näppäimistölle, InterTouch-kosketuslevyille (ThinkPad P1 G3), X-Box Adaptive Controllerille, PhoenixRC-lentoohjaimelle, VRC-2-autoohjaimelle, DualSense Edge -ohjaimelle, IBM-käyttöpaneelille, XBOX One Elite -kaukosäätimille, tableteille XP-PEN Deco Pro S ja Intuos Pro Small (PTH-460).
    • Lisätty ohjain Aspeed HACE (Hash and Crypto Engine) -salauksen kiihdyttimille.
    • Lisätty tuki integroiduille Thunderbolt/USB4 Intel Meteor Lake -ohjaimille.
    • Lisätty tuki Sony Xperia 1 IV-, Samsung Galaxy E5-, E7- ja Grand Max-, Pine64 Pinephone Pro -älypuhelimille.
    • Lisätty tuki ARM SoC:lle ja korteille: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 ja RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQQ8062 S8065/8, IPQQ8195 S4/4 BL i.MX1MM OSM-S, MTXNUMX (Acer Tomato), Radxa ROCK XNUMXC+, NanoPi RXNUMXS Enterprise Edition, JetHome JetHub DXNUMXp. Päivitetyt ajurit SoC Samsungille, Mediatekille, Renesasille, Tegralle, Qualcommille, Broadcomille ja NXP:lle.

Samaan aikaan Latinalaisen Amerikan Free Software Foundation muodosti version täysin ilmaisesta ytimestä 6.1 - Linux-libre 6.1-gnu, josta oli poistettu laiteohjelmistoelementit ja ajurit, jotka sisältävät ei-vapaita komponentteja tai koodin osia, joiden laajuus on valmistajan rajoittama. Uusi julkaisu puhdistaa uuden rtw8852b-ohjaimen ja DTS-tiedostot erilaisille Qualcomm- ja MediaTek SoC:ille AArch64-arkkitehtuuriin perustuvilla prosessoreilla. Päivitetty blob-puhdistuskoodi ohjaimissa ja alijärjestelmissä amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Vanhentuneiden ajureiden tm6000 TV-korttien, cpia2 v4l, sp8870, av7110 puhdistus on korjattu.

Lähde: opennet.ru

Lisää kommentti