PageSourceSearch

https://sched-ext.com/assets/js/273412d7.db6c783a.js

js sched-ext.com collected 2026-10-04 16:14:09 UTC 4,057 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunksched_ext=self.webpackChunksched_ext||[]).push([[65],{3268:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>c,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"scheds/rust/scx_lavd/README","title":"scx_lavd","description":"This is a single user-defined scheduler used within schedext, which is a Linux kernel feature which enables implementing kernel thread schedulers in BPF and dynamically loading them. Read more about schedext.","source":"@site/docs/scheds/rust/scx_lavd/README.md","sourceDirName":"scheds/rust/scx_lavd","slug":"/scheds/rust/scx_lavd/","permalink":"/docs/scheds/rust/scx_lavd/","draft":false,"unlisted":false,"editUrl":"https://github.com/sched-ext/scx/blob/main/scheds/rust/scx_lavd/README.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"scx_flash","permalink":"/docs/scheds/rust/scx_flash/"},"next":{"title":"scx_layered","permalink":"/docs/scheds/rust/scx_layered/"}}');var i=t(4848),a=t(8453);const c={},r="scx_lavd",d={},l=[{value:"Overview",id:"overview",level:2},{value:"Typical Use Case",id:"typical-use-case",level:2},{value:"Production Ready?",id:"production-ready",level:2}];function o(e){const s={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"scx_lavd",children:"scx_lavd"})}),"\n",(0,i.jsxs)(s.p,{children:["This is a single user-defined scheduler used within ",(0,i.jsx)(s.a,{href:"https://github.com/sched-ext/scx/tree/main",children:"sched_ext"}),", which is a Linux kernel feature which enables implementing kernel thread schedulers in BPF and dynamically loading them. ",(0,i.jsx)(s.a,{href:"https://github.com/sched-ext/scx/tree/main",children:"Read more about sched_ext"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(s.p,{children:"scx_lavd is a BPF scheduler that implements an LAVD (Latency-criticality Aware\nVirtual Deadline) scheduling algorithm. While LAVD is new and still evolving,\nits core ideas are 1) measuring how much a task is latency critical and 2)\nleveraging the task's latency-criticality information in making various\nscheduling decisions (e.g., task's deadline, time slice, etc.). As the name\nimplies, LAVD is based on the foundation of deadline scheduling. This scheduler\nconsists of the BPF part and the rust part. The BPF part makes all the\nscheduling decisions; the rust part provides high-level information (e.g., CPU\ntopology) to the BPF code, loads the BPF code and conducts other chores (e.g.,\nprinting sampled scheduling decisions)."}),"\n",(0,i.jsx)(s.h2,{id:"typical-use-case",children:"Typical Use Case"}),"\n",(0,i.jsx)(s.p,{children:"scx_lavd is initially motivated by gaming workloads. It aims to improve\ninteractivity and reduce stuttering while playing games on Linux. Hence, this\nscheduler's typical use case involves highly interactive applications, such as\ngaming, which requires high throughput and low tail latencies."}),"\n",(0,i.jsx)(s.h2,{id:"production-ready",children:"Production Ready?"}),"\n",(0,i.jsx)(s.p,{children:"Yes, scx_lavd should be performant across various CPU architectures. It creates\na separate scheduling domain per-LLC, per-core type (e.g., P or E core on\nIntel, big or LITTLE on ARM), and per-NUMA domain, so the default balanced\nprofile or autopilot mode should be performant. It mainly targets single CCX\n/ single-socket systems."})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453:(e,s,t)=>{t.d(s,{R:()=>c,x:()=>r});var n=t(6540);const i={},a=n.createContext(i);function c(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.