Després de dos mesos de desenvolupament, Linus Torvalds va publicar el nucli. Linux 6.12. Entre els canvis més destacats: la capacitat d'habilitar el mode en temps real, sched_ext per crear planificadors de CPU mitjançant eBPF, sortida de codis QR en condicions d'emergència, mecanisme TCP de memòria de dispositiu, mecanisme de reserva de recursos del servidor SCHED_DEADLINE, millora del planificador de tasques EEVDF, mòdul IPE per establir polítiques d'integritat.
La nova versió inclou 14607 correccions de 2167 desenvolupadors, la mida del pedaç és de 37 MB (els canvis van afectar 13087 fitxers, s'han afegit 507913 línies de codi, s'han eliminat 234083 línies). L'última versió tenia 15130 correccions de 2078 desenvolupadors, la mida del pedaç era de 85 MB (al nucli 6.10 el pegat tenia una mida de 41 MB). Al voltant del 45% de tots els canvis introduïts a 6.12 estan relacionats amb controladors de dispositius, aproximadament el 12% dels canvis estan relacionats amb l'actualització de codi específic de les arquitectures de maquinari, el 13% 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.
Innovacions clau al nucli 6.12:
- Serveis de memòria i sistema
- Ja està disponible la capacitat de compilar el nucli amb l'opció PREEMPT_RT sense pegats addicionals per a l'operació en temps real. L'última característica del nucli que faltava i que impedia que s'hagués activat el mode PREEMPT_RT era la compatibilitat amb la sortida atòmica no bloquejant mitjançant la funció printk, que també s'inclou al nucli. La compatibilitat amb PREEMPT_RT està disponible per a les arquitectures x86, x86_64, ARM64 i RISC-V. Fins ara, la implementació del mode PREEMPT_RT es proporcionava en forma de pegats externs, que algunes distribucions, com ara RHEL, SUSE i Ubuntu, van crear edicions en temps real separades dels seus productes, molt demandades en àrees com ara sistemes financers, dispositius de processament d'àudio i vídeo, aviació, medicina, robòtica, telecomunicacions i sistemes industrials, on cal garantir un temps de processament d'esdeveniments predictible.
- S'ha afegit el mecanisme "sched_ext" (SCX), que permet l'ús d'eBPF per crear planificadors de CPU que cobreixen pràcticament tots els aspectes de la planificació de tasques i l'assignació de recursos de la CPU. Aquests planificadors es poden carregar i executar dinàmicament dins del nucli. Linux в màquina virtual eBPF. El mecanisme sched_ext simplifica la creació de planificadors específics de tasques, permet l'experimentació amb diverses tècniques i estratègies de planificació i permet la creació ràpida de prototips funcionals i la substitució improvisada dels planificadors en infraestructures de producció. Per exemple, mitjançant sched_ext, podeu crear un planificador que tingui en compte les especificitats d'una aplicació específica i canviï dinàmicament la seva estratègia de planificació en funció de l'estat del sistema i altres factors.
- La composició inclou la part restant dels pedaços necessaris per al funcionament del mecanisme del servidor SCHED_DEADLINE, que resol el problema de la infrautilització dels recursos de la CPU per les tasques ordinàries quan la CPU està monopolitzada per tasques d'alta prioritat (en temps real). Per evitar la monopolització de la CPU, el nucli utilitzava anteriorment el mecanisme d'acceleració en temps real, que intentava reservar un 5% per a tasques de baixa prioritat, deixant el 95% del temps per a tasques en temps real. Aquest mecanisme deixava molt a desitjar, ja que les tasques ordinàries en moltes situacions no rebien temps de processador suficient. El servidor SCHED_DEADLINE implementa un mecanisme de reserva de recursos més eficient.
- S'ha completat la integració del programador de tasques EEVDF (Earliest Eligible Virtual Deadline First), que va substituir el programador CFS (Completely Fair Scheduler), subministrat a partir del nucli 2.6.23. A l'hora de triar el següent procés per transferir l'execució, el nou planificador té en compte els processos que no han rebut prou recursos de processador o han rebut una quantitat de temps de processador inmerescudament gran. En el primer cas, el traspàs del control al procés és forçat, i en el segon, al contrari, s'ajorna. L'antic programador CFS utilitzava heurístics i ajustaments per identificar els processos que necessitaven una atenció especial, mentre que el nou programador els supervisa de manera més explícita i no requereix ajustaments. S'espera que l'EEVDF redueixi els retards en les tasques amb les quals CFS ha tingut problemes de programació.
- Al gestor d'emergències del nucli: DRM Panic, que utilitza el subsistema DRM (Direct Rendering Manager) per mostrar un informe visual a l'estil de la "pantalla blava de la mort", la possibilitat de mostrar un logotip i un codi QR amb un informe kmsg. s'ha afegit a la pantalla quan es produeix una condició d'emergència. Com que només 2953 bytes encaixen en un codi QR, es proporciona l'opció DRM_PANIC_SCREEN_QR_CODE_URL, en què l'informe kmsg es comprimeix mitjançant zlib i s'adjunta com a paràmetre a l'URL, que permet transferir uns 40 bytes mitjançant el codi QR V7500. Quan es construeixen paquets amb el nucli, les distribucions poden establir una URL base per a l'URL, que els permetrà navegar a una pàgina per informar d'un problema. Per seleccionar el format del codi QR, es proporciona la configuració DRM_PANIC_SCREEN_QR_VERSION.
- S'ha afegit suport per a ARM POE (Extensió de superposició de permisos), que us permet establir drets d'accés a les àrees de memòria. Mitjançant aquesta extensió, en sistemes amb processadors ARM64, es pot implementar el mecanisme de claus de protecció de memòria, que s'utilitza per limitar l'accés a les pàgines de memòria sense canviar la taula de pàgines de memòria.
- Per a les arquitectures Loongarch, ARM64, PowerPC i s390, s'ha mogut la implementació de la crida al sistema getrandom(), optimitzada mitjançant el mecanisme vDSO (objectes dinàmics compartits virtuals), que permet moure el gestor de trucades del sistema del nucli a espai d'usuari i evitar canvis de context. L'optimització us permet accelerar la generació de números aleatoris fins a 15 vegades.
- S'ha afegit la possibilitat d'utilitzar temps d'espera absoluts, activats quan s'arriba a una determinada hora al rellotge del sistema, al subsistema d'entrada/sortida asíncrona io_uring (anteriorment només es podien establir temps d'espera relatius, que indicaven la durada des de l'inici de l'operació). ).
- S'han afegit fitxers per generar enllaços per a la biblioteca libcpupower mitjançant el conjunt d'eines SWIG, que us permet generar enllaços a partir de codi C/C++ per a diversos llenguatges de programació. Els enllaços us permeten crear scripts en Python i altres idiomes, i utilitzar-los per ampliar la funcionalitat de la biblioteca libcpupower, que proporciona una API per gestionar cpufreq i controladors des de l'espai d'usuari.
- La utilitat cpuidle mostra el valor de la "residència" de l'estat inactiu, que s'utilitza per als sistemes en temps real i tenint en compte el temps mínim que el processador ha d'estar inactiu per justificar els costos energètics de la transició cap a aquest estat i sortir d'aquest.
- S'ha afegit la possibilitat d'utilitzar el compilador Clang per construir la biblioteca estàndard de C nolibc, que s'inclou al codi font del nucli. Linux i proporciona un embolcall al voltant de les crides de sistema bàsiques. Quan es compila nolibc a Clang, s'habilita l'optimització en temps d'enllaç (LTO).
- Algunes interfícies cgroup1 han quedat obsoletes, com ara la comptabilitat TCP, la versió XNUMX del límit suau i la gestió de l'esgotament de la memòria. De moment, el suport per a aquestes funcions continua sent complet i es fa l'advertència per estudiar el nombre d'usuaris que continuen utilitzant aquestes funcions.
- S'ha afegit la possibilitat de configurar un buffer de traça d'anell per desar les dades acumulades després d'un reinici, la qual cosa us permetrà no perdre la informació de depuració acumulada en cas d'un error del nucli. Les dades s'emmagatzemen a la memòria. L'habilitació es fa mitjançant el paràmetre de línia d'ordres del nucli trace_instance, per exemple, establir "trace_instance=boot_map@0x285400000:12M" reservarà 12 MB de memòria a 0x285400000 per a la memòria intermèdia "boot_map", que serà accessible mitjançant el fitxer /sys del nucli. /tracing/instances/boot_map.
- Continuació de la migració dels canvis des de la branca Rust-for-Linux, relacionat amb l'ús de Rust com a segon llenguatge per al desenvolupament de controladors i mòduls del nucli (el suport per a Rust no està actiu per defecte i no inclou Rust entre les dependències de compilació requerides del nucli). S'han afegit els mòduls 'list' i 'rbtree' per treballar amb llistes doblement enllaçades i arbres de cerca vermell-negre. S'han ampliat les capacitats dels mòduls 'init', 'sync', 'types' i 'error'. S'ha afegit la capacitat d'utilitzar codi Rust en compilar un nucli amb protecció contra atacs Spectre (opcions MITIGATION_{RETHUNK,RETPOLINE,SLS}), utilitzant el sistema de depuració KASAN, els mecanismes de protecció kCFI (kernel Control Flow Integrity) i Shadow Call, i en utilitzar complements GCC addicionals. S'ha afegit un controlador per al controlador Ethernet Applied Micro QT2025 PHY, escrit en Rust. S'ha preparat un lloc web separat amb documentació: rust.docs.kernel.org.
- La utilitat xdrgen s'ha afegit al codi font del nucli per convertir les especificacions XDR (eXternal Data Representation) en funcions de codificació i descodificació XDR escrites amb l'estil C adoptat pel nucli. Linux.
- El nucli ha adoptat un canvi per implementar un mecanisme d'emmascarament de punter per reduir el nombre de trucades lentes a barrier_nospec() a la funció copy_from_user() de 64 bits, utilitzada per copiar dades al nucli des de l'espai d'usuari. L'ús de l'emmascarament accelera la prova "per_thread_ops", que avalua el nombre d'operacions que es poden realitzar en un fil, en un 2.6%.
- S'ha afegit un nou controlador USB que us permet utilitzar el protocol 9pfs com a transport per enviar i rebre dades des d'un dispositiu USB quan munteu el sistema de fitxers 9p a través d'USB (per exemple, "mount -t 9p -o trans=usbg, aname=/camí/a/fs /mnt/9"). Un exemple de l'ús del nou controlador és l'ús de NFS en lloc d'organitzar l'arrencada de la partició arrel quan es desenvolupen dispositius incrustats.
- Subsistema de disc, E/S i sistemes de fitxers
- S'ha afegit al subsistema VFS la capacitat de treballar amb dispositius d'emmagatzematge la mida del bloc dels quals és més gran que la mida de la pàgina de memòria del sistema. Als sistemes de fitxers, actualment aquesta funció només és compatible amb XFS.
- El subsistema FUSE, que us permet crear implementacions de sistemes de fitxers que operen a l'espai d'usuari, ha afegit suport per mapejar els identificadors d'usuari dels sistemes de fitxers muntats, utilitzats per fer coincidir els fitxers d'un usuari específic en una partició externa muntada amb un altre usuari a l'actual. sistema.
- S'ha implementat una nova operació fcntl, F_CREATED_QUERY, que dóna a una aplicació la possibilitat de determinar si es va crear un fitxer obert amb el senyalador O_CREAT o si ja existia abans.
- S'ha afegit la possibilitat d'utilitzar ID únics de punt de muntatge de 64 bits a la crida del sistema name_to_handle_at() per evitar condicions de carrera quan s'analitza /proc/mountinfo.
- La mida de l'estructura del "fitxer" al nucli s'ha reduït de 232 a 184 bytes, la qual cosa redueix el consum de memòria en sistemes que treballen activament amb fitxers.
- Es va prohibir muntar sistemes de fitxers per muntar punts dins de la jerarquia /proc, com ara /proc/PID/fd, la qual cosa va crear possibles problemes de seguretat.
- El pseudo-FS NSFS (NameSpace FS), utilitzat per treballar amb espais de noms, proporciona informació addicional sobre els espais de noms dels punts de muntatge.
- El sistema de fitxers EROFS (Extendable Read-Only File System), dissenyat per utilitzar-se en particions de només lectura, ara admet el muntatge de sistemes de fitxers directament des d'imatges de disc desades com a fitxers.
- S'han afegit noves ordres ioctl XFS_IOC_START_COMMIT i XFS_IOC_COMMIT_RANGE a XFS per intercanviar contingut entre dos fitxers.
- NFS ha afegit compatibilitat amb el protocol "LOCALIO", que permet determinar si el client i servidor NFS al mateix host per habilitar les optimitzacions corresponents.
- En el sistema de fitxers Btrfs, s'han proposat optimitzacions de rendiment, s'ha refactoritzat el codi, s'ha reduït l'àrea de bloqueig durant les operacions de lectura, s'ha continuat treballant en la conversió de pàgines de memòria per utilitzar fulls de pàgina i s'ha alliberat automàticament la memòria. implementat per a l'estructura btrfs_path.
- Al sistema de fitxers Ext4, s'han corregit errors relacionats amb l'assignació de blocs, la gestió de l'extensió, la confirmació ràpida i el diari.
- Virtualització i seguretat
- S'ha afegit el mòdul LSM IPE (Integrity Policy Enforcement), desenvolupat per Microsoft per ampliar el sistema de control d'accés obligatori existent. El mòdul permet definir una política general d'integritat per a tot el sistema, indicant quines operacions es permeten i com s'ha de verificar l'autenticitat dels components. Per exemple, amb IPE, podeu especificar quins fitxers executables es permeten executar-se, tenint en compte el seu compliment amb la versió de referència mitjançant hash criptogràfics proporcionats pel sistema dm-verity.
- En l'etapa de compilació del nucli, és possible habilitar per separat els mètodes disponibles de protecció contra diferents vulnerabilitats de classe Spectre a la CPU. Kconfig ofereix nous paràmetres: MITIGATE_MDS (protecció contra la vulnerabilitat Microarquitectural Data Sampling), MITIGATE_TAA (protecció contra la vulnerabilitat TSX Asynchronous Abort), MITIGATE_MMIO_STALE_DATA (protecció contra la vulnerabilitat MMIO Stale Data), MITIGATE_L1TF, MITIGATE_L1TF (protecció contra la vulnerabilitat FIGATE_L1TF) (protecció contra Vulnerabilitats de Retbleed), MITIGATE_SPECTRE_V2, MITIGATE_SPECTRE_VXNUMX (protecció contra vulnerabilitats Spectre), MITIGATE_SRBDS (protecció contra la vulnerabilitat de mostreig de dades del buffer de registre especial), MITIGATE_SSB (protecció contra la vulnerabilitat de Bypass de la botiga especulativa).
- S'ha afegit l'opció de línia d'ordres proc_mem.force_override i un conjunt de paràmetres de compilació a Kconfig (PROC_MEM_FORCE_ALWAYS, PROC_MEM_FORCE_PTRACE i PROC_MEM_FORCE_NEVER) per evitar canvis de memòria mitjançant /proc/pid/mem.
- Subsistema LSM (Linux mòdul de seguretat) s'ha canviat a utilitzar crides estàtiques, cosa que ha millorat la seguretat i el rendiment.
- La capacitat d'utilitzar nuclis estàndard per a l'arquitectura ARM64 en entorns convidats que s'executen en Android-sistemes amb un hipervisor KVM modificat (KVM protegit).
- El mòdul Landlock LSM, que permet limitar la interacció d'un grup de processos amb l'entorn extern, implementa el concepte "IPC scoping" per limitar selectivament la interacció amb entorns sandbox mitjançant sòcols i senyals Unix. Per exemple, podeu prohibir les connexions amb sòcols Unix des d'un entorn sandbox a processos que no tenen aïllament aplicat, però permeten connexions a processos del mateix àmbit.
- A l'hipervisor KVM, s'ha afegit un senyalador al CPUID per als sistemes convidats que indica suport per a les extensions AVX10.1.
- Subsistema de xarxa
- S'ha afegit el mecanisme Device Memory TCP, que permet l'ús de sòcols de xarxa per enviar directament el contingut de la memòria dels dispositius perifèrics a través de la xarxa (mode de còpia zero) i col·locar directament el contingut dels paquets de xarxa a l'àrea de memòria del dispositiu a la xarxa. costat receptor. Les dades transmeses en paquets es transfereixen des de la targeta de xarxa a la memòria d'un dispositiu perifèric o des de la memòria del dispositiu a la targeta de xarxa directament, sense passar per la CPU, i les capçaleres dels paquets acaben a la memòria intermèdia regular del nucli.
- S'han ampliat les capacitats de molts controladors Ethernet i sense fil. Per exemple, el controlador Intel iwlwifi va afegir suport per moure les operacions RLC/SMPS al costat del microprogramari, el controlador RealTek rtw89 va augmentar el rendiment i va afegir suport per a xips RTL8852BT/8852BE-VT (WiFi 6), el controlador de microxip Ethernet va afegir suport per a IEEE 802.3 bw (100BASE) especificacions -T1) i IEEE 802.3bp, implementacions Ethernet virtuals millorades Microsoft vNIC i IBM veth. S'han afegit nous controladors per als xips Ethernet Realtek RTL9054, RTL9068, RTL9072, RTL9075, RTL9068, RTL9071 i Microchip LAN8650/1 10BASE-T1S MAC-PHY.
- A MPTCP (MultiPath TCP), una extensió del protocol TCP per organitzar el lliurament de paquets TCP simultàniament al llarg de diverses rutes a través de diferents interfícies de xarxa, la mida dels pesos utilitzats en l'encaminament augmenta de 8 a 16 bits. S'ha implementat la detecció de trànsit perdut (forat negre) i la suspensió durant algun temps dels intents d'establir connexions amb sistemes que condueixen a la pèrdua de trànsit.
- Per a IPv6, s'implementa el suport per a la marca "p" a la PIO (opció d'informació de prefix), que s'utilitza en anuncis RA (anuncis d'encaminador IPv6) per seleccionar un model de desplegament de client mitjançant DHCPv6-PD (delegació de prefix DHCPv6, RFC9663) en lloc d'assignar adreces individuals basades en prefixos mitjançant SLAAC (Stateless Address Autoconfiguration). IPv6 IOAM6 afegeix suport per a un nou mode d'encapsulació tunsrc per millorar el rendiment.
- Rendiment millorat per processar paquets de control IPsec.
- Rendiment millorat de netejar grans conjunts de regles nftables. nfnetlink_queue ha millorat el suport per al protocol SCTP.
- L'API ethtool ha afegit suport per vincular diverses targetes de xarxa a una interfície de xarxa.
- Оборудование
- Al controlador AMDGPU, es continua treballant per implementar el suport per a les GPU AMD RDNA4 ("GFX12"). S'ha afegit la possibilitat de restablir cues de tasques individuals sense restablir tota la GPU.
- Es va continuar treballant en el controlador Xe drm (Direct Rendering Manager) per a GPU basat en l'arquitectura Intel Xe, que s'utilitza a les targetes de vídeo de la família Intel Arc i gràfics integrats, començant pels processadors Tiger Lake. La nova versió inclou suport per a GPU basades en les microarquitectures Battlemage i Lunar Lake. S'ha introduït el suport per als modificadors Xe2 CCS (Color Control Surface) per controlar els paràmetres de les GPU integrades i discretes.
- El controlador i915 implementa la capacitat de generar informació sobre la velocitat del ventilador mitjançant la interfície HWMON o sysfs (l'atribut "fan1_input"). El paràmetre "i915.modeset" ha quedat obsolet; s'ha d'utilitzar el paràmetre "i915.modeset" en lloc de "i0.modeset=915".
- S'ha afegit suport per a les GPU A615, A306 i A621 al controlador msm DRM (GPU Qualcomm Adreno).
- El conductor Nouveau ha tingut les seves estructures internes reelaborades i netejades.
- El controlador intel_pstate, que controla els paràmetres de consum d'energia (estat P) en sistemes amb processadors Intel, ha afegit suport per a sistemes híbrids amb CPU asimètriques (diferents característiques), així com suport per a la gestió de l'energia dels processadors basats en Granite Rapids i Sierra Forest. microarquitectures. S'ha afegit suport per a la CPU Xeon Granite Rapids al controlador intel_idle. El controlador intel_rapl reconeix els processos de la família AMD 1Ah i els processadors Intel ArrowLake-U.
- Continuació de la inclusió de canvis per donar suport al SoC ARM Snapdragon X Elite, que utilitza la CPU Oryon de 12 nuclis de Qualcomm i la GPU Qualcomm Adreno. El xip està pensat per utilitzar-lo en ordinadors portàtils i ordinadors, i està per davant dels xips Apple M3 i Intel Core Ultra 155H en moltes proves de rendiment.
- S'ha afegit suport per a plaques ARM, SoCs i dispositius: Broadcom bcm2712 (Raspberry Pi 5), Renesas R9A09G057 (RZ/V2H), Qualcomm Snapdragon 414 (MSM8929), Lenovo ThinkPad T14s Gen 6, Lenovo A6000/A6010pnictop 7, Surface Anchopnic35, RG Surface , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, GQ5332 (4 Qualcomm815, LG5) Cool Pi CM35 GenBook, Anbernic RG11XXSP, GameForce Ace, IBM P93, Kontron i.MX6 OSM-S, NanoPC-TXNUMX
- S'ha afegit suport per als panells de pantalla Anbernic RG28XX, On Tat Industrial Company KD50G21-40NT-A1, Innolux G070ACE-LH3, Melfas lmfbx101117480, Densitron DMT028VGHMCMI-1D, Microchip AC40T08A, AOU BOO116XT, AOU02.3. B116XAN06.1, AOU B116XAT04.1, BOE TV101WUM-LL2, BOE NV140WUM-N41, BOE NV133WUM-N63, BOE NV116WHM-A4D, BOE NE140WUM-N6G, CMN-N116, CMNCA-N2, CBCPEA MNB116LS2-601, Starry er1.
- El subsistema d'àudio ha afegit suport per a xips i còdecs RME Digiface USB, AMD ACP 7.1, Mediatek MT6367, MT8365, Realtek RTL1320, C-Media CM9825. Els controladors de so antics per a Intel ASoC s'han declarat obsolets i es recomana utilitzar controladors AVS. S'han fet moltes millores al controlador SoundWire.
Font: opennet.ru
