Skip to content

KFunc scx_bpf_select_cpu_and

v6.16

Pick an idle CPU usable by task p, prioritizing those in cpus_allowed

Definition

Can be called from sched_ext_ops.select_cpu, sched_ext_ops.enqueue, or from an unlocked context such as a BPF test_run call, as long as built-in CPU selection is enabled: sched_ext_ops.update_idle is missing or SCX_OPS_KEEP_BUILTIN_IDLE is set.

p, prev_cpu and wake_flag match sched_ext_ops.select_cpu.

Parameters

p: task_struct to select a CPU for

prev_cpu: CPU p was on previously

wake_flags: SCX_WAKE_*, possible values are:

  • SCX_WAKE_FORK (0x02) - Wakeup after exec
  • SCX_WAKE_TTWU (0x04) - Wakeup after fork
  • SCX_WAKE_SYNC (0x08) - Wakeup

cpus_allowed: cpumask of allowed CPUs

flags: SCX_PICK_IDLE_CPU_* flags

Flags

enum scx_pick_idle_cpu_flags {
    SCX_PICK_IDLE_CORE      = 1LLU << 0,
    SCX_PICK_IDLE_IN_NODE   = 1LLU << 1,
};

SCX_PICK_IDLE_CORE: pick a CPU whose SMT siblings are also idle

SCX_PICK_IDLE_IN_NODE: pick a CPU in the same target NUMA node

Returns

The selected idle CPU, which will be automatically awakened upon returning from sched_ext_ops.select_cpu and can be used for direct dispatch, or a negative value if no idle CPU is available.

Signature

s32 scx_bpf_select_cpu_and(struct task_struct *p, s32 prev_cpu, u64 wake_flags, const struct cpumask *cpus_allowed, u64 flags)

Usage

Docs could be improved

This part of the docs is incomplete, contributions are very welcome

Program types

The following program types can make use of this kfunc:

Example

Docs could be improved

This part of the docs is incomplete, contributions are very welcome