Lansarea nucleului Linux 5.2

După două luni de dezvoltare, Linus Torvalds a prezentat eliberarea nucleului Linux 5.2. Printre cele mai vizibile modificări: modul de operare Ext4 nu face distincție între majuscule și minuscule, apeluri de sistem separate pentru montarea sistemului de fișiere, drivere pentru GPU Mali 4xx/ 6xx/7xx, capacitatea de a gestiona modificările valorilor sysctl în programele BPF, device-mapper modul dm-dust, protectie impotriva atacurilor MDS, suport pentru Sound Open Firmware pentru DSP, optimizare performanta BFQ, aducerea subsistemului PSI (Pressure Stall Information) la posibilitatea de utilizare in Android.

Noua versiune include 15100 de corecții de la 1882 de dezvoltatori,
dimensiunea patch-ului - 62 MB (modificările au afectat 30889 fișiere, au fost adăugate 625094 linii de cod, 531864 linii au fost șterse). Aproximativ 45% din toate prezentate în 5.2
modificările sunt legate de driverele de dispozitiv, aproximativ 21% dintre modificări sunt
atitudine față de actualizarea codului specific arhitecturilor hardware, 12%
legate de stiva de rețea, 3% la sistemele de fișiere și 3% la interne
subsisteme kernel. 12.4% din toate modificările au fost pregătite de Intel, 6.3% de Red Hat, 5.4% de Google, 4.0% de AMD, 3.1% de SUSE, 3% de IBM, 2.7% de Huawei, 2.7% de Linaro, 2.2% de ARM , 1.6 % - Oracle.

