scx_bpf_dsq_nr_queued(9)
π scx_bpf_dsq_nr_queued β Kernel API Manual, section 9 π
okay so bestie, we're in the scx_bpf_dsq_nr_queued(9) era and honestly? it's a little baddie of a kfunc. it does exactly one thing and it does it with main character energy: it tells you how many tasks are chillin' in a DSQ. that's it. that's the whole vibe. β¨
β¨ NAME β¨
scx_bpf_dsq_nr_queued β returns the number of queued tasks. periodt. π
π¦ SYNOPSIS π¦
__bpf_kfunc s32 scx_bpf_dsq_nr_queued (u64 dsq_id , const struct
bpf_prog_aux *aux );
πΈ ARGUMENTS πΈ
dsq_idβ the id of the DSQ, like the address of the party πauxβ ngl this one is sneaky: it's the implicit BPF argument that gives you access tobpf_prog_aux, and it's hidden from BPF progs. you don't pass it, it just shows up. lowkey iconic. π
π DESCRIPTION π
so what it does: it returns the number of tasks in the DSQ matching dsq_id. if nothing matches, you get -ENOENT back β the DSQ said "not found, bestie" π
and here's the cute part: SCX_DSQ_LOCAL resolves to the local DSQ of the rq the current scheduler operation is locked to β like, the rq being dispatched for in ops.dispatch β or, if no rq is locked, it resolves to the calling CPU's local DSQ. iykyk π
π«Ά careful with that one: it's giving "depends on context" energy, so know which rq (if any) you're locked to before you go counting. no cap.
π₯ SEE ALSO π₯
and now, the part where we scream out the whole friend group π fr fr, every single one:
scx_is_descendant(9)rq_is_open(9)scx_fill_cmask_scratch(9)scx_call_op_set_cpumask(9)nldsq_next_task(9)nldsq_cursor_next_task(9)nldsq_cursor_lost_task(9)scx_task_iter_start(9)scx_task_iter_unlock(9)scx_task_iter_relock(9)scx_task_iter_stop(9)scx_task_iter_next(9)scx_task_iter_next_locked(9)scx_dump_event(9)wait_ops_state(9)scx_cpu_valid(9)schedule_deferred(9)schedule_deferred_locked(9)dsq_insert_head(9)set_task_slice_keep_oob(9)scx_task_slice_ended(9)move_remote_task_to_local_dsq(9)unlink_dsq_and_switch_rq_lock(9)move_task_between_dsqs(9)dispatch_to_local_dsq(9)finish_dispatch(9)scx_prio_less(9)__scx_init_task(9)task_dead_and_done(9)scx_tg_sched(9)scx_tg_knob_sched(9)handle_lockup(9)scx_rcu_cpu_stall(9)scx_softlockup(9)scx_hardlockup(9)unbypass_renotify_idle(9)scx_bypass(9)scx_propagate_exit_irq_workfn(9)scx_flush_disable_work(9)print_scx_info(9)scx_bpf_dsq_insert___v2(9)__scx_bpf_dsq_insert_vtime(9)scx_bpf_dispatch_nr_slots(9)scx_bpf_dispatch_cancel(9)scx_bpf_dsq_move_to_local___v2(9)scx_bpf_dsq_move_set_slice(9)scx_bpf_dsq_move_set_vtime(9)scx_bpf_dsq_move(9)scx_bpf_dsq_move_vtime(9)scx_bpf_reenqueue_local(9)scx_bpf_create_dsq(9)scx_bpf_task_set_slice(9)scx_bpf_task_set_dsq_vtime(9)scx_bpf_kick_cpu(9)scx_bpf_kick_cid(9)scx_bpf_destroy_dsq(9)bpf_iter_scx_dsq_new(9)bpf_iter_scx_dsq_next(9)bpf_iter_scx_dsq_destroy(9)scx_bpf_dsq_peek(9)scx_bpf_dsq_reenq(9)scx_bpf_reenqueue_local___v2(9)scx_bpf_exit_bstr(9)scx_bpf_error_bstr(9)scx_bpf_dump_bstr(9)scx_bpf_cpuperf_cap(9)scx_bpf_cidperf_cap(9)scx_bpf_cpuperf_cur(9)scx_bpf_cidperf_cur(9)scx_bpf_cpuperf_set(9)scx_bpf_cidperf_set(9)scx_bpf_nr_node_ids(9)scx_bpf_nr_cpu_ids(9)scx_bpf_nr_cids(9)scx_bpf_nr_online_cids(9)scx_bpf_online_cmask(9)scx_bpf_this_cid(9)scx_bpf_get_possible_cpumask(9)scx_bpf_get_online_cpumask(9)scx_bpf_put_cpumask(9)scx_bpf_task_running(9)scx_bpf_task_cpu(9)scx_bpf_task_cid(9)scx_bpf_locked_rq(9)scx_bpf_cpu_curr(9)scx_bpf_cid_curr(9)scx_bpf_tid_to_task(9)scx_bpf_now(9)scx_bpf_events(9)scx_bpf_task_cgroup(9)
and the kernel file to go peek at is ./kernel/sched/ext/ext.c β that's where the lore lives π
that's the whole page, bestie!! π«Ά source/version is ./kernel/sched/ext and this dropped in October 2026 β so go count some queued tasks, slay, and remember: it's giving s32, it's giving -ENOENT, and it's giving absolutely zero notes. π
β¨π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms