Llançament del nucli Linux 5.9

Després de dos mesos de desenvolupament, Linus Torvalds introduït llançament del nucli Linux 5.9. Entre els canvis més destacats: limitació de la importació de símbols de mòduls propietaris a mòduls GPL, acceleració de les operacions de canvi de context mitjançant la instrucció del processador FSGSBASE, suport per a la compressió d'imatges del nucli mitjançant Zstd, reelaboració de la priorització de fils al nucli, suport per al PRP (Protocol de redundància paral·lel), programació conscient de l'amplada de banda al programador de terminis, empaquetament preventiu de pàgines de memòria, senyalador de capacitat CAP_CHECKPOINT_RESTOR, trucada al sistema close_range(), millores de rendiment dm-crypt, eliminació de codi per a convidats Xen PV de 32 bits, nova memòria de lloses mecanisme de gestió, opció “rescat” a Btrfs, suport per a xifratge en línia a ext4 i F2FS.

La nova versió inclou 16074 correccions de desenvolupadors de 2011,
mida del pedaç: 62 MB (els canvis van afectar 14548 fitxers, s'han afegit 782155 línies de codi i s'han suprimit 314792 línies). Al voltant del 45% de tots els presentats a 5.9
els canvis estan relacionats amb els controladors de dispositiu, aproximadament el 15% dels canvis
actitud cap a l'actualització del codi específic de les arquitectures de maquinari, 13%
relacionats amb la pila de xarxa, un 3% amb sistemes de fitxers i un 3% amb interns
subsistemes del nucli.