Principalul inovații:

  • Subsistem de disc, I/O și sisteme de fișiere
    • Adăugat pentru Ext4 sprijini funcționează fără a distinge majusculele caracterelor din numele fișierelor, care este activată numai în raport cu directoarele individuale goale folosind noul atribut „+F” (EXT4_CASEFOLD_FL). Atunci când acest atribut este setat pe un director, toate operațiunile cu fișiere și subdirectoare în interior vor fi efectuate fără a se ține cont de majusculele caracterelor, inclusiv majusculele vor fi ignorate la căutarea și deschiderea fișierelor (de exemplu, fișierele Test.txt, test.txt și test.TXT în astfel de directoare vor fi considerate la fel). În mod implicit, sistemul de fișiere continuă să țină cont de majuscule, cu excepția directoarelor cu atributul „chattr +F”;
    • Au fost unificate funcțiile de procesare a caracterelor UTF-8 în numele fișierelor, care sunt utilizate la efectuarea operațiilor de comparare și normalizare a șirurilor;
    • XFS adaugă infrastructură pentru monitorizarea sănătății sistemului de fișiere și un nou ioctl pentru interogarea stării de sănătate. O caracteristică experimentală a fost implementată pentru a verifica online contoarele de superblocuri.
    • S-a adăugat un nou modul dispozitiv de cartografiere „dm-praf„, care vă permite să simulați apariția blocurilor dăunătoare pe suport sau erori la citirea de pe disc. Modulul vă permite să simplificați depanarea și testarea aplicațiilor și a diverselor sisteme de stocare în fața unor eventuale defecțiuni;
    • Efectuate Optimizări semnificative ale performanței pentru planificatorul BFQ I/O. În condiții de încărcare mare I/O, s-au efectuat optimizări permite Reduceți timpul de operațiuni precum lansarea aplicațiilor cu până la 80%.
    • S-au adăugat o serie de apeluri de sistem pentru montarea sistemelor de fișiere: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Aceste apeluri de sistem vă permit să procesați separat diferite etape de montare (procesați superblocul, obțineți informații despre sistemul de fișiere, montați, atașați la punctul de montare), care au fost efectuate anterior folosind apelul de sistem mount() comun. Apelurile separate oferă posibilitatea de a efectua scenarii de montare mai complexe și de a efectua operațiuni separate, cum ar fi reconfigurarea superblocului, activarea opțiunilor, schimbarea punctului de montare și mutarea într-un spațiu de nume diferit. În plus, procesarea separată vă permite să determinați cu exactitate motivele pentru ieșirea codurilor de eroare și să setați mai multe surse pentru sistemele de fișiere cu mai multe straturi, cum ar fi suprapunerea;
    • O nouă operație IORING_OP_SYNC_FILE_RANGE a fost adăugată la interfață pentru I/O io_uring asincron, care efectuează acțiuni echivalente cu un apel de sistem sync_file_range()și a implementat, de asemenea, capacitatea de a înregistra eventfd cu io_uring și de a primi notificări despre finalizarea operațiunilor;
    • Pentru sistemul de fișiere CIFS, a fost adăugat FIEMAP ioctl, oferind mapare eficientă a extinderii, precum și suport pentru modurile SEEK_DATA și SEEK_HOLE;
    • În subsistemul FUSE propus API pentru gestionarea stocării în cache a datelor;
    • Btrfs a optimizat implementarea qgroups și a îmbunătățit viteza de execuție fsync pentru fișierele cu mai multe legături hard. Codul de verificare a integrității datelor a fost îmbunătățit, care acum ia în considerare posibila deteriorare a informațiilor din RAM înainte de a spăla datele pe disc;
    • CEPH a adăugat suport pentru exportul de instantanee prin NFS;
    • Implementarea montării NFSv4 în modul „soft” a fost îmbunătățită (dacă apare o eroare la accesarea serverului în modul „soft”, un apel la returnează imediat un cod de eroare, iar în modul „hard” controlul nu este dat până la FS disponibilitatea sau timeout-ul este restabilit). Noua versiune oferă o gestionare mai precisă a timeout-ului, o recuperare mai rapidă a erorilor și o nouă opțiune de montare „mai moale” care vă permite să schimbați codul de eroare (ETIMEDOUT) returnat atunci când are loc un timeout;
    • API-ul nfsdcld, conceput pentru a urmări starea clienților NFS, permite serverului NFS să urmărească corect starea clientului la repornire. Astfel, demonul nfsdcld poate acţiona acum ca un handler nfsdcltrack;
    • Pentru AFS adăugat emularea blocărilor intervalului de octeți în fișiere (Blocarea intervalului de octeți);
  • Virtualizare și securitate
    • S-a lucrat pentru a elimina locurile din nucleu care permit executarea codului din zonele de memorie reflectate inscriptibile, ceea ce permite blocarea eventualelor găuri care ar putea fi exploatate în timpul unui atac;
    • A fost adăugat un nou parametru de linie de comandă a nucleului „mitigations=", oferind o modalitate simplificată de a controla activarea anumitor tehnici de protejare împotriva vulnerabilităților asociate cu execuția speculativă a instrucțiunilor pe CPU. Transmiterea „mitigations=off” dezactivează toate metodele existente, iar modul implicit „mitigations=auto” activează protecția, dar nu afectează utilizarea Hyper Threading. Modul „mitigations=auto,nosmt” dezactivează suplimentar Hyper Threading, dacă este necesar de metoda de protecție.
    • Adăugat suport pentru semnătura digitală electronică conform GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), dezvoltat de Vitaly Chikunov de la Basalt SPO. S-a adăugat suport pentru AES128-CCM la implementarea TLS nativă. S-a adăugat suport pentru algoritmii AEAD la modulul crypto_simd;
    • În Kconfig adăugat o secțiune separată de „întărire a nucleului” cu opțiuni pentru îmbunătățirea protecției nucleului. În prezent, noua secțiune conține doar setări pentru activarea pluginurilor de îmbunătățire a verificărilor GCC;
    • Codul nucleului este aproape livrat din declarații de caz neîntrerupte în switch (fără întoarcere sau pauză după fiecare bloc de caz). Rămâne să remediem 32 din 2311 cazuri de astfel de utilizare a comutatorului, după care va fi posibil să utilizați modul „-Wimplicit-fallthrough” la construirea nucleului;
    • Pentru arhitectura PowerPC, a fost implementat suport pentru mecanismele hardware pentru limitarea căilor de acces nedorite la kernel la datele din spațiul utilizatorului;
    • S-a adăugat cod de blocare atac Clasa MDS (Microarchitectural Data Sampling) la procesoarele Intel. Puteți verifica dacă un sistem este vulnerabil la vulnerabilități prin variabila SysFS „/sys/devices/system/cpu/vulnerabilities/mds”. Disponibil două moduri de protecție: full, care necesită microcod actualizat și bypass, care nu garantează complet ștergerea bufferelor CPU atunci când controlul este transferat în spațiul utilizatorului sau în sistemul oaspete. Pentru a controla modurile de protecție, la kernel a fost adăugat parametrul „mds=", care poate lua valorile „full”, „full,nosmt” (+ dezactivează Hyper-Threads) și „off”;
    • Pe sistemele x86-64 s-a adăugat protecție „stack guard-page” pentru IRQ, mecanisme de depanare și handlere de excepții, a căror esență este înlocuirea paginilor de memorie la granița cu stiva, accesarea care duce la generarea unui excepție (page-fault);
    • S-a adăugat setarea sysctl vm.unprivileged_userfaultfd, care controlează capacitatea proceselor neprivilegiate de a utiliza apelul de sistem userfaultfd();
  • Subsistemul de rețea
    • Adăugat Suport gateway IPv6 pentru rutele IPv4. De exemplu, acum puteți specifica reguli de rutare precum „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0”;
    • Pentru ICMPv6, apelurile ioctl icmp_echo_ignore_anycast și icmp_echo_ignore_multicast sunt implementate pentru a ignora ICMP ECHO pentru anycast și
      adrese multicast. Adăugat capacitatea de a limita intensitatea procesării pachetelor ICMPv6;

    • Pentru protocolul mesh BATMAN (Better Approach To Mobile Adhoc Networking), care permite crearea de rețele descentralizate în care fiecare nod este conectat prin noduri învecinate, adăugat suport pentru difuzarea de la multicast la unicast, precum și capacitatea de a controla prin sysfs;
    • În ethtool adăugat un nou parametru Fast Link Down, care vă permite să reduceți timpul necesar pentru a primi informații despre un eveniment link down pentru 1000BaseT (în condiții normale, întârzierea este de până la 750 ms);
    • a apărut oportunitate legarea tunelurilor Foo-Over-UDP la o anumită adresă, interfață de rețea sau socket (anterior legarea se făcea doar printr-o mască comună);
    • În stiva wireless asigurat posibilitatea implementării handler-urilor
      OWE (Opportunistic Wireless Encryption) în spațiul utilizatorului;

    • În Netfilter, suportul pentru familia de adrese inet a fost adăugat la lanțurile nat (de exemplu, acum puteți utiliza o singură regulă de traducere pentru a procesa ipv4 și ipv6, fără a separa regulile pentru ipv4 și ipv6);
    • În netlink adăugat regim strict pentru verificarea strictă a corectitudinii tuturor mesajelor și atributelor, în care dimensiunea așteptată a atributelor nu este permisă să fie depășită și este interzisă adăugarea de date suplimentare la sfârșitul mesajelor;
  • Servicii de memorie și sistem
    • Indicatorul CLONE_PIDFD a fost adăugat la apelul de sistem clone(), când este specificat, descriptorul de fișier „pidfd” identificat cu procesul copil creat este returnat procesului părinte. Acest descriptor de fișier, de exemplu, poate fi folosit pentru a trimite semnale fără teama de a intra într-o condiție de cursă (imediat după trimiterea semnalului, PID-ul țintă poate fi eliberat din cauza încheierii procesului și ocupat de un alt proces);
    • Pentru cea de-a doua versiune a cgroups, a fost adăugată funcționalitatea controlerului congelatorului, cu care puteți opri munca într-un cgroup și puteți elibera temporar unele resurse (CPU, I/O și, eventual, chiar memorie) pentru a efectua alte sarcini. Gestionarea se face prin fișierele de control cgroup.freeze și cgroup.events din arborele cgroup. Intrarea 1 din cgroup.freeze îngheață procesele din cgroup curent și din toate grupurile copil. Deoarece înghețarea durează ceva timp, este furnizat un fișier suplimentar cgroup.events prin care puteți afla despre finalizarea operațiunii;
    • Securizat exportul atributelor de memorie atașate fiecărui nod în sysfs, ceea ce vă permite să determinați din spațiul utilizatorului natura procesării băncilor de memorie în sistemele cu memorie eterogenă;
    • Subsistemul PSI (Pressure Stall Information) a fost îmbunătățit, ceea ce vă permite să analizați informații despre timpul de așteptare pentru primirea diverselor resurse (CPU, memorie, I/O) pentru anumite sarcini sau seturi de procese dintr-un cgroup. Folosind PSI, cei care gestionează spațiul utilizatorului pot estima mai precis nivelul de încărcare a sistemului și modelele de încetinire în comparație cu Load Average. Noua versiune oferă suport pentru setarea pragurilor de sensibilitate și capacitatea de a utiliza apelul poll() pentru a primi notificarea că pragurile setate au fost declanșate pentru o anumită perioadă de timp. Această caracteristică permite Androidului să monitorizeze deficitul de memorie într-un stadiu incipient, să identifice sursa problemelor și să încheie aplicațiile neimportante fără a cauza probleme care sunt vizibile pentru utilizator. La testele de stres, instrumentele de monitorizare a consumului de memorie bazate pe PSI au demonstrat de 10 ori mai puține false pozitive în comparație cu statisticile vmpressure;
    • Codul pentru verificarea programelor BPF a fost optimizat, ceea ce permite verificarea de până la 20 de ori mai rapidă pentru programele mari. Optimizarea a făcut posibilă creșterea limitei dimensiunii programelor BPF de la 4096 la un milion de instrucțiuni;
    • Pentru programele BPF furnizat capacitatea de a accesa date globale, care vă permite să definiți variabile și constante globale în programe;
    • Adăugat API, care vă permite să controlați modificările parametrilor sysctl din programele BPF;
    • Pentru arhitectura MIPS32, a fost implementat un compilator JIT pentru mașina virtuală eBPF;
    • Pentru arhitectura PowerPC pe 32 de biți, a fost adăugat suport pentru instrumentul de depanare KASan (Kernel address sanitizer), care ajută la identificarea erorilor atunci când lucrați cu memoria;
    • Pe sistemele x86-64, restricția privind plasarea imaginilor de stat în timpul unui accident de kernel (crash-dump) în zonele de memorie de peste 896 MB a fost eliminată;
    • Pentru arhitectura s390, sunt implementate suportul pentru randomizarea spațiului de adrese ale nucleului (KASLR) și capacitatea de a verifica semnăturile digitale la încărcarea nucleului prin kexec_file_load();
    • Pentru arhitectura PA-RISC, a adăugat suport pentru depanatorul kernelului (KGDB), marcajele de salt și kprobes;
  • Оборудование
    • Driver inclus Lima pentru GPU Mali 400/450, utilizat în multe cipuri mai vechi bazate pe arhitectura ARM. Pentru GPU-urile Mali mai noi, a fost adăugat driverul Panfrost, care acceptă cipuri bazate pe microarhitecturile Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) și Bifrost (Mali G3x, G5x, G7x);
    • S-a adăugat suport pentru dispozitivele audio care utilizează firmware deschis Sunet Deschis firmware (FPS). În ciuda disponibilității driverelor deschise, codul firmware pentru cipurile de sunet a rămas închis și a fost furnizat în formă binară. Proiectul Sound Open Firmware a fost dezvoltat de Intel pentru a crea firmware deschis pentru cipurile DSP legate de procesarea audio (Google s-a alăturat mai târziu și dezvoltării). În prezent, proiectul a pregătit deja descoperirea firmware-ului pentru cipurile de sunet ale platformelor Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake și IceLake;
    • Driverul Intel DRM (i915) adaugă suport pentru cipuri
      Elkhartlake (Gen11). S-au adăugat ID-uri PCI pentru cipurile Comet Lake (Gen9). Suportul pentru cipurile Icelake a fost stabilizat, pentru care au fost adăugați și identificatori suplimentari de dispozitiv PCI.
      Pornit
      modul de comutare asincronă între două buffere din memoria video (async flip) la efectuarea operațiunilor de scriere prin mmio, ceea ce a crescut semnificativ performanța unor aplicații 3D (de exemplu, performanța în testul 3DMark Ice Storm a crescut cu 300-400%). Suport tehnologic adăugat HDCP2.2 (High-bandwidth Digital Content Protection) pentru criptarea semnalelor video transmise prin HDMI;

    • Driverul amdgpu pentru GPU Vega20 adăugat suport pentru RAS (Reliability, Availability, Serviceability) și suport experimental pentru subsistemul SMU 11, care a înlocuit tehnologia Powerplay. Pentru GPU Vega12 adăugat suport pentru modul BACO (Bus Active, Chip Off). S-a adăugat suport inițial pentru XGMI, o magistrală de mare viteză (PCIe 4.0) pentru interconectarea GPU. S-au adăugat identificatori lipsă pentru cardurile bazate pe GPU Polaris10 la driverul amdkfd;
    • Driverul Nouveau a adăugat suport pentru plăci bazate pe chipset-ul NVIDIA Turing 117 (TU117, folosit în GeForce GTX 1650). ÎN
      kconfig adăugat setarea pentru a dezactiva funcțiile învechite care nu mai sunt utilizate în versiunile curente ale libdrm;

    • Suportul pentru obiectele de sincronizare „cronologie” a fost adăugat la API-ul DRM și la driverul amdgpu, permițându-vă să faceți fără blocarea clasică.
    • Driverul vboxvideo pentru GPU virtual VirtualBox a fost mutat din ramura de staging în structura principală;
    • S-a adăugat driver de viteză pentru cip GFX SoC ASPEED;
    • S-a adăugat suport pentru ARM SoC și Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, ,Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi) ) plăci RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

În același timp, Fundația Latino-Americană pentru Software Liber format
opțiune kernel complet gratuit 5.2 - Linux-libre 5.2-gnu, eliminate de elemente de firmware și drivere care conțin componente sau secțiuni de cod care nu sunt gratuite, al căror domeniu de aplicare este limitat de producător. Noua versiune include încărcarea fișierelor
Firmware deschis de sunet. Încărcarea blob-urilor în drivere este dezactivată
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp și ucsi_ccg. Codul de curățare blob din driverele și subsistemele ixp4xx, imx-sdma, amdgpu, nouveau și goya, precum și din documentația microcodului, a fost actualizat. S-a oprit curățarea bloburilor din driverul r8822be din cauza înlăturării acestuia.

Sursa: opennet.ru

Adauga un comentariu