Llançament del nucli Linux 5.15

Després de dos mesos de desenvolupament, Linus Torvalds va presentar el llançament del nucli Linux 5.15. Els canvis notables inclouen: nou controlador NTFS amb suport d'escriptura, mòdul ksmbd amb implementació del servidor SMB, subsistema DAMON per a la supervisió d'accés a la memòria, primitives de bloqueig en temps real, suport fs-verity a Btrfs, trucada del sistema process_mrelease per a la memòria dels sistemes de resposta a la fam, mòdul de certificació remota dm-ima.

La nova versió inclou 13499 correccions de 1888 desenvolupadors, la mida del pedaç és de 42 MB (els canvis van afectar 10895 fitxers, es van afegir 632522 línies de codi, es van suprimir 299966 línies). Al voltant del 45% de tots els canvis introduïts a la versió 5.15 estan relacionats amb els controladors de dispositiu, aproximadament el 14% dels canvis estan relacionats amb l'actualització de codi específic de les arquitectures de maquinari, el 14% estan relacionats amb la pila de xarxa, el 6% estan relacionats amb sistemes de fitxers i el 3% estan relacionats amb subsistemes interns del nucli.

Principals innovacions:

  • Subsistema de disc, E/S i sistemes de fitxers
    • El nucli ha adoptat una nova implementació del sistema de fitxers NTFS, obert per Paragon Software. El nou controlador pot funcionar en mode d'escriptura i admet totes les característiques de la versió actual de NTFS 3.1, inclosos els atributs de fitxers ampliats, llistes d'accés (ACL), mode de compressió de dades, treball efectiu amb espais buits als fitxers (esparsos) i reproducció de canvis de el registre per restaurar la integritat després de fallades.
    • El sistema de fitxers Btrfs implementa suport per al mecanisme fs-verity, que s'utilitza per controlar de manera transparent la integritat i l'autenticitat dels fitxers individuals mitjançant hash criptogràfics o claus associades als fitxers, emmagatzemats a l'àrea de metadades. Anteriorment, fs-verity només estava disponible per als sistemes de fitxers Ext4 i F2fs.

      Btrfs també afegeix suport per a l'assignació d'ID d'usuari per a sistemes de fitxers muntats (anteriorment compatible amb sistemes de fitxers FAT, ext4 i XFS). Aquesta característica us permet comparar fitxers d'un usuari específic en una partició estrangera muntada amb un altre usuari del sistema actual.

      Altres canvis a Btrfs inclouen: una addició més ràpida de claus a l'índex del directori per millorar el rendiment de creació de fitxers; la capacitat de treballar raid0 amb un dispositiu i raid10 amb dos (per exemple, durant el procés de reconfiguració de la matriu); opció “rescue=ibadroots” per ignorar un arbre d'extensió incorrecte; acceleració de l'operació "enviament"; reducció dels conflictes de bloqueig durant les operacions de canvi de nom; la capacitat d'utilitzar sectors de 4K en sistemes amb una mida de pàgina de memòria de 64K.

    • A XFS, s'ha estabilitzat la possibilitat d'utilitzar dates posteriors al 2038 al sistema de fitxers. S'ha implementat un mecanisme per a la desactivació retardada de l'inode i suport per a la instal·lació retardada i l'eliminació d'atributs de fitxers. Per eliminar problemes, s'ha eliminat la possibilitat de desactivar les quotes de disc per a les particions ja muntades (podeu desactivar les quotes força, però el càlcul associat a elles continuarà, de manera que cal tornar a muntar-les per desactivar-les completament).
    • A EXT4, s'ha treballat per augmentar el rendiment d'escriptura de buffers delalloc i de processament de fitxers orfes que continuen existint pel fet que romanen oberts, però no estan associats a cap directori. El processament de les operacions de descarta s'ha mogut fora del fil jbd2 kthread per evitar bloquejar les operacions amb metadades.
    • F2FS va afegir l'opció "discard_unit=block|segment|section" per vincular operacions de descart (marcant blocs alliberats que ja no es poden emmagatzemar físicament) a l'alineació relativa a un bloc, sector, segment o secció. S'ha afegit suport per al seguiment dels canvis en la latència d'E/S.
    • El sistema de fitxers EROFS (Extendable Read-Only File System) afegeix suport d'E/S directe per a fitxers desats sense compressió, així com suport de mapa de mapa.
    • OverlayFS implementa el maneig correcte dels senyals de muntatge "immutable", "només per afegir", "sincronització" i "noatime".
    • NFS ha millorat la gestió de situacions en què el servidor NFS deixa de respondre a les sol·licituds. S'ha afegit la possibilitat de muntar des d'un servidor que ja està en ús, però accessible mitjançant una adreça de xarxa diferent.
    • Els preparatius han començat per reescriure el subsistema FSCACHE.
    • S'ha afegit suport per a particions EFI amb col·locació no estàndard de taules GPT.
    • El mecanisme de fanotify implementa una marca nova, FAN_REPORT_PIDFD, que fa que pidfd s'inclogui a les metadades retornades. Pidfd ajuda a gestionar les situacions de reutilització de PID per identificar amb més precisió els processos que accedeixen als fitxers supervisats (un pidfd s'associa a un procés específic i no canvia, mentre que un PID es pot associar a un altre procés després que finalitzi el procés actual associat amb aquest PID).
    • S'ha afegit la possibilitat d'afegir punts de muntatge als grups compartits existents a la crida del sistema move_mount(), que resol problemes amb l'estalvi i la restauració de l'estat del procés a CRIU quan hi ha diversos espais de muntatge compartits en contenidors aïllats.
    • S'ha afegit protecció contra les condicions de carrera ocultes que podrien provocar la corrupció dels fitxers quan es realitzen lectures de memòria cau mentre es processen els buits en un fitxer.
    • El suport per al bloqueig de fitxers obligatori (obligatori), implementat mitjançant el bloqueig de trucades al sistema que condueixen a un canvi de fitxer, s'ha interromput. A causa de les possibles condicions de carrera, aquests bloquejos es van considerar poc fiables i es van desactivar fa molts anys.
    • S'ha eliminat el subsistema LightNVM, que permetia l'accés directe a la unitat SSD, sense passar per la capa d'emulació. LightNVM va perdre el seu significat després de l'arribada dels estàndards NVMe que proporcionen la zonificació (ZNS, Zoned Namespace).
  • Serveis de memòria i sistema
    • S'ha implementat el subsistema DAMON (Data Access MONitor), que us permet supervisar l'activitat relacionada amb l'accés a dades a la RAM en relació a un procés seleccionat que s'executa a l'espai d'usuari. El subsistema us permet analitzar a quines àrees de memòria va accedir el procés durant tot el seu funcionament i quines àrees de memòria van romandre sense reclamar. DAMON compta amb baixa càrrega de CPU, baix consum de memòria, alta precisió i sobrecàrrega constant previsible, independentment de la mida. El subsistema pot ser utilitzat tant pel nucli per optimitzar la gestió de la memòria, com per les utilitats a l'espai d'usuari per entendre què està fent exactament un procés i optimitzar l'ús de la memòria, per exemple, alliberant l'excés de memòria per al sistema.
    • La crida al sistema process_mrelease s'ha implementat per accelerar el procés d'alliberament de la memòria d'un procés que completa la seva execució. En circumstàncies normals, l'alliberament de recursos i la finalització del procés no són instantànies i es poden retardar per diverses raons, interferint amb els sistemes de resposta primerenca de memòria de l'espai de l'usuari com ara oomd (proporcionat per systemd) i lmkd (utilitzat per Android). En cridar process_mrelease, aquests sistemes poden desencadenar de manera més previsible la recuperació de memòria dels processos forçats.
    • Des de la branca del nucli PREEMPT_RT, que desenvolupa suport per al funcionament en temps real, s'han transferit variants de primitives per organitzar bloquejos mutex, ww_mutex, rw_semaphore, spinlock i rwlock, basats en el subsistema RT-Mutex. S'han afegit canvis a l'assignador de lloses SLUB per millorar el funcionament en mode PREEMPT_RT i reduir l'impacte en les interrupcions.
    • S'ha afegit suport per a l'atribut del planificador de tasques SCHED_IDLE a cgroup, la qual cosa us permet proporcionar aquest atribut a tots els processos d'un grup inclòs en un cgroup específic. Aquells. aquests processos només s'executaran quan no hi hagi altres tasques pendents d'executar-se al sistema. A diferència d'establir l'atribut SCHED_IDLE a cada procés individualment, quan s'uneix SCHED_IDLE a un grup c, el pes relatiu de les tasques dins del grup es té en compte quan es selecciona una tasca per executar.
    • El mecanisme per comptabilitzar el consum de memòria a cgroup s'ha ampliat amb la possibilitat de fer un seguiment d'estructures de dades addicionals del nucli, incloses les creades per a sondeig, processament de senyals i espais de noms.
    • S'ha afegit suport per a la programació asimètrica de la vinculació de tasques als nuclis del processador en arquitectures en què algunes CPU permeten l'execució de tasques de 32 bits i algunes només funcionen en mode de 64 bits (per exemple, ARM). El nou mode us permet tenir en compte només les CPU que admeten tasques de 32 bits a l'hora de programar tasques de 32 bits.
    • La interfície d'E/S asíncrona io_uring ara admet l'obertura de fitxers directament a la taula d'índex de fitxers fixos, sense utilitzar un descriptor de fitxers, cosa que permet accelerar significativament alguns tipus d'operacions, però va en contra del procés tradicional Unix d'utilitzar descriptors de fitxers. per obrir fitxers.

      io_uring per al subsistema BIO (Block I/O Layer) implementa un nou mecanisme de reciclatge ("reciclatge BIO"), que redueix la sobrecàrrega en el procés de gestió de la memòria interna i augmenta el nombre d'operacions d'E/S processades per segon aproximadament un 10% . io_uring també afegeix suport per a les trucades al sistema mkdirat(), symlinkat() i linkat().

    • Per als programes BPF, s'ha implementat la possibilitat de sol·licitar i processar esdeveniments de temporitzador. S'ha afegit un iterador per a sockets UNIX i s'ha implementat la possibilitat d'obtenir i establir opcions de socket per a setsockopt. El dumper BTF ara admet dades escrites.
    • Als sistemes NUMA amb diferents tipus de memòria que difereixen en rendiment, quan s'esgota l'espai lliure, les pàgines de memòria desallotjades es transfereixen de la memòria dinàmica (DRAM) a la memòria permanent més lenta (memòria persistent) en lloc de suprimir aquestes pàgines. Les proves han demostrat que aquestes tàctiques solen millorar el rendiment en aquests sistemes. NUMA també ofereix la possibilitat d'assignar pàgines de memòria per a un procés d'un conjunt seleccionat de nodes NUMA.
    • Per a l'arquitectura ARC, s'ha implementat suport per a taules de pàgines de memòria de tres i quatre nivells, que permetrà encara més el suport per als processadors ARC de 64 bits.
    • Per a l'arquitectura s390, s'ha implementat la possibilitat d'utilitzar el mecanisme KFENCE per detectar errors quan es treballa amb memòria i s'ha afegit suport per al detector de condicions de carrera KCSAN.
    • S'ha afegit suport per a la indexació de la llista de missatges de sortida mitjançant printk(), que us permet recuperar tots aquests missatges alhora i fer un seguiment dels canvis a l'espai d'usuari.
    • mmap() ha eliminat el suport per a l'opció VM_DENYWRITE i el codi del nucli s'ha eliminat de l'ús del mode MAP_DENYWRITE, que ha reduït el nombre de situacions que porten al bloqueig d'escriptures en un fitxer amb l'error ETXTBSY.
    • S'ha afegit un nou tipus de comprovacions, "sondes d'esdeveniments", al subsistema de traça, que es pot adjuntar als esdeveniments de traça existents, definint el vostre propi format de sortida.
    • Quan es construeix el nucli amb el compilador Clang, ara s'utilitza l'assemblador predeterminat del projecte LLVM.
    • Com a part d'un projecte per eliminar el codi del nucli que fa que el compilador emeti avisos, es va dur a terme un experiment amb el mode "-Werror" habilitat per defecte, en el qual els avisos del compilador es processen com a errors. En preparació per al llançament de la versió 5.15, Linus va començar a acceptar només canvis que no donaven com a resultat advertències en crear el nucli i va habilitar la construcció amb "-Werror", però després va acceptar que aquesta decisió era prematura i va retardar l'habilitació de "-Werror" per defecte. . La inclusió de la bandera "-Werror" durant el muntatge es controla mitjançant el paràmetre WERROR, que s'estableix a COMPILE_TEST per defecte, és a dir. De moment només està habilitat per a les compilacions de prova.
  • Virtualització i seguretat
    • S'ha afegit un nou controlador dm-ima a Device Mapper (DM) amb la implementació d'un mecanisme de certificació remot basat en el subsistema IMA (Integrity Measurement Architecture), que permet a un servei extern verificar l'estat dels subsistemes del nucli per garantir-ne l'autenticitat. . A la pràctica, dm-ima us permet crear emmagatzematges mitjançant Device Mapper que estan vinculats a sistemes de núvol externs, en els quals es comprova la validesa de la configuració de destinació DM llançada mitjançant IMA.
    • prctl() implementa una nova opció PR_SPEC_L1D_FLUSH, que quan s'habilita, fa que el nucli esborri el contingut de la memòria cau de primer nivell (L1D) cada vegada que es produeix un canvi de context. Aquest mode permet, de manera selectiva per als processos més importants, implementar una protecció addicional contra l'ús d'atacs de canal lateral realitzats per determinar les dades que s'han instal·lat a la memòria cau com a conseqüència de les vulnerabilitats provocades per l'execució especulativa d'instruccions a la CPU. El cost d'habilitar PR_SPEC_L1D_FLUSH (no activat per defecte) és una penalització de rendiment important.
    • És possible construir el nucli amb l'addició de la marca "-fzero-call-used-regs=used-gpr" a GCC, que garanteix que tots els registres es reiniciïn a zero abans de tornar el control des de la funció. Aquesta opció us permet protegir contra les fuites d'informació de les funcions i reduir un 20% el nombre de blocs adequats per construir gadgets ROP (programació orientada al retorn) en exploits.
    • S'ha implementat la capacitat de crear nuclis per a l'arquitectura ARM64 en forma de clients per a l'hipervisor Hyper-V.
    • Es proposa un nou marc de desenvolupament de controladors "VDUSE", que permet implementar dispositius de blocs virtuals a l'espai d'usuari i utilitzar Virtio com a transport d'accés des dels sistemes convidats.
    • S'ha afegit el controlador Virtio per al bus I2C, que permet emular controladors I2C en mode de paravirtualització mitjançant backends separats.
    • S'ha afegit el controlador de Virtio gpio-virtio per permetre als convidats accedir a les línies GPIO proporcionades pel sistema amfitrió.
    • S'ha afegit la possibilitat de restringir l'accés a les pàgines de memòria per als controladors de dispositiu amb suport DMA en sistemes sense MMU (unitat de gestió de memòria) d'E/S.
    • L'hipervisor KVM té la capacitat de mostrar estadístiques en forma d'histogrames lineals i logarítmics.
  • Subsistema de xarxa
    • El mòdul ksmbd s'ha afegit al nucli amb la implementació d'un servidor de fitxers utilitzant el protocol SMB3. El mòdul complementa la implementació del client SMB disponible anteriorment al nucli i, a diferència del servidor SMB que s'executa a l'espai d'usuari, és més eficient en termes de rendiment, consum de memòria i integració amb capacitats avançades del nucli. Ksmbd es presenta com una extensió Samba d'alt rendiment i preparada per a incrustacions que s'integra amb les eines i biblioteques de Samba segons sigui necessari. Les capacitats de ksmbd inclouen un suport millorat per a la tecnologia de memòria cau de fitxers distribuïts (arrendaments SMB) en sistemes locals, la qual cosa pot reduir significativament el trànsit. En el futur, tenen previst afegir suport per a RDMA ("smbdirect") i extensions de protocol relacionades amb l'augment de la fiabilitat del xifratge i la verificació mitjançant signatures digitals.
    • El client CIFS ja no admet NTLM i els algorismes d'autenticació basats en DES més febles utilitzats al protocol SMB1.
    • El suport de multidifusió s'implementa en la implementació de ponts de xarxa per a vlans.
    • El controlador d'enllaç, utilitzat per agregar interfícies de xarxa, ha afegit suport per al subsistema XDP (eXpress Data Path), que us permet manipular paquets de xarxa en l'etapa abans que siguin processats per la pila de xarxa del nucli de Linux.
    • La pila sense fil mac80211 admet 6GHZ STA (autorització temporal especial) en els modes LPI, SP i VLP, així com la possibilitat d'establir TWT (Target Wake Time) individual en mode de punt d'accés.
    • S'ha afegit suport per al protocol MCTP (Management Component Transport Protocol), utilitzat per a la interacció entre controladors de gestió i dispositius associats (processadors host, dispositius perifèrics, etc.).
    • Integració al nucli de MPTCP (MultiPath TCP), una extensió del protocol TCP per organitzar el funcionament d'una connexió TCP amb el lliurament de paquets simultàniament al llarg de diverses rutes a través de diferents interfícies de xarxa associades a diferents adreces IP. La nova versió afegeix suport per a adreces en mode de malla completa.
    • S'han afegit a netfilter gestors per a fluxos de xarxa encapsulats en el protocol SRv6 (Segment Routing IPv6).
    • S'ha afegit compatibilitat amb sockmap per a sockets de transmissió Unix.
  • Оборудование
    • El controlador amdgpu és compatible amb les APU Cyan Skillfish (equipades amb GPU Navi 1x). L'APU Yellow Carp ara admet còdecs de vídeo. S'ha millorat el suport de la GPU Aldebaran. S'han afegit nous identificadors de mapes basats en GPU Navi 24 "Beige Goby" i RDNA2. Es proposa una implementació millorada de pantalles virtuals (VKMS). S'ha implementat el suport per controlar la temperatura dels xips AMD Zen 3.
    • El controlador amdkfd (per a GPU discretes, com ara Polaris) implementa un gestor de memòria virtual compartida (SVM, memòria virtual compartida) basat en el subsistema HMM (gestió de memòria heterogènia), que permet l'ús de dispositius amb les seves pròpies unitats de gestió de memòria (MMU). , unitat de gestió de memòria), que pot accedir a la 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.
    • El controlador i915 per a targetes de vídeo Intel amplia l'ús del gestor de memòria de vídeo TTM i inclou la capacitat de gestionar el consum d'energia basat en GuC (Graphics micro Controller). Han començat els preparatius per a la implementació del suport per a la targeta gràfica Intel ARC Alchemist i la GPU Intel Xe-HP.
    • El controlador nouveau implementa el control de la retroil·luminació per als panells eDP mitjançant DPCD (Dades de configuració de DisplayPort).
    • S'ha afegit suport per a les GPU Adreno 7c Gen 3 i Adreno 680 al controlador msm.
    • El controlador IOMMU està implementat per al xip Apple M1.
    • S'ha afegit un controlador de so per a sistemes basats en APU AMD Van Gogh.
    • S'ha afegit el controlador Realtek R8188EU a la branca de prova, que va substituir la versió antiga del controlador (rtl8188eu) per als xips sense fil Realtek RTL8188EU 802.11 b/g/n.
    • El controlador ocp_pt s'inclou per a la placa PCIe desenvolupada per Meta (Facebook) amb la implementació d'un rellotge atòmic en miniatura i un receptor GNSS, que es pot utilitzar per organitzar el funcionament de servidors de sincronització de l'hora exacta separats.
    • S'ha afegit suport per a telèfons intel·ligents Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
    • S'ha afegit suport per a ARM SoС i NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon Renes636-8150, HSM3 plaques -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (plaques de servidor de Facebook Cloudripper, Elbert i Fuji), 4KOpen STiH418-b2264.
    • S'ha afegit suport per a panells LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek EJ9341NA 3300, ilitek33 Innotechnology, Samsung VKCA20, ilitek7430 Innotechnology DB2401, WideChips WSXNUMX.
    • S'ha afegit el controlador LiteETH amb suport per als controladors Ethernet utilitzats en els SoC de programari LiteX (per a FPGA).
    • S'ha afegit una opció de baixa latència al controlador d'àudio USB per controlar la inclusió de l'operació en el mode de latència mínima. També s'ha afegit l'opció quirk_flags per passar la configuració específica del dispositiu.

Al mateix temps, la Latin American Free Software Foundation va formar una versió del nucli completament lliure 5.15 - Linux-libre 5.15-gnu, esborrat d'elements de microprogramari i controladors que contenien components o seccions de codi no lliures, l'abast dels quals és limitat. pel fabricant. La nova versió implementa la sortida d'un missatge al registre sobre la finalització de la neteja. S'han solucionat problemes amb la generació de paquets amb mkspec, s'ha millorat el suport per als paquets snap. S'han eliminat alguns avisos que es mostraven en processar el fitxer de capçalera firmware.h. S'ha permès la sortida d'alguns tipus d'avises ("format-extra-args", comentaris, funcions i variables no utilitzades) quan es construeix en el mode "-Werror". S'ha afegit la neteja del controlador gehc-achc. Codi de neteja de blob actualitzat als controladors i subsistemes adreno, btusb, btintel, brcmfmac, aarch64 qcom. S'ha aturat la neteja dels controladors prism54 (eliminat) i rtl8188eu (substituït per r8188eu).

Font: opennet.ru

Afegeix comentari