Llançament del nucli Linux 5.1

Després de dos mesos de desenvolupament, Linus Torvalds introduït llançament del nucli Linux 5.1. Entre els canvis més destacats: una nova interfície per a l'io_uring d'E/S asíncrona, la possibilitat d'utilitzar NVDIMM com a RAM, suport per a memòria virtual compartida a Nouveau, suport per a la supervisió escalable de sistemes de fitxers molt grans mitjançant fanotify, la possibilitat de configurar la compressió Zstd nivells a Btrfs, un nou controlador TEO cpuidle, implementació de trucades al sistema per resoldre el problema 2038, la capacitat d'arrencar des de dispositius de mapeador de dispositius sense initramfs, mòdul SafeSetID LSM, suport per a pedaços en directe combinats.

El principal innovacions:

  • Subsistema de disc, E/S i sistemes de fitxers
    • S'ha implementat una nova interfície per a E/S asíncrona - io_uring, que destaca pel seu suport per a sondeig d'E/S i la capacitat de treballar amb o sense memòria intermèdia. Recordem que el mecanisme d'E/S asíncron "aio" proposat anteriorment no admetia E/S en memòria intermèdia, només podia funcionar en mode O_DIRECT (sense emmagatzemar la memòria intermèdia i ometre la memòria cau), tenia problemes amb el bloqueig a causa de l'espera de la disponibilitat de metadades i presentava grans despeses generals a causa de la còpia de dades a la memòria.

      Dins de l'API
      Els desenvolupadors io_uring van intentar eliminar les mancances de l'antiga interfície aio. Per rendiment io_uring està molt a prop SPDK i està molt per davant de libaio quan es treballa amb l'enquesta habilitat. S'ha preparat una biblioteca per utilitzar io_uring en aplicacions finals que s'executen a l'espai d'usuari liburant, que proporciona un marc d'alt nivell sobre la interfície del nucli;

    • En el mecanisme de seguiment d'esdeveniments a FS fanotify() afegit suport per al seguiment de situacions de canvi d'estructura i superilles dirent (esdeveniments de creació, eliminació i moviment de directoris). Les característiques presentades ajuden a resoldre els problemes d'escalabilitat que sorgeixen en crear un seguiment recursiu de canvis en sistemes de fitxers molt grans mitjançant el mecanisme inotify (anteriorment només es podien fer un seguiment dels canvis directes mitjançant inotify, però
      rendiment en condicions de seguiment recursiu de grans directoris imbricats deixava molt a desitjar). Ara aquest seguiment es pot fer efectivament mitjançant fanotify;

    • Al sistema de fitxers Btrfs afegit la capacitat de personalitzar el nivell de compressió per a l'algorisme zstd, que es pot considerar com un compromís òptim entre el ràpid però ineficaç lz4 i el xz de compressió lenta però bona. Per analogia amb com abans era possible establir el nivell de compressió quan s'utilitzava zlib, s'ha afegit suport per a l'opció de muntatge "-o compress=zstd:level" per a zstd. Durant les proves, el primer nivell mínim va proporcionar una compressió de dades 2.658 vegades amb una velocitat de compressió de 438.47 MB/s, una velocitat de descompressió de 910.51 MB/s i un consum de memòria de 780 MB, i el nivell màxim 15 va proporcionar 3.126 vegades, però amb una compressió. velocitat de 37.30 MB/s desembalatge 878.84 MB/s i consum de memòria 2547 MB;
    • Afegit la capacitat d'arrencar des d'un sistema de fitxers situat al dispositiu mapeador de dispositius, sense utilitzar initramfs. A partir de la versió actual del nucli, els dispositius de mapatge de dispositius es poden utilitzar directament durant el procés d'arrencada, per exemple, com a partició amb el sistema de fitxers arrel. La partició es configura mitjançant el paràmetre d'arrencada "dm-mod.create". Els mòduls de mapeador de dispositius permesos per a la càrrega inclouen: "cripta", "retard", "lineal", "origen de la instantània" i "veritat";
    • S'ha afegit el senyalador F2FS_NOCOW_FL al sistema de fitxers F2FS orientat a unitats flash, que us permet desactivar el mode de còpia en escriptura per a un fitxer determinat;
    • S'ha eliminat el sistema de fitxers del nucli Exofs, que és una variant d'ext2, adaptada per treballar amb emmagatzematge d'objectes OSD (Object-based Storage Device). També s'ha eliminat el suport per al protocol SCSI per a aquests dispositius d'emmagatzematge d'objectes;
  • Virtualització i seguretat
    • S'ha afegit l'opció PR_SPEC_DISABLE_NOEXEC a prctl() per controlar l'execució especulativa d'instruccions per al procés seleccionat. Una nova opció us permet desactivar selectivament l'execució especulativa per als processos que podrien ser atacats per un atac Spectre. El bloqueig dura fins a la primera crida a exec();
    • Mòdul LSM implementat SafeSetID, que permet als serveis del sistema gestionar els usuaris de manera segura sense augmentar els privilegis (CAP_SETUID) i sense obtenir privilegis de root. Els privilegis s'assignen mitjançant la definició de regles a securityfs basades en una llista blanca d'enllaços vàlids (en la forma “UID1:UID2”);
    • S'han afegit canvis de baix nivell necessaris per a la càrrega de mòduls de seguretat (LSM) basada en pila. S'ha introduït l'opció d'arrencada del nucli "lsm" per controlar quins mòduls es carreguen i en quin ordre;
    • S'ha afegit suport per als espais de noms de fitxers al subsistema d'auditoria;
    • Ampliat les capacitats del connector GCC structleak, que us permet bloquejar possibles fuites de contingut de memòria. Es proporciona la inicialització de qualsevol variable que s'utilitzi al codi mitjançant l'accés de referència a la pila;
  • Subsistema de xarxa
    • Per endolls implementat nova opció "SO_BINDTOIFINDEX" similar a
      "SO_BINDTODEVICE", però prenent com a argument el número d'índex de la interfície de xarxa en lloc del nom de la interfície;

    • La pila mac80211 ha afegit la possibilitat d'assignar diversos BSSID (adreces MAC) a un dispositiu. Com a part d'un projecte per optimitzar el rendiment del WiFi, la pila mac80211 ha afegit la comptabilitat del temps d'aire i la capacitat de distribuir el temps d'aire entre diverses estacions (quan es treballa en mode de punt d'accés, assignant menys temps de transmissió a estacions sense fil lentes, en lloc de distribuir el temps de manera uniforme entre tots). estacions);
    • Mecanisme afegit "salut devlink", que proporciona notificacions quan es produeixen problemes amb la interfície de xarxa;
  • Serveis de memòria i sistema
    • Implementat lliurament de senyal segur que permet la reutilització de PID. Per exemple, quan es crida a kill anteriorment, podria sorgir una situació en què, immediatament després d'enviar un senyal, el PID objectiu podria ser alliberat a causa de la finalització del procés i ocupat per un altre procés, i el senyal acabaria passant a un altre procés. Per eliminar aquestes situacions, s'ha afegit una nova crida al sistema pidfd_send_signal, que utilitza descriptors de fitxers de /proc/pid per garantir una vinculació estable del procés. Fins i tot si el PID es reutilitza durant el processament de la trucada del sistema, el descriptor del fitxer no canviarà i es pot utilitzar amb seguretat per enviar un senyal al procés;
    • Afegit la capacitat d'utilitzar dispositius de memòria permanent (memòria persistent, per exemple NVDIMM) com a memòria RAM. Fins ara, el nucli suportava dispositius com a dispositius d'emmagatzematge, però ara també es poden utilitzar com a RAM addicional. La funció s'implementa en resposta als desitjos dels usuaris que estan disposats a suportar un retard de rendiment i volen utilitzar l'API nativa de gestió de memòria del nucli de Linux en lloc d'utilitzar els sistemes d'assignació de memòria d'espai d'usuari existents que s'executen a la part superior del mmap per al dax. dossier;
    • S'ha afegit un nou controlador d'inactivitat de la CPU (cpuidle, decideix quan la CPU es pot posar en modes d'estalvi d'energia profund; com més profund sigui el mode, més gran serà l'estalvi, però també més temps es triga a sortir del mode) - TEO (Timer Events Oriented Governor) ). Fins ara, s'han proposat dos gestors de cpuidle: "menú" i "escala", que es diferencien en heurístics. El gestor del "menú" té problemes coneguts per prendre decisions heurístiques, per eliminar les quals es va decidir preparar un nou gestor. TEO es posiciona com una alternativa al manejador de "menú", permetent un major rendiment mantenint el mateix nivell de consum d'energia.
      Podeu activar el nou gestor mitjançant el paràmetre d'arrencada “cpuidle.governor=teo”;

    • Com a part del treball per eliminar problemes del 2038, causat per un desbordament del tipus time_t de 32 bits, inclou trucades al sistema que ofereixen comptadors de temps de 32 bits per a arquitectures de 64 bits. Com a resultat, l'estructura time_t de 64 bits ara es pot utilitzar en totes les arquitectures. També s'han implementat canvis similars al subsistema de xarxa per a les opcions data i hora endolls de xarxa;
    • Al sistema de pegat en calent per al nucli (pegat en directe) afegit Funció "Reemplaçament atòmic" per aplicar atòmicament una sèrie de canvis a una única funció. Aquesta característica us permet distribuir pedaços de resum que cobreixen diversos canvis alhora, en lloc del procés d'aplicació etapa per etapa de pedaços en directe en un ordre estrictament definit, que és bastant difícil de mantenir. Mentre que abans cada canvi posterior s'havia de basar en l'estat de la funció després de l'últim canvi, ara és possible propagar diversos canvis vinculats a un estat inicial alhora (és a dir, els mantenedors poden mantenir un pedaç consolidat en relació amb el nucli base en lloc de una cadena de pegats que depenen els uns dels altres);
    • Anunciat suport obsolet per al format de fitxer executable a.out i
      eliminat codi per generar fitxers bàsics en format a.out, que es troba en estat abandonat. El format a.out no s'utilitza en sistemes Linux des de fa molt de temps, i la generació de fitxers a.out fa temps que no és compatible amb les eines modernes en configuracions Linux predeterminades. A més, el carregador de fitxers a.out es pot implementar completament a l'espai d'usuari;

    • La capacitat d'identificar i eliminar el codi no utilitzat s'ha afegit al mecanisme de verificació del programa BPF. El nucli també inclou pedaços amb suport de spinlock per al subsistema BPF, proporcionant capacitats addicionals per gestionar l'execució paral·lela de programes BPF;
  • Оборудование
    • Conductor en Nouveau afegit suport per a la gestió de memòria heterogènia, permetent que la CPU i la GPU accedeixin a àrees comunes de memòria sincronitzada. El sistema de memòria virtual compartida (SVM, shared virtual memory) s'implanta sobre la base del subsistema HMM (Heterogeneous memory management), que permet l'ús de dispositius amb unitats de gestió de memòria pròpies (MMU, memory management unit), que poden accedir memòria principal. En particular, amb HMM, podeu organitzar un espai d'adreces compartit entre la GPU i la CPU, en el qual la GPU pot accedir a la memòria principal del procés. Actualment, el suport SVM només està habilitat per a les GPU de la família Pascal, tot i que també es proporciona suport per a les GPU Volta i Turing. A més, en Nouveau afegit nou ioctl per controlar la migració de les àrees de memòria de procés a la memòria GPU;
    • Al controlador Intel DRM per a GPU Skylake i posteriors (gen9+) inclòs Per defecte, el mode d'arrencada ràpida elimina els canvis de mode innecessaris durant l'arrencada. Afegit новые identificadors de dispositiu basats en microarquitectures Coffelake i Ice Lake. Per a xips Coffelake afegit Suport GVT (Virtualització de GPU). Per a GPU virtuals implementat Suport VFIO EDID. Per a panells LCD MIPI/DSI afegit suport per a elements ACPI/PMIC. Implementat nous modes de televisió 1080p30/50/60 TV;
    • S'ha afegit suport per a la GPU Vega10/20 BACO al controlador amdgpu. S'han implementat la gestió d'energia Vega 10/20 i les taules de control del refrigerador Vega 10. S'han afegit nous identificadors de dispositiu PCI per a les GPU Picasso. Afegit interfície per gestionar dependències programables per evitar bloquejos;
    • Afegit Controlador DRM/KMS per a acceleradors de pantalla ARM Komeda (Mali D71);
    • S'ha afegit suport per a panells de pantalla Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 i Kingdisplay kd097d04;
    • S'ha afegit suport per a còdecs d'àudio Rockchip RK3328, Cirrus Logic CS4341 i CS35L36, MediaTek MT6358, Qualcomm WCD9335 i Ingenic JZ4725B, així com la plataforma d'àudio Mediatek MT8183;
    • S'ha afegit suport per a controladors NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • S'ha afegit suport d'accelerador per als sistemes de maquinari d'IA Habana;
    • S'ha afegit suport per a controladors NXP ENETC gigabit Ethernet i interfícies sense fil MediaTek MT7603E (PCIe) i MT76x8.

Paral·lelament, la Fundació Llatinoamericana de Programari Lliure format
вариант nucli completament lliure 5.1 - Linux-libre 5.1-gnu, eliminada dels elements de microprogramari i controladors que contenen components o seccions de codi no lliures, l'abast dels quals està limitat pel fabricant. A la nova versió, la càrrega de blob està desactivada als controladors mt7603 i goya. Codi de neteja de blob actualitzat als controladors i subsistemes wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk i touchscreen_dmi. La neteja de blob al carregador de microprogramari lantiq xrx200 s'ha aturat a causa de la seva eliminació del nucli.

Font: opennet.ru

Afegeix comentari