Skip to content
Snippets Groups Projects
  1. Sep 26, 2024
  2. Sep 25, 2024
  3. Sep 04, 2024
    • Tejun Heo's avatar
      sched_ext: Add a cgroup scheduler which uses flattened hierarchy · a4103eac
      Tejun Heo authored
      
      This patch adds scx_flatcg example scheduler which implements hierarchical
      weight-based cgroup CPU control by flattening the cgroup hierarchy into a
      single layer by compounding the active weight share at each level.
      
      This flattening of hierarchy can bring a substantial performance gain when
      the cgroup hierarchy is nested multiple levels. in a simple benchmark using
      wrk[8] on apache serving a CGI script calculating sha1sum of a small file,
      it outperforms CFS by ~3% with CPU controller disabled and by ~10% with two
      apache instances competing with 2:1 weight ratio nested four level deep.
      
      However, the gain comes at the cost of not being able to properly handle
      thundering herd of cgroups. For example, if many cgroups which are nested
      behind a low priority parent cgroup wake up around the same time, they may
      be able to consume more CPU cycles than they are entitled to. In many use
      cases, this isn't a real concern especially given the performance gain.
      Also, there are ways to mitigate the problem further by e.g. introducing an
      extra scheduling layer on cgroup delegation boundaries.
      
      v5: - Updated to specify SCX_OPS_HAS_CGROUP_WEIGHT instead of
            SCX_OPS_KNOB_CGROUP_WEIGHT.
      
      v4: - Revert reference counted kptr for cgv_node as the change caused easily
            reproducible stalls.
      
      v3: - Updated to reflect the core API changes including ops.init/exit_task()
            and direct dispatch from ops.select_cpu(). Fixes and improvements
            including additional statistics.
      
          - Use reference counted kptr for cgv_node instead of xchg'ing against
            stash location.
      
          - Dropped '-p' option.
      
      v2: - Use SCX_BUG[_ON]() to simplify error handling.
      
      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>
      a4103eac
Loading