El principal innovacions:

  • Serveis de memòria i sistema
    • Estrènyer protecció contra l'ús de capes GPL per enllaçar controladors propietaris amb components del nucli exportats només per a mòduls sota la llicència GPL. El senyalador TAINT_PROPRIETARY_MODULE ara s'hereta a tots els mòduls que importen símbols dels mòduls amb aquest indicador. Si un mòdul GPL intenta importar símbols d'un mòdul que no és GPL, llavors aquest mòdul GPL heretarà l'etiqueta TAINT_PROPRIETARY_MODULE i no podrà accedir als components del nucli disponibles només per als mòduls amb llicència GPL, encara que el mòdul hagi importat anteriorment símbols de la categoria "gplonly". El bloqueig invers (exportant només EXPORT_SYMBOL_GPL als mòduls que van importar EXPORT_SYMBOL_GPL), que podria trencar el treball dels controladors propietaris, no està implementat (només s'hereta el senyalador del mòdul propietari, però no els enllaços GPL).
    • Afegit suport del motor kcompactd per pàgines de memòria preempaquetades en segon pla per augmentar el nombre de pàgines de memòria grans disponibles per al nucli. Segons estimacions preliminars, l'embalatge en segon pla, a costa d'una sobrecàrrega mínima, pot reduir entre 70 i 80 vegades els retards a l'hora d'assignar pàgines de memòria grans (pàgines grans) en comparació amb el mecanisme d'embalatge utilitzat anteriorment, llançat quan sorgeix la necessitat (a demanda). ). Per establir els límits de la fragmentació externa que proporcionarà kcompactd, s'ha afegit sysctl vm.compaction_proactiveness.
    • Afegit suport per a la compressió d'imatges del nucli mitjançant algorisme Zestàndard (zstd).
    • S'ha implementat suport per a instruccions del processador per als sistemes x86 FSGSBASE, que permet llegir i modificar el contingut dels registres FS/GS des de l'espai d'usuari. Al nucli, FSGSBASE s'utilitza per accelerar les operacions de canvi de context eliminant les operacions d'escriptura MSR innecessàries per a GSBASE, i a l'espai d'usuari evita trucades al sistema innecessàries per canviar FS/GS.
    • Afegit el paràmetre "allow_writes" permet prohibir els canvis als registres MSR del processador des de l'espai d'usuari i limitar l'accés als continguts d'aquests registres a les operacions de lectura, ja que canviar el MSR pot generar problemes. Per defecte, l'escriptura encara no està desactivada i els canvis a l'MSR es reflecteixen al registre, però en el futur es preveu canviar l'accés predeterminat al mode només de lectura.
    • A la interfície d'E/S asíncrona io_uring S'ha afegit un suport complet per a operacions de lectura en memòria intermèdia asíncrona que no requereixen fils del nucli. S'espera suport de gravació en un futur llançament.
    • A la data límit del planificador d'E/S implementat planificació basada en la capacitat, permetent prendre decisions correctes sobre sistemes asimètrics com els sistemes basats en ARM DynamIQ i big.LITTLE, que combinen nuclis de CPU potents i menys eficients energèticament en un sol xip. En particular, el nou mode us permet evitar desajustos de programació quan un nucli de CPU lent no té els recursos adequats per completar una tasca a temps.
    • El model de consum d'energia al nucli (marc del model energètic) és ara descriu no només el comportament del consum d'energia de la CPU, sinó que també cobreix els dispositius perifèrics.
    • S'ha implementat la crida al sistema close_range() per permetre que un procés tanqui tot un rang de descriptors de fitxers oberts alhora.
    • Des de la implementació de la consola de text i el controlador fbcon codi eliminat, que ofereix la possibilitat de desplaçar el text de manera programàtica (CONFIG_VGACON_SOFT_SCROLLBACK) més que la quantitat de memòria de vídeo en mode text VGA.
    • Redissenyat algorisme per assignar prioritats als fils dins del nucli. La nova opció proporciona una millor coherència a tots els subsistemes del nucli quan s'assignen prioritats a les tasques en temps real.
    • S'ha afegit sysctl sched_uclamp_util_min_rt_default per controlar la configuració d'augment de la CPU per a tasques en temps real (per exemple, podeu canviar el comportament de les tasques en temps real sobre la marxa per estalviar energia després de canviar a la bateria o als sistemes mòbils).
    • S'han fet els preparatius per implementar el suport per a la tecnologia Transparent Huge Pages a la memòria cau de la pàgina.
    • El motor de fanotify implementa noves marques FAN_REPORT_NAME i FAN_REPORT_DIR_FID per informar el nom principal i la informació única del FID quan es produeixen esdeveniments de creació, supressió o moviment per a elements de directori i objectes que no són del directori.
    • Per a grups c implementat un nou controlador de memòria de lloses, que destaca per moure la comptabilitat de lloses des del nivell de la pàgina de memòria al nivell d'objecte del nucli, que permet compartir pàgines de lloses en diferents cgroups, en lloc d'assignar memòria cau de lloses separades per a cada cgroup. L'enfocament proposat permet augmentar l'eficiència de l'ús de la llosa, reduir la mida de la memòria utilitzada per a la llosa en un 30-45%, reduir significativament el consum total de memòria del nucli i reduir la fragmentació de la memòria.
    • En el subsistema de so ALSA и pila USB, d'acord amb recentment adoptat recomanacions sobre l'ús de terminologia inclusiva al nucli de Linux; es van netejar els termes políticament incorrectes. El codi s'ha esborrat de les paraules "esclau", "mestre", "llista negra" i "llista blanca".
  • Virtualització i seguretat
    • Quan es construeix el nucli utilitzant el compilador Clang va aparèixer la capacitat de configurar (CONFIG_INIT_STACK_ALL_ZERO) la inicialització automàtica a zero de totes les variables emmagatzemades a la pila (en crear, especifiqueu "-ftrivial-auto-var-init=zero").
    • Al subsistema seccomp, quan s'utilitza el mode de control de processos a l'espai d'usuari, afegit oportunitat substitució de descriptors de fitxers al procés supervisat per emular completament les trucades del sistema que condueixen a la creació de descriptors de fitxers. La funcionalitat és demandada en sistemes de contenidors aïllats i implementacions sandbox per a Chrome.
    • Per a les arquitectures xtensa i csky, s'ha afegit suport per limitar les trucades al sistema mitjançant el subsistema seccomp. Per a xtensa, també s'implementa el suport per al mecanisme d'auditoria.
    • Afegit nova marca de capacitat CAP_CHECKPOINT_RESTORE, que us permet proporcionar accés a les capacitats relacionades amb la congelació i la restauració de l'estat dels processos sense transferir privilegis addicionals.
    • GCC 11 ofereix totes les funcions que necessiteu
      eina de depuració KCSAN (Kernel Concurrency Sanitizer), dissenyada per detectar dinàmicament les condicions de carrera dins del nucli. Així, ara KCSAN es pot utilitzar amb nuclis construïts a GCC.

    • Per a models de CPU AMD Zen i més nous afegit suport per a la tecnologia P2PDMA, que permet utilitzar DMA per a la transferència directa de dades entre la memòria de dos dispositius connectats al bus PCI.
    • S'ha afegit un mode a dm-crypt que us permet reduir la latència realitzant el processament de dades criptogràfiques sense utilitzar cues de treball. Aquest mode també és necessari per al correcte funcionament zonificat dispositius de blocs (dispositius amb àrees que s'han d'escriure seqüencialment, actualitzant tot el grup de blocs). S'ha treballat per augmentar el rendiment i reduir la latència a dm-crypt.
    • S'ha eliminat el codi per admetre convidats de 32 bits que s'executen en mode de paravirtualització amb l'hipervisor Xen. Els usuaris d'aquests sistemes haurien de canviar a utilitzar nuclis de 64 bits en entorns convidats o utilitzar modes de virtualització complets (HVM) o combinats (PVH) en comptes de la paravirtualització (PV) per executar entorns.
  • Subsistema de disc, E/S i sistemes de fitxers
    • Al sistema de fitxers Btrfs implementat una opció de muntatge de "rescat" que unifica l'accés a totes les altres opcions de recuperació. S'ha eliminat el suport per a les opcions "alloc_start" i "subvolrootid" i l'opció "inode_cache" ha quedat obsoleta. S'han fet optimitzacions de rendiment, especialment accelerant notablement l'execució d'operacions fsync(). Afegit la capacitat d'utilitzar tipus alternatius de sumes de control diferents de CRC32c.
    • Afegit la possibilitat d'utilitzar el xifratge en línia (xifratge en línia) en sistemes de fitxers ext4 i F2FS, per habilitar que es proporciona l'opció de muntatge "inlinecrypt". El mode de xifratge en línia us permet utilitzar els mecanismes de xifratge integrats al controlador de la unitat, que xifra i desxifra de manera transparent l'entrada/sortida.
    • En XFS assegurat restabliment de l'inode (flux) en un mode completament asíncron que no bloqueja els processos quan es realitza una operació de neteja de memòria. S'ha resolt un problema de quota de llarga data que provocava un seguiment incorrecte dels avisos de límit suau i límit d'inode. Implementació unificada del suport DAX per a ext4 i xfs.
    • A Ext4 implementat precarregueu mapes de bits d'assignació de blocs. Combinada amb la limitació de l'exploració de grups no inicialitzats, l'optimització va reduir el temps necessari per muntar particions molt grans.
    • En F2FS afegit ioctl F2FS_IOC_SEC_TRIM_FILE, que us permet utilitzar les ordres TRIM/discard per restablir físicament les dades especificades en un fitxer, per exemple, per eliminar les claus d'accés sense deixar dades residuals a la unitat.
      A F2FS també afegit nou mode de recollida d'escombraries GC_URGENT_LOW, que funciona de manera més agressiva eliminant algunes comprovacions per estar en estat inactiu abans d'iniciar el recol·lector d'escombraries.

    • A bcache, el bucket_size per a les extensions s'ha augmentat de 16 a 32 bits en preparació per habilitar les memòries cau de dispositius per zones.
    • La possibilitat d'utilitzar el xifratge en línia basat en el xifratge de maquinari integrat proporcionat pels controladors UFS s'ha afegit al subsistema SCSI (Emmagatzematge Flash Universal).
    • S'ha afegit un nou paràmetre de línia d'ordres del nucli "debugfs", que us permet controlar la disponibilitat del pseudo-FS del mateix nom.
    • El client NFSv4.2 proporciona suport per als atributs de fitxer ampliats (xattr).
    • En dm-pols afegit interfície per mostrar alhora una llista de tots els blocs defectuosos identificats al disc ("dmsetup message dust1 0 listbadblocks").
    • Per a md/raid5, s'ha afegit el paràmetre /sys/block/md1/md/stripe_size per configurar la mida del bloc STRIPE.
    • Per a dispositius d'emmagatzematge NVMe afegit suport per a les ordres de zonificació de la unitat (ZNS, NVM Express Zoned Namespace), que us permet dividir l'espai d'emmagatzematge en zones que formen grups de blocs per a un control més complet sobre la col·locació de dades a la unitat.
  • Subsistema de xarxa
    • A Netfilter afegit la capacitat de rebutjar paquets en l'etapa abans de la comprovació d'encaminament (l'expressió REJECT ara es pot utilitzar no només a les cadenes INPUT, FORWARD i OUTPUT, sinó també a l'etapa PREROUTING per a icmp i tcp).
    • En nftables afegit la capacitat d'auditar esdeveniments relacionats amb els canvis de configuració.
    • A nftables a l'API netlink afegit suport per a cadenes anònimes, el nom de les quals és assignat dinàmicament pel nucli. Quan suprimiu una regla associada a una cadena anònima, la cadena en si s'elimina automàticament.
    • BPF afegeix suport per als iteradors per recórrer, filtrar i modificar elements de matrius associatives (mapes) sense copiar dades a l'espai de l'usuari. Els iteradors es poden utilitzar per a sòcols TCP i UDP, la qual cosa permet als programes BPF iterar sobre llistes de sòcols oberts i extreure'n la informació que necessiten.
    • S'ha afegit un nou tipus de programa BPF BPF_PROG_TYPE_SK_LOOKUP, que es llança quan el nucli cerca un sòcol d'escolta adequat per a una connexió entrant. Utilitzant un programa BPF com aquest, podeu crear controladors que prenguin decisions sobre a quin sòcol s'ha d'associar una connexió, sense estar restringit per la crida al sistema bind(). Per exemple, podeu associar un sol sòcol amb una sèrie d'adreces o ports. A més, s'ha afegit suport per al senyalador SO_KEEPALIVE a bpf_setsockopt() i s'ha implementat la possibilitat d'instal·lar controladors BPF_CGROUP_INET_SOCK_RELEASE, cridats quan s'allibera el sòcol.
    • Suport al protocol implementat PRP (Parallel Redundancy Protocol), que permet la commutació basada en Ethernet a un canal de còpia de seguretat, transparent per a les aplicacions, en cas de fallada dels components de la xarxa.
    • Stack mac80211 afegit suport per a la negociació de canals WPA/WPA2-PSK de quatre etapes en mode de punt d'accés.
    • S'ha afegit la possibilitat de canviar el programador de qdisc (disciplina de cua) per utilitzar l'algoritme de gestió de cues de xarxa FQ-PIE (Flow Queue PIE) de manera predeterminada, amb l'objectiu de reduir l'impacte negatiu de l'emmagatzematge en memòria intermèdia de paquets en equips de xarxa perifèrics (bufferbloat) en xarxes amb mòdems per cable.
    • S'han afegit noves funcionalitats a MPTCP (MultiPath TCP), extensions 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. S'ha afegit suport per a la galeta syn, DATA_FIN, l'ajust automàtic de la memòria intermèdia, el diagnòstic de sockets i les marques REUSEADDR, REUSEPORT i V6ONLY a setsockopt.
    • Per a les taules d'encaminament virtual VRF (Virtual Routing and Forwarding), que permeten organitzar el funcionament de diversos dominis d'encaminament en un mateix sistema, s'ha implementat el mode "estricte". En aquest mode, una taula virtual només es pot associar amb una taula d'encaminament que no s'utilitza en altres taules virtuals.
    • El controlador sense fil és ath11k afegit suporta la freqüència de 6 GHz i exploració espectral.
  • Оборудование
    • S'ha eliminat el codi per donar suport a l'arquitectura UniCore, desenvolupat al Microprocessor Center de la Universitat de Pequín i inclòs al nucli de Linux el 2011. Aquesta arquitectura no es manté des del 2014 i no té suport a GCC.
    • S'ha implementat el suport per a l'arquitectura RISC-V kcov (interfície debugfs per a l'anàlisi de la cobertura del codi del nucli), kmemleak (sistema de detecció de fuites de memòria), protecció de pila, marques de salt i operacions sense pes (multitasca independent dels senyals del temporitzador).
    • Per a l'arquitectura PowerPC, s'ha implementat el suport per a les cues de bloqueig, que ha millorat significativament el rendiment en situacions de conflicte de bloqueig.
    • Per a les arquitectures ARM i ARM64, el mecanisme de regulació de freqüència del processador està habilitat per defecte schedutil (cpufreq governor), que utilitza directament la informació del programador de tasques per prendre una decisió sobre el canvi de freqüència i pot accedir immediatament als controladors cpufreq per canviar ràpidament la freqüència, ajustant instantàniament els paràmetres de funcionament de la CPU a la càrrega actual.
    • El controlador i915 DRM per a targetes gràfiques Intel inclou suport per a xips basats en microarquitectura Llac Rocket i va afegir suport inicial per a targetes discretes Intel Xe DG1.
    • El controlador Amdgpu va afegir suport inicial per a les GPU AMD Navi 21 (Marina Flouder) i Navi 22 (Cíclid de Siena). S'ha afegit suport per a motors d'acceleració de codificació i descodificació de vídeo UVD/VCE per a la GPU de les Illes del Sud (Radeon HD 7000).
      S'ha afegit una propietat per girar la pantalla 90, 180 o 270 graus.

      Curiosament, el controlador de la GPU AMD és el controlador més gran del nucli: té uns 2.71 milions de línies de codi, que és aproximadament el 10% de la mida total del nucli (27.81 milions de línies). Al mateix temps, 1.79 milions de línies es representen mitjançant fitxers de capçalera generats automàticament amb dades per als registres de la GPU, i el codi C és de 366 mil línies (en comparació, el controlador Intel i915 inclou 209 mil línies i Nouveau - 149 mil).

    • Conductor en Nouveau afegit suport per a la comprovació d'integritat fotograma a fotograma utilitzant CRC (Comprovacions de redundància cíclica) als motors de visualització de la GPU de NVIDIA. La implementació es basa en la documentació proporcionada per NVIDIA.
    • S'han afegit controladors per a panells LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 i Xingbangda XBD599.
    • El subsistema d'àudio ALSA és compatible Intel Silent Stream (mode d'alimentació contínua per a dispositius HDMI externs per eliminar el retard en iniciar la reproducció) i nou dispositiu per controlar la il·luminació dels botons d'activació del micròfon i de silenci, i també va afegir suport per a equips nous, inclòs un controlador Longson 7A1000.
    • Suport afegit per a plaques, dispositius i plataformes ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilitzat a Sony Xperia 10, 10 Plus, XA2, XA2 Plus i XA2, XA2). Ultra), Jetson Xavier NX, Amlogic WeTek Core6, Aspeed EthanolX, cinc plaques noves basades en NXP i.MX3011, MikroTik RouterBoard 950, Xiaomi Libra, Microsoft Lumia 5, Sony Xperia Z5, MStar, Microchip Sparx3, Intel Keem Bay, Amazon Alpine v2, Renesas RZ/GXNUMXH.

Paral·lelament, la Fundació Llatinoamericana de Programari Lliure format
вариант nucli completament lliure 5.9 - Linux-libre 5.9-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. La nova versió desactiva la càrrega de blob als controladors per a WiFi rtw8821c i SoC MediaTek mt8183. Codi de neteja de blob actualitzat als controladors i subsistemes de pantalla tàctil Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) i x86.

Font: opennet.ru

Afegeix comentari