Linux 5.3 -ytimen julkaisu

Kahden kuukauden kehitystyön jälkeen Linus Torvalds toimitettu ytimen julkaisu Linux 5.3. Merkittävimpiä muutoksia ovat: tuki AMD Navi -grafiikkasuorittimille, Zhaoxi-prosessoreille ja Intel Speed ​​​​Select -virranhallintateknologialle, mahdollisuus käyttää umwait-ohjeita odottamaan ilman jaksoja,
"Utilisation clamping" -tila, joka lisää interaktiivisuutta epäsymmetrisille prosessoreille, pidfd_open-järjestelmäkutsu, mahdollisuus käyttää IPv4-osoitteita 0.0.0.0/8-aliverkosta, mahdollisuus nftables-laitteistokiihdytykseen, HDR-tuki DRM-alijärjestelmässä, ACRN:n integrointi hypervisor.

В ilmoitus uudessa julkaisussa Linus muistutti kaikkia kehittäjiä ytimen kehittämisen pääsäännöstä - saman käyttäytymisen ylläpitämisestä käyttäjätilan komponenteille. Ytimen muutokset eivät saa millään tavalla rikkoa jo käynnissä olevia sovelluksia tai johtaa regressioihin käyttäjätasolla. Tässä tapauksessa käyttäytymisen rikkominen voi aiheuttaa paitsi ABI:n muutoksen, vanhentuneen koodin poistamisen tai virheiden ilmaantumisen, myös epäsuoran vaikutuksen hyödyllisistä parannuksista, jotka toimivat oikein. Havainnollistavana esimerkkinä oli hylätty hyödyllinen optimointi Ext4-koodissa, joka vähentää aseman käyttöjen määrää poistamalla käytöstä inode-taulukon esilukemisen pienille I/O-pyynnöille.

Optimointi johti siihen, että levyaktiviteetin vähentymisen vuoksi satunnaislukugeneraattorin getrandom() entropia alkoi kerääntyä hitaammin ja joissain kokoonpanoissa, tietyissä olosuhteissa, latauksen aikana voitiin havaita jäätymiä, kunnes entropiapooli oli loppunut. täytetty. Koska optimointi on todella hyödyllinen, kehittäjien kesken syntyi keskustelu, jossa ehdotettiin ongelman korjaamista poistamalla getrandom()-kutsun oletusestotila ja lisäämällä valinnainen lippu odottamaan entropiaa, mutta tällainen muutos vaikuttaisi satunnaislukujen laatu latauksen alkuvaiheessa.

Uusi versio sisältää 15794 1974 korjausta XNUMX XNUMX kehittäjältä,
korjaustiedoston koko - 92 Mt (muutokset vaikuttivat 13986 tiedostoon, 258419 koodiriviä lisättiin,
599137 riviä poistettu). Noin 39 % kaikista 5.3
muutokset liittyvät laiteajureihin, noin 12 % muutoksista on
asenne laitteistoarkkitehtuurikohtaisen koodin päivittämiseen, 11 %
liittyvät verkkopinoon, 3 % tiedostojärjestelmiin ja 3 % sisäisiin
ytimen alijärjestelmät.

Pääasiallinen innovaatioita:

  • Muisti- ja järjestelmäpalvelut
    • Jatkuva pidfd-toiminnallisuuden kehittäminen PID-uudelleenkäyttötilanteiden käsittelemiseksi (pidfd liittyy tiettyyn prosessiin eikä muutu, kun taas PID voidaan liittää toiseen prosessiin sen jälkeen, kun tähän PID:hen liittyvä nykyinen prosessi päättyy). Se lisättiin aiemmin ytimeen
      pidfd_send_signal()-järjestelmäkutsu ja CLONE_PIDFD-lippu klooni()-kutsussa saadakseen pidfd:n käytettäväksi idfd_send_signal()-funktiossa. Clone():n käyttäminen CLONE_PIDFD-lipun kanssa voi aiheuttaa ongelmia palvelunhaltijoille tai Android-alustan muistin loppumisen pakottavalle lopetusjärjestelmälle. Tässä tapauksessa aloitukseen käytetään kutsua fork()- tai clone()-funktioon ilman CLONE_PIDFD:tä.

      Kernel 5.3 esitteli järjestelmäkutsun pidfd_open(), jonka avulla voit saada tarkistettavan pidfd:n mielivaltaiselle olemassa olevalle prosessille, jota ei luotu kutsumalla clone() CLONE_PIDFD-lipulla. Lisäksi lisätty tuki pidfd-kyselylle poll()- ja epoll()-toiminnoilla, mikä mahdollistaa prosessien johtajien jäljittää mielivaltaisten prosessien päättymisen ilman kilpailutilanteen pelkoa, jos PID on määritetty uudelle prosessille. Mekanismi ilmoittaa, kun pidfd:hen liittyvä prosessi on päättynyt, on samanlainen kuin ilmoitus, kun sen aliprosessi on päättynyt;

    • Tehtävän ajoittimeen on lisätty tuki kuorman kiinnitysmekanismille (Käyttökiinnitys), jonka avulla voit noudattaa minimi- tai maksimitaajuusalueita suorittimen aktiivisista tehtävistä riippuen. Esitetty mekanismi nopeuttaa suoraan käyttökokemuksen laatuun vaikuttavia tehtäviä suorittamalla näitä tehtäviä ainakin ”pyydetyn” taajuuden alimmalla tasolla. Matalan prioriteetin tehtävät, jotka eivät vaikuta käyttäjän työhön, käynnistetään käyttämällä ”sallitun” taajuuden ylärajaa. Rajat asetetaan attribuuttien sched_uclamp_util_min ja sched_uclamp_util_max avulla järjestelmäkutsussa sched_setattr().
    • Lisätty tuki energianhallintateknologialle Intel Speed ​​​​Select, saatavana valituilla palvelimilla, joissa on Intel Xeon -suorittimet. Tämän tekniikan avulla voit määrittää suorituskyvyn ja osion suorituskyvyn asetukset eri prosessoriytimille, mikä mahdollistaa suorituskyvyn priorisoinnin tietyissä ytimissä suoritetuissa tehtävissä, mikä uhraa muiden ytimien suorituskyvyn.
    • Prosessit käyttäjätilassa myönnetty kyky odottaa lyhyen ajan käyttämättä silmukoita umwait-ohjeen avulla. Tämä ohje yhdessä umonitor- ja t-tauko-ohjeiden kanssa tarjotaan Intelin tulevissa "Tremont"-siruissa, ja se mahdollistaa viiveiden toteuttamisen, jotka ovat energiatehokkaita eivätkä vaikuta muiden säikeiden suorituskykyyn käytettäessä Hyper Threading -toimintoa.
    • RISC-V-arkkitehtuuriin on lisätty tuki suurille muistisivuille;
    • Kprobes-jäljitysmekanismi on lisännyt mahdollisuuden purkaa ytimen osoittimia käyttäjätilaan, jota voidaan käyttää esimerkiksi järjestelmäkutsuille välitettyjen rakenteiden sisällön arvioimiseen. Mahdollisuus asentaa tarkistuksia käynnistysvaiheessa on myös lisätty.
    • Lisätty PREEMPT_RT-vaihtoehto asetustiedostoon reaaliaikaista toimintaa varten. Itse reaaliaikaista tilaa tukevaa koodia ei ole vielä lisätty ytimeen, mutta vaihtoehdon ilmestyminen on hyvä merkki siitä, että pitkäaikainen eepos liittäminen Realtime-Preempt -korjaukset ovat valmistumassa;
    • Lisätty clone3()-järjestelmäkutsu, jossa on toteutettu laajennettavissa oleva versio klone()-rajapinnasta, mikä mahdollistaa suuremman määrän lippuja määrittämisen;
    • Lisätty bpf_send_signal()-käsittelijä, jonka avulla BPF-ohjelmat voivat lähettää signaaleja mielivaltaisiin prosesseihin;
    • Perf-tapahtumiin KVM-hypervisor-ympäristössä on lisätty uusi tapahtumien suodatusmekanismi, jonka avulla järjestelmänvalvoja voi määrittää tapahtumatyypit, jotka ovat sallittuja ja joita ei sallita valvoa vierasjärjestelmän puolella;
    • eBPF-sovelluksen varmistusmekanismiin on lisätty mahdollisuus käsitellä ohjelmia silmukoilla, jos silmukan suoritus on rajoitettu eikä se voi johtaa ohjeiden enimmäismäärän rajan ylittämiseen;
  • Levyalijärjestelmä, I/O ja tiedostojärjestelmät
    • XFS-tiedostojärjestelmä tukee nyt monisäikeistä inodien ohitusta (esimerkiksi kiintiöitä tarkistettaessa). Uudet ioctls BULKSTAT ja INUMBERS on lisätty, mikä tarjoaa pääsyn FS-muodon viidennessä painoksessa esiintyviin ominaisuuksiin, kuten inodin syntymäaika ja mahdollisuus asettaa BULKSTAT- ja INUMBERS-parametrit kullekin AG-ryhmälle (allokaatioryhmät);
    • Ext4:ssä tuki lisätty tyhjät kohdat hakemistoissa (linkittämättömät lohkot).
      Käsittely tarjotaan lippu “i” (muuttumaton) avoimille tiedostoille (kirjoittaminen on kielletty tilanteessa, jos lippu on asetettu ajankohtana, jolloin tiedosto oli jo auki);

    • Btrfs tarjoaa määritelmän crc32c:n nopeasta toteutuksesta kaikissa arkkitehtuureissa;
    • CIFS:ssä smbdirect-tuen koodi on poistettu kokeellisena kehitystyönä. SMB3 lisäsi mahdollisuuden käyttää salausalgoritmeja GCM-tilassa. Lisätty uusi asennusvaihtoehto tilaparametrien poimimiseksi ACE (Access Control Entry) -merkinnöistä. Optimoitu open()-kutsun suorituskyky;
    • Lisätty vaihtoehto F2FS:ään rajoittaa roskienkerääjä ajettaessa checkpoint=disable-tilassa. Lisätty ioctl lohkoalueiden poistamiseksi F2FS:stä, mikä mahdollistaa osion koon muuttamisen lennossa. Lisätty mahdollisuus sijoittaa sivutustiedosto F2FS:ään suoran I/O:n tarjoamiseksi. Lisätty tuki tiedoston kiinnittämiseen ja samankaltaisten tiedostojen lohkojen allokointiin kaikille käyttäjille;
    • Lisätty tuki asynkronisille operaatioille sendmsg() ja recvmsg() asynkronisen tulon/lähdön io_uring-liittymään;
    • UBIFS-tiedostojärjestelmään on lisätty tuki zstd-algoritmia käyttävälle pakkaamiselle ja mahdollisuus tarkistaa allekirjoitetut FS-kuvat.
    • Ceph FS tukee nyt tiedostojen SELinux-tietoturvatunnisteita;
    • NFSv4:lle on otettu käyttöön uusi asennusvaihtoehto “nconnect=”, joka määrittää palvelimeen muodostettujen yhteyksien määrän. Liikenne näiden yhteyksien välillä jaetaan kuormituksen tasapainotuksella. Lisäksi NFSv4-palvelin luo nyt hakemiston /proc/fs/nfsd/clients, jossa on tietoja nykyisistä asiakkaista, mukaan lukien tiedot niiden avaamista tiedostoista;
  • Virtualisointi ja turvallisuus
    • Ydin sisältää hypervisorin sulautetuille laitteille ACRN, joka on kirjoitettu silmällä pitäen valmiutta reaaliaikaisiin tehtäviin ja soveltuvuutta käytettäväksi kriittisissä järjestelmissä. ACRN tarjoaa minimaalisen lisärasituksen, takaa alhaisen latenssin ja riittävän vasteen vuorovaikutuksessa laitteiden kanssa. Tukee suoritinresurssien virtualisointia, I/O:ta, verkkoalijärjestelmää, grafiikkaa ja äänitoimintoja. ACRN:ää voidaan käyttää useiden erillisten virtuaalikoneiden ajamiseen elektronisissa ohjausyksiköissä, kojelaudoissa, autojen tietojärjestelmissä, kuluttajien IoT-laitteissa ja muussa sulautetussa tekniikassa;
    • Käyttäjätilassa Linux lisätty Aikamatkustustila, jonka avulla voit hidastaa tai nopeuttaa aikaa virtuaalisessa UML-ympäristössä helpottaaksesi aikaan liittyvän koodin virheenkorjausta. Lisäksi on lisätty parametri
      time-travel-start, joka mahdollistaa järjestelmän kellon alkamisen tietystä hetkestä epoch-muodossa;

    • Uudet ytimen komentorivivaihtoehdot "init_on_alloc" ja "init_on_free" on lisätty, kun ne on määritetty, varattujen ja vapautettujen muistialueiden nollaus on käytössä (täyttö nolilla mallocille ja freeille), mikä mahdollistaa paremman turvallisuuden ylimääräisten alustuskustannusten vuoksi.
    • Uusi kuljettaja lisätty virtio-iommu paravirtualisoidulla laitteella, jonka avulla voit lähettää IOMMU-pyyntöjä, kuten ATTACH, DETACH, MAP ja UNMAP, virtio-kuljetuksen kautta emuloimatta muistisivutaulukoita;
    • Uusi kuljettaja lisätty virtio-pmem, joka edustaa pääsyä fyysiseen osoiteavaruuteen yhdistettyihin tallennuslaitteisiin, kuten NVDIMM:eihin;
    • Toteutettu mahdollisuus liittää salausavaimia käyttäjän tai verkon nimiavaruuteen (avaimet eivät ole käytettävissä valitun nimitilan ulkopuolella) sekä suojata avaimia ACL-luetteloilla;
    • Salausalajärjestelmään lisätty tuki erittäin nopealle ei-salaukselliselle hajautusalgoritmille xxhash, jonka nopeus riippuu muistin suorituskyvystä;
  • Verkkoalijärjestelmä
    • Sallittu IPv4-osoitteiden käsittely alueella 0.0.0.0/8, joka ei ollut aiemmin käytettävissä. Tämän aliverkon esittely sallii jakaa vielä 16 miljoonaa IPv4-osoitetta;
    • Netfilter for nftables lisätty tuki laitteistokiihdytysmekanismeille pakettisuodatusta varten lisättyjen ohjaimien avulla Flow Block API. Verkkosovittimien viereen voidaan sijoittaa kokonaisia ​​sääntötaulukoita, joissa on kaikki ketjut. Käyttöönotto tehdään sitomalla lippu NFT_TABLE_F_HW taulukkoon. Tukee yksinkertaisia ​​Layer 3- ja Layer 4 -protokollan metatietoja, hyväksy/hylkää toimintoja, kartoituksia IP:n ja lähettäjän/vastaanottimen verkkoporttien ja protokollatyypin mukaan;
    • lisätty sisäänrakennettu yhteydenseurantatuki verkkosilloille, mikä ei vaadi br_netfilter-emulointikerroksen käyttöä;
    • Kohdassa nf_tables lisätty tuki SYNPROXY-moduulille, joka toistaa samanlaisia ​​toimintoja iptablesista, ja mahdollisuus tarkistaa säännöt yksittäisille IPv4-otsikon valinnaille on myös toteutettu;
    • Lisätty mahdollisuus liittää BPF-ohjelmia setsockopt()- ja getsockopt()-järjestelmäkutsuihin, mikä mahdollistaa esimerkiksi oman pääsykäsittelijän liittämisen näihin kutsuihin. Lisäksi on lisätty uusi hälytyspiste (hook), jolla voit järjestää puhelun BPF-ohjelmaan kerran kutakin RTT-aikaväliä kohden (paluuaika, ping-aika);
    • IPv4:lle ja IPv6:lle lisätty uusi nexthop-reititystietojen tallennusmekanismi, jonka tavoitteena on lisätä reititystaulukoiden skaalautuvuutta. Testit osoittivat, että uutta järjestelmää käytettäessä 743 tuhannen reitin sarja ladattiin ytimeen vain 4.3 sekunnissa;
    • Bluetoothille toteutettu LE pingin tukemiseen tarvittavat toiminnot;
  • Оборудование
    • lisätty tuki yrityksen x86-yhteensopiville prosessoreille Zhaoxin, joka on kehitetty VIA Technologiesin ja Shanghain kunnan yhteishankkeen tuloksena. ZX-suoritinperhe on rakennettu x86-64 Isaiah-arkkitehtuurille, mikä jatkaa tekniikan kehitystä VIA Centaur;
    • DRM-alijärjestelmä (Direct Rendering Manager) sekä amdgpu- ja i915-grafiikkaohjaimet ovat lisänneet tuen HDR-metadatan jäsentämiseen, käsittelyyn ja lähettämiseen HDMI-portin kautta, mikä mahdollistaa HDR-paneelien ja -näyttöjen käytön. lisäkirkkausalueiden näyttäminen;
    • Amdgpu-ohjain on lisännyt alkuperäisen tuen AMD NAVI GPU:lle (RX5700), joka sisältää perusohjaimen, näytön vuorovaikutuskoodin (DCN2), GFX- ja laskentatuen (GFX10),
      SDMA 5 (System DMA0), virranhallinta ja multimediakooderit/dekooderit (VCN2). amdgpu myös parantaa tukea Vega12- ja Vega20-grafiikkasuorittimiin perustuville korteille, joihin on lisätty muistia ja virranhallintaominaisuuksia;

    • Lisätty tuki VegaM-grafiikkasuorittimiin perustuville korteille amdkfd-ohjaimeen (erillisille GPU:ille, kuten Fiji, Tonga, Polaris);
    • Intelin näytönohjainkorttien DRM-ohjaimessa Icelake-siruille toteutettu uusi monisegmenttinen gammakorjaustila. Lisätty mahdollisuus tulostaa DisplayPortin kautta YCbCr4:2:0-muodossa. Uusi laiteohjelmisto lisätty GuC SKL:lle, BXT:lle, KBL:lle, GLK:lle ja ICL:lle. Mahdollisuus sammuttaa näytön virta asynkronisessa tilassa on otettu käyttöön. lisätty tuki Ironlake (gen5)- ja gen4 (Broadwater - Cantiga) -sirujen renderöintikontekstin tallentamiseen ja palauttamiseen, jonka avulla voit palauttaa GPU-tilan käyttäjätilasta siirryttäessä eräoperaatiosta toiseen;
    • Nouveau-ohjain tunnistaa NVIDIA Turing TU116 -piirisarjan;
    • DRM/KMS-ajurin ominaisuuksia ARM Komeda -näytönkiihdyttimille (Mali D71) on laajennettu, tuki skaalaukselle, tasojen jakamiselle/yhdistämiselle, rotaatiolle, viivästetylle kirjoitukselle, AFBC:lle, SMMU:lle ja värikoodausmuodoille Y0L2, P010, YUV420_8/10BIT. lisätty;
    • MSM-ohjain lisää tuen A540 GPU Adreno -sarjalle, jota käytetään Qualcomm-prosessoreissa, sekä tuen MSM8998 DSI -ohjaimelle Snapdragon 835:lle;
    • Lisätty ajurit LCD-paneeleille Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 ja VXT VL050-8048NT-C01;

    • lisättyä ohjain, joka mahdollistaa dekoodauksen kiihdytystyökalut
      videot saatavilla Amlogic Meson SoC;

    • V3d-ohjaimessa (Raspberry Pi:ssä käytetylle Broadcom Video Core V GPU:lle) ilmestyi tukea laskentavarjostimien lähettäminen;
    • lisättyä ohjain SPI-näppäimistöille ja ohjauslevyille, joita käytetään Applen MacBook- ja MacBookPro-kannettavien nykyaikaisissa malleissa;
    • lisätty lisäsuojaus levykeohjaimeen liittyville ioctl-kutsuille, ja itse ohjain on merkitty ylläpitämättömäksi
      ("orpo"), mikä tarkoittaa sen testauksen lopettamista. Ajuri on edelleen tallennettu ytimeen, mutta sen oikeaa toimintaa ei taata. Ohjainta pidetään vanhentuneena, koska sen testaamiseen on vaikea löytää työlaitteita - kaikki nykyiset ulkoiset asemat käyttävät yleensä USB-liitäntää.

    • lisättyä cpufreq-ohjain Raspberry Pi -levyille, jonka avulla voit hallita dynaamisesti prosessorin taajuuden muutoksia;
    • Lisätty tuki uudelle ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) ja Amlogic G12B (4x Cortex-A73 +-2) A53 ), sekä taulut:
      • Purism Librem5,
      • 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.

Samaan aikaan Latinalaisen Amerikan Free Software Foundation muodostettu
вариант täysin ilmainen kernel 5.3 - Linux-vapaa 5.3-gnu, puhdistettu laiteohjelmistosta ja ajurielementeistä, jotka sisältävät ei-vapaita komponentteja tai koodiosia, joiden laajuutta valmistaja rajoittaa. Uudessa versiossa blob-lataus on poistettu käytöstä qcom-, hdcp-drm-, allegro-dvt- ja meson-vdec-ajureissa.
Päivitetty blob-puhdistuskoodi ohjaimissa ja alijärjestelmissä amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, Skylaken ääniohjain sekä mikrokoodidokumentaatiossa.

Lähde: opennet.ru

Lisää kommentti