• Tejun Heo's avatar
    sched_ext: Add scx_simple and scx_example_qmap example schedulers · 2a52ca7c
    Tejun Heo authored
    Add two simple example BPF schedulers - simple and qmap.
    
    * simple: In terms of scheduling, it behaves identical to not having any
      operation implemented at all. The two operations it implements are only to
      improve visibility and exit handling. On certain homogeneous
      configurations, this actually can perform pretty well.
    
    * qmap: A fixed five level priority scheduler to demonstrate queueing PIDs
      on BPF maps for scheduling. While not very practical, this is useful as a
      simple example and will be used to demonstrate different features.
    
    v7: - Compat helpers stripped out in prepartion of upstreaming as the
          upstreamed patchset will be the baselinfe. Utility macros that can be
          used to implement compat features are kept.
    
        - Explicitly disable map autoattach on struct_ops to avoid trying to
          attach twice while maintaining compatbility with older libbpf.
    
    v6: - Common header files reorganized and cleaned up. Compat helpers are
          added to demonstrate how schedulers can maintain backward
          compatibility with older kernels while making use of newly added
          features.
    
        - simple_select_cpu() added to keep track of the number of local
          dispatches. This is needed because the default ops.select_cpu()
          implementation is updated to dispatch directly and won't call
          ops.enqueue().
    
        - Updated to reflect the sched_ext API changes. Switching all tasks is
          the default behavior now and scx_qmap supports partial switching when
          `-p` is specified.
    
        - tools/sched_ext/Kconfig dropped. This will be included in the doc
          instead.
    
    v5: - Improve Makefile. Build artifects are now collected into a separate
          dir which change be changed. Install and help targets are added and
          clean actually cleans everything.
    
        - MEMBER_VPTR() improved to improve access to structs. ARRAY_ELEM_PTR()
          and RESIZEABLE_ARRAY() are added to support resizable arrays in .bss.
    
        - Add scx_common.h which provides common utilities to user code such as
          SCX_BUG[_ON]() and RESIZE_ARRAY().
    
        - Use SCX_BUG[_ON]() to simplify error handling.
    
    v4: - Dropped _example prefix from scheduler names.
    
    v3: - Rename scx_example_dummy to scx_example_simple and restructure a bit
          to ease later additions. Comment updates.
    
        - Added declarations for BPF inline iterators. In the future, hopefully,
          these will be consolidated into a generic BPF header so that they
          don't need to be replicated here.
    
    v2: - Updated with the generic BPF cpumask helpers.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarDavid Vernet <dvernet@meta.com>
    Acked-by: default avatarJosh Don <joshdon@google.com>
    Acked-by: default avatarHao Luo <haoluo@google.com>
    Acked-by: default avatarBarret Rhoden <brho@google.com>
    2a52ca7c
scx_simple.c 2.11 KB