• Tejun Heo's avatar
    sched_ext: Implement sched_ext_ops.cpu_online/offline() · 60c27fb5
    Tejun Heo authored
    Add ops.cpu_online/offline() which are invoked when CPUs come online and
    offline respectively. As the enqueue path already automatically bypasses
    tasks to the local dsq on a deactivated CPU, BPF schedulers are guaranteed
    to see tasks only on CPUs which are between online() and offline().
    
    If the BPF scheduler doesn't implement ops.cpu_online/offline(), the
    scheduler is automatically exited with SCX_ECODE_RESTART |
    SCX_ECODE_RSN_HOTPLUG. Userspace can implement CPU hotpplug support
    trivially by simply reinitializing and reloading the scheduler.
    
    scx_qmap is updated to print out online CPUs on hotplug events. Other
    schedulers are updated to restart based on ecode.
    
    v3: - The previous implementation added @reason to
          sched_class.rq_on/offline() to distinguish between CPU hotplug events
          and topology updates. This was buggy and fragile as the methods are
          skipped if the current state equals the target state. Instead, add
          scx_rq_[de]activate() which are directly called from
          sched_cpu_de/activate(). This also allows ops.cpu_on/offline() to
          sleep which can be useful.
    
        - ops.dispatch() could be called on a CPU that the BPF scheduler was
          told to be offline. The dispatch patch is updated to bypass in such
          cases.
    
    v2: - To accommodate lock ordering change between scx_cgroup_rwsem and
          cpus_read_lock(), CPU hotplug operations are put into its own SCX_OPI
          block and enabled eariler during scx_ope_enable() so that
          cpus_read_lock() can be dropped before acquiring scx_cgroup_rwsem.
    
        - Auto exit with ECODE added.
    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>
    60c27fb5
user_exit_info.h 3.49 KB