estem a pocs dies del llançament de la versió estable de Linux 6.10, una versió que inclourà una sèrie de canvis força interessants, així com grans millores quant al suport per a dispositius, funcions i més.
En el seu moment estarem parlant sobre aquest llançament, ja que la raó d'aquest article és en referència a la propera versió que s'espera de Linux que és la «Linux 6.11», un llançament del qual s'han donat a conèixer alguns canvis que sí amb el temps suficient, m'encantaria poder abordar-los en una altra publicació.
D'acord, ara passem al punt de l'article, que hi ha referència a un anunci que realitzo Linus Torvalds sobre la seva disposició per incloure al nucli Linux 6.11, uns pegats que implementen el mecanisme sched_ext (SCX).
Aquest mecanismeo té com a finalitat utilitzar eBPF per crear programadors de CPU dins del nucli de Linux. Aquí hi ha un resum de com funcionarà:
- eBPF i Programadors de CPU: Amb l'ús d'eBPF, els programadors de CPU poden ser carregats dinàmicament i executats dins del nucli de Linux. La compilació Just-In-Time (JIT) tradueix el codi de bytes eBPF en instruccions de màquina per a la seva execució.
- Classe SCHED_EXT: aquesta és una nova classe de programació, la prioritat de la qual trucada del nucli es troba entre les classes SCHED_IDLE i SCHED_NORMAL. Els controladors BPF vinculats a SCHED_EXT poden manejar tasques que tenen una prioritat inferior a l'execució en temps real, sense afectar les tasques ja adjuntes al programador normal SCHED_NORMAL.
- Funcionament: Els controladors BPF analitzen les cues de tasques que esperen ser executades a la CPU i seleccionen quina tasca assignar quan s'alliberi un nucli de la CPU. Si no hi ha controladors BPF actius a SCHED_EXT, les tasques es gestionen mitjançant el planificador SCHED_NORMAL.
- Beneficis: el mecanisme sched_ext facilita lexperimentació amb diferents tècniques i estratègies de programació de manera dinàmica. Això permet crear ràpidament prototips funcionals de programadors i reemplaçar-los sobre la marxa en entorns de producció. Per exemple, podeu ajustar-vos per adaptar-vos a les característiques específiques d'una aplicació i canviar l'estratègia de programació segons l'estat del sistema i altres factors.
Cal esmentar que «sched_ext» es va proposar inicialment per a la consideració dels desenvolupadors del nucli el 2022, seguit de la publicació de sis revisions del pegat. Tot i no estar suportat al nucli principal, diverses distribucions com Ubuntu, Arch Linux, Fedora i NixOS ofereixen la instal·lació de «sched_ext» a través de paquets addicionals. Canonical està considerant incloure components de «sched_ext» a Ubuntu 24.10, i Valve treballa en la seva integració per a l'Steam Deck. A Meta, el programador basat en «sched_ext» ja s'utilitza en infraestructura de producció.
A més d'això, s'esmenta que actualment s'estan desenvolupant aproximadament una dotzena de programadors basats en «sched_ext», cadascun amb lògica de programació de tasques definida a l'espai de l'usuari i carregada al kernel mitjançant programes BPF.
- scx_layered: Un programador híbrid que divideix les tasques en capes, cadascuna amb la seva pròpia estratègia de programació. Permet assignar certes tasques a capes específiques amb recursos CPU garantits o augmentar la prioritat d'aplicacions individuals. Desenvolupat per Meta, la seva lògica en espai dusuari està escrita a Rust.
- scx_rustland: Optimitzat per prioritzar tasques interactives sobre les intensives a CPU. Per exemple, millora els FPS en el joc Terraria durant la compilació simultània del nucli en comparació del programador EEVDF estàndard. Desenvolupat per un empleat de Canonical, amb lògica a Rust.
- scx_lavd: Implementa l'algorisme LAVD (Latency-criticality Aware Virtual Deadline), reduint la latència en jocs d'ordinador i tasques interactives en considerar la rellevància de reduir els retards i el progrés dels processos. Desenvolupat per Igalia i Valve, amb lògica a Rust.
- scx_rusty, scx_rlfifo, scx_mitosi: Programadors que equilibren grups de tasques segons la càrrega, implementen un programador FIFO simple, i vinculen grups de tasques a nuclis de CPU. Tots amb components a Rust.
- scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Exemples de programadors amb components en C, demostrant les diverses capacitats de sched_ext.
Finalment, cal afegir que Google està experimentant amb l'ús del seu marc, ghOSt, per influir en les decisions del programador de tasques mitjançant programes BPF, i ha començat a migrar ghOSt a «sched_ext». A més, Google desenvolupa una adaptació de «sched_ext» per a ChromeOS.
font: https://lkml.org