Linux forbereder eBPF for å lage oppgaveplanleggere

Linux

Det er vi noen dager etter utgivelsen av den stabile versjonen av Linux 6.10, en versjon som vil inneholde en rekke ganske interessante endringer, samt store forbedringer når det gjelder enhetsstøtte, funksjoner og mer.

Etter hvert vil vi snakke om denne utgivelsen, siden årsaken til denne artikkelen er i referanse til den neste forventede versjonen av Linux, som er "Linux 6.11", en utgivelse som jeg nevner gitt nok tid, jeg vil gjerne ta opp dem i et annet innlegg.

Ok, går nå videre til poenget med artikkelen, som er inne henvisning til en kunngjøring fra Linus Torvalds om deres vilje til å inkludere i Linux 6.11-kjernen, noen patcher som implementerer mekanismen «sched_ext» (SCX).

Denne mekanismeneller er ment å bruke eBPF for å lage CPU-planleggere i Linux-kjernen. Her er et sammendrag av hvordan det vil fungere:

  • eBPF og CPU-programmerere: Ved bruk av eBPF kan CPU-planleggere lastes og kjøres dynamisk i Linux-kjernen. Just-In-Time (JIT) kompilering oversetter eBPF-bytekode til maskininstruksjoner for utførelse.
  • SCHED_EXT klasse: Dette er en ny programmeringsklasse, hvis kjerneanropsprioritet er blant klassene SCHED_IDLE og SCHED_NORMAL. BPF-drivere koblet til SCHED_EXT kan håndtere oppgaver som har lavere prioritet enn sanntidsutførelse, uten å påvirke oppgaver som allerede er knyttet til den vanlige planleggeren SCHED_NORMAL.
  • drift: BPF-drivere analyserer køer med oppgaver som venter på å bli utført på CPU og velger hvilken oppgave som skal tilordnes når en CPU-kjerne frigjøres. Hvis det ikke er noen aktive BPF-drivere på SCHED_EXT, oppgaver håndteres ved hjelp av planleggeren SCHED_NORMAL.
  • Fordeler: Mekanismen sched_ext legger til rette for eksperimentering med ulike programmeringsteknikker og strategier på en dynamisk måte. Dette lar deg raskt lage funksjonelle prototyper av programmerere og erstatte dem på farten i produksjonsmiljøer. For eksempel kan den innstilles for å passe til de spesifikke egenskapene til en applikasjon og endre planleggingsstrategien basert på systemstatus og andre faktorer.

Det er verdt å nevne det "sched_ext" ble opprinnelig foreslått for vurdering av kjerneutviklere i 2022, etterfulgt av utgivelsen av seks oppdateringsrevisjoner. Til tross for at den ikke støttes i hovedkjernen, Flere distribusjoner som Ubuntu, Arch Linux, Fedora og NixOS tilbyr installasjon av "sched_ext" gjennom tilleggspakker. Canonical vurderer å inkludere komponenter av «sched_ext» i Ubuntu 24.10, og Valve jobber med integrasjonen for Steam Deck. I Meta er programmereren basert på «sched_ext» brukes allerede i produksjonsinfrastruktur.

I tillegg er det nevnt at, for tiden, omtrent et dusin programmerere basert på "sched_ext", hver med oppgaveplanleggingslogikk definert i brukerområdet og lastet inn i kjernen ved hjelp av BPF-programmer.

  1. scx_lagdelt: En hybrid planlegger som deler opp oppgaver i lag, hver med sin egen planleggingsstrategi. Lar deg tilordne bestemte oppgaver til spesifikke lag med garanterte CPU-ressurser eller øke prioriteringen til individuelle applikasjoner. Utviklet av Meta, er brukerromslogikken skrevet i Rust.
  2. scx_rustland: Optimalisert for å prioritere interaktive oppgaver fremfor CPU-intensive. For eksempel forbedrer det FPS i Terraria-spillet under samtidig kjernekompilering sammenlignet med standard EEVDF-planlegger. Utviklet av en Canonical-ansatt, med logikk i Rust.
  3. scx_lavd: Implementerer LAVD (Latency-criticality Aware Virtual Deadline)-algoritmen, reduserer latens i dataspill og interaktive oppgaver ved å vurdere relevansen av å redusere forsinkelser og prosessfremdrift. Utviklet av Igalia og Valve, med logikk i Rust.
  4. scx_rusty, scx_rlfifo, scx_mitosis: Planleggere som balanserer oppgavegrupper basert på belastning, implementerer en enkel FIFO-planlegger og binder oppgavegrupper til CPU-kjerner. Alle med rustkomponenter.
  5. scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Eksempler på programmerere med C-komponenter, som viser de ulike egenskapene til "sched_ext".

Til slutt er det verdt å legge til at Google eksperimenterer med å bruke sitt eget rammeverk, ghOSt, for å påvirke oppgaveplanleggerbeslutninger ved å bruke BPF-programmer, og har begynt å migrere ghOSt til sched_ext. I tillegg utvikler Google en port av "sched_ext" for ChromeOS.

Fuente: https://lkml.org