Linux prepara eBPF per crear programadors de tasques

Linux

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.