Izdanje kernela Linux 5.1

Nakon dva mjeseca razvoja, Linus Torvalds uveo izdanje kernela Linux 5.1. Među najznačajnijim promjenama: novo sučelje za asinhroni I/O io_uring, mogućnost korištenja NVDIMM-a kao RAM-a, podrška za dijeljenu virtuelnu memoriju u Nouveau-u, podrška za skalabilno praćenje veoma velikih sistema datoteka putem fanotify-a, mogućnost konfigurisanja Zstd kompresije nivoi u Btrfs-u, novi cpuidle TEO rukovalac, implementacija sistemskih poziva za rešavanje problema 2038, mogućnost pokretanja sa uređaja-mapper uređaja bez initramfs-a, SafeSetID LSM modul, podrška za kombinovane žive zakrpe.

Glavni inovacije:

  • Diskovni podsistem, I/O i sistemi datoteka
    • Implementirano novo sučelje za asinhroni I/O - io_uring, koji je poznat po svojoj podršci za I/O polling i mogućnosti rada sa ili bez baferovanja. Podsjetimo da ranije predloženi asinhroni I/O mehanizam “aio” nije podržavao baferirani I/O, mogao je raditi samo u O_DIRECT modu (bez baferovanja i zaobilaženja keša), imao je problema sa zaključavanjem zbog čekanja na dostupnost metapodataka i pokazao velike režijske troškove zbog kopiranja podataka u memoriju.

      Unutar API-ja
      io_uring programeri su pokušali da eliminišu nedostatke starog aio interfejsa. By produktivnost io_uring je veoma blizu SPDK i značajno je ispred libaio kada radi sa omogućenim glasanjem. Pripremljena je biblioteka za korištenje io_uringa u krajnjim aplikacijama koje rade u korisničkom prostoru liburing, koji obezbeđuje okvir visokog nivoa preko interfejsa kernela;

    • U mehanizmu za praćenje događaja u FS fanotify() dodano podrška za praćenje situacija promjene superblokova i strukture dirent (događaji kreiranja, brisanja i premještanja direktorija). Predstavljene karakteristike pomažu u rješavanju problema skalabilnosti koji nastaju prilikom kreiranja rekurzivnog praćenja promjena u vrlo velikim sistemima datoteka pomoću mehanizma inotify (dirent promjene su se ranije mogle pratiti samo putem inotify, ali
      performanse u uslovima rekurzivnog praćenja velikih ugnežđenih direktorijuma ostavljaju mnogo da se požele). Sada se takvo praćenje može efikasno obaviti kroz fanotify;

    • Na sistemu datoteka Btrfs dodano mogućnost prilagođavanja nivoa kompresije za zstd algoritam, što se može smatrati optimalnim kompromisom između brzog, ali neefikasnog lz4 i spore ali dobre kompresije xz. Po analogiji sa načinom na koji je ranije bilo moguće podesiti nivo kompresije kada se koristi zlib, dodata je podrška za opciju montiranja “-o compress=zstd:level” za zstd. Tokom testiranja, minimalni prvi nivo obezbedio je kompresiju podataka za 2.658 puta sa brzinom kompresije od 438.47 MB/s, brzinom dekompresije od 910.51 MB/s i potrošnjom memorije od 780 MB, a maksimalni nivo 15 je obezbedio 3.126 puta, ali sa kompresijom brzina 37.30 MB/s, raspakivanje 878.84 MB/s i potrošnja memorije 2547 MB;
    • Dodano mogućnost pokretanja sa sistema datoteka koji se nalazi na uređaju za mapiranje uređaja, bez upotrebe initramfs-a. Počevši od trenutnog izdanja kernela, uređaji za mapiranje uređaja mogu se direktno koristiti tokom procesa pokretanja, na primjer, kao particija s korijenskim sistemom datoteka. Particija se konfiguriše pomoću parametra pokretanja “dm-mod.create”. Moduli za mapiranje uređaja koji su dozvoljeni za učitavanje uključuju: “kripta”, “kašnjenje”, “linearno”, “snapshot-origin” i “verity”;
    • F2FS_NOCOW_FL zastavica je dodata sistemu datoteka F2FS orijentisanom prema Flash diskovima, što vam omogućava da onemogućite režim kopiranja na upisivanje za dati fajl;
    • Sistem datoteka uklonjen iz kernela Exofs, koji je varijanta ext2, prilagođen za rad sa OSD (Object-based Storage Device) skladištima objekata. Podrška za SCSI protokol za takve uređaje za skladištenje objekata je također uklonjena;
  • Virtuelizacija i sigurnost
    • Dodata opcija PR_SPEC_DISABLE_NOEXEC u prctl() za kontrolu spekulativnog izvršavanja instrukcija za odabrani proces. Nova opcija vam omogućava da selektivno onemogućite spekulativno izvršenje za procese koji bi potencijalno mogli biti napadnuti Spectre napadom. Zaključavanje traje do prvog poziva exec();
    • Implementiran LSM modul SafeSetID, koji omogućava sistemskim uslugama da bezbedno upravljaju korisnicima bez eskalacije privilegija (CAP_SETUID) i bez dobijanja root privilegija. Privilegije se dodeljuju definisanjem pravila u securityfs-u na osnovu bele liste važećih veza (u obliku “UID1:UID2”);
    • Dodate promjene niskog nivoa potrebne za učitavanje sigurnosnih modula (LSM) bazirano na steku. Uvedena "lsm" opcija pokretanja kernela za kontrolu koji se moduli učitavaju i kojim redoslijedom;
    • Podsistemu revizije je dodana podrška za prostore imena datoteka;
    • Prošireno mogućnosti GCC dodatka structleak, koji vam omogućava da blokirate potencijalno curenje memorijskog sadržaja Obezbeđena je inicijalizacija svih varijabli koje se koriste u kodu putem referentnog pristupa na steku;
  • Mrežni podsistem
    • Za utičnice implementirano nova opcija "SO_BINDTOIFINDEX" slična
      "SO_BINDTODEVICE", ali uzimajući kao argument broj indeksa mrežnog sučelja umjesto imena interfejsa;

    • Mac80211 stog je dodao mogućnost dodjeljivanja više BSSID-ova (MAC adresa) jednom uređaju. Kao dio projekta za optimizaciju WiFi performansi, mac80211 stack je dodao računanje vremena emitiranja i mogućnost distribucije vremena emitiranja između više stanica (kada radi u načinu pristupne tačke, dodjeljujući manje vremena prijenosa sporim bežičnim stanicama, umjesto ravnomjerne distribucije vremena između svih stanice);
    • Dodan mehanizam "devlink zdravlje", koji daje obaveštenja kada se pojave problemi sa mrežnim interfejsom;
  • Memorijski i sistemski servisi
    • Implementirano sigurna isporuka signala koja omogućava ponovnu upotrebu PID-a. Na primjer, prilikom prethodnog pozivanja kill-a, mogla bi se pojaviti situacija u kojoj bi, odmah nakon slanja signala, ciljni PID mogao biti oslobođen zbog završetka procesa i zauzet drugim procesom, a signal bi na kraju bio proslijeđen drugom procesu. Da bi se eliminisale takve situacije, dodat je novi sistemski poziv pidfd_send_signal, koji koristi deskriptore fajlova iz /proc/pid kako bi osigurao stabilno povezivanje procesa. Čak i ako se PID ponovo koristi tokom obrade sistemskog poziva, deskriptor datoteke se neće promeniti i može se bezbedno koristiti za slanje signala procesu;
    • Dodano mogućnost korištenja trajnih memorijskih uređaja (trajna memorija, na primjer NVDIMM) kao RAM. Do sada je kernel podržavao takve uređaje kao uređaje za skladištenje podataka, ali sada se mogu koristiti i kao dodatni RAM. Funkcija je implementirana kao odgovor na želje korisnika koji su voljni podnijeti zaostajanje u performansama i žele koristiti izvorni API za upravljanje memorijom jezgre Linuxa umjesto korištenja postojećih sistema dodjele memorije korisničkog prostora koji rade na vrhu mmap-a za dax fajl;
    • Dodan je novi rukovalac u stanju mirovanja CPU-a (cpuidle, odlučuje kada se CPU može staviti u režime duboke uštede energije; što je dublji režim, veća je ušteda, ali i duže je potrebno da se izađe iz režima) - TEO (Timer Events Oriented Governor ). Do sada su predložena dva rukovatelja cpuidle - "menu" i "ladder", koji se razlikuju u heuristici. Rukovalac "menija" ima poznate probleme sa donošenjem heurističkih odluka, da bi se eliminisali, odlučeno je da se pripremi novi rukovalac. TEO je pozicioniran kao alternativa "meniju" rukovatelju, omogućavajući veće performanse uz održavanje istog nivoa potrošnje energije.
      Možete aktivirati novi rukovalac pomoću parametra pokretanja “cpuidle.governor=teo”;

    • U sklopu rada na eliminaciji problemi 2038, uzrokovano prekoračenjem 32-bitnog tipa time_t, uključuje sistemske pozive koji nude 32-bitne brojače vremena za 64-bitne arhitekture. Kao rezultat, 64-bitna time_t struktura sada se može koristiti na svim arhitekturama. Slične promjene su također implementirane u mrežni podsistem za opcije timestamp mrežne utičnice;
    • U sistem vrućeg zakrpanja za jezgru (živo zakrpanje) dodano Funkcija "Atomic Replace" za atomsku primjenu niza promjena na jednu funkciju. Ova funkcija vam omogućava da distribuirate sažete zakrpe koje pokrivaju nekoliko promjena odjednom, umjesto procesa postupne primjene živih zakrpa po strogo definiranom redoslijedu, koji je prilično teško održavati. Dok je ranije svaka sljedeća promjena morala biti zasnovana na stanju funkcije nakon posljednje promjene, sada je moguće propagirati nekoliko promjena vezanih za jedno početno stanje odjednom (tj. umjesto toga održavatelji mogu održavati jednu konsolidovanu zakrpu u odnosu na osnovno jezgro lanca zakrpa koje zavise jedna od druge);
    • Najavljeno zastarjela podrška za format izvršne datoteke a.out i
      uklonjeno kod za generiranje osnovnih datoteka u a.out formatu, koji je u napuštenom stanju. Format a.out se dugo nije koristio na Linux sistemima, a generiranje a.out datoteka dugo nije bilo podržano od strane modernih alata u zadanim Linux konfiguracijama. Dodatno, učitavač za a.out datoteke može se u potpunosti implementirati u korisnički prostor;

    • Mogućnost identifikacije i uklanjanja neiskorištenog koda dodata je mehanizmu za verifikaciju BPF programa. Kernel takođe uključuje zakrpe sa podrškom za spinlock za BPF podsistem, pružajući dodatne mogućnosti za upravljanje paralelnim izvršavanjem BPF programa;
  • Oprema
    • In Nouveau vozač dodano podrška za heterogeno upravljanje memorijom, omogućavajući CPU-u i GPU-u da pristupe zajedničkim sinhronizovanim memorijskim područjima. Zajednički virtuelni memorijski sistem (SVM, shared virtual memory) implementiran je na bazi HMM (Heterogeneous memory management) podsistema, koji omogućava korištenje uređaja s vlastitim jedinicama za upravljanje memorijom (MMU, memory management unit), kojima se može pristupiti glavna memorija. Konkretno, koristeći HMM, možete organizirati zajednički adresni prostor između GPU-a i CPU-a, u kojem GPU može pristupiti glavnoj memoriji procesa. SVM podrška je trenutno omogućena samo za Pascal familije GPU-a, iako je podrška obezbeđena i za Volta i Turing GPU-ove. Štaviše, u Nouveauu dodano novi ioctl za kontrolu migracije područja procesne memorije u GPU memoriju;
    • U Intel DRM drajveru za GPU Skylake i novije (gen9+) uključeno Fastboot režim podrazumevano eliminiše nepotrebne promene režima tokom pokretanja. Dodano новые identifikatori uređaja zasnovani na mikroarhitekturama Coffelake i Ice Lake. Za Coffelake čips dodano GVT podrška (GPU virtuelizacija). Za virtuelne GPU implementirano VFIO EDID podrška. Za LCD panele MIPI/DSI dodano podrška za ACPI/PMIC elemente. Implementirano novi TV modovi 1080p30/50/60 TV;
    • Dodata podrška za Vega10/20 BACO GPU za amdgpu drajver. Implementirano upravljanje napajanjem Vega 10/20 i kontrolne tablice hladnjaka Vega 10. Dodani su novi identifikatori PCI uređaja za Picasso GPU-ove. Dodano sučelje za upravljanje ovisnostima koje se mogu rasporediti radi izbjegavanja zastoja;
    • Dodano DRM/KMS drajver za akceleratore ekrana ARM Komeda (Mali D71);
    • Dodata podrška za Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 i Kingdisplay kd097d04 ekranske panele;
    • Dodata podrška za Rockchip RK3328, Cirrus Logic CS4341 i CS35L36, MediaTek MT6358, Qualcomm WCD9335 i Ingenic JZ4725B audio kodeke, kao i Mediatek MT8183 audio platformu;
    • Dodata podrška za NAND kontrolere Flash STMicroelectronics FMC2, Amlogic Meson;
    • Dodata podrška za akcelerator za Habana AI hardverske sisteme;
    • Dodata podrška za NXP ENETC gigabit Ethernet kontrolere i MediaTek MT7603E (PCIe) i MT76x8 bežične interfejse.

Istovremeno, Latinoamerička fondacija za slobodni softver formirana
opcija potpuno besplatan kernel 5.1 - Linux-libre 5.1-gnu, očišćen od firmvera i elemenata upravljačkog programa koji sadrže neslobodne komponente ili dijelove koda, čiji je opseg ograničen od strane proizvođača. U novom izdanju, blob učitavanje je onemogućeno u drajverima mt7603 i goya. Ažuriran kod za čišćenje mrlja u drajverima i podsistemima wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk i touchscreen_dmi. Čišćenje mrlja u učitavaču firmvera lantiq xrx200 je zaustavljeno zbog njegovog uklanjanja iz kernela.

izvor: opennet.ru

Dodajte komentar