From 9cf137be998d3e526765022bf9fe69ddd63bbf53 Mon Sep 17 00:00:00 2001 From: Emil Tsalapatis Date: Mon, 4 Nov 2024 11:42:23 -0800 Subject: [PATCH] scx_layered: remove ->open from layer struct --- scheds/rust/scx_layered/src/bpf/intf.h | 1 - scheds/rust/scx_layered/src/bpf/main.bpf.c | 20 ++++++++++---------- scheds/rust/scx_layered/src/main.rs | 7 ------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/scheds/rust/scx_layered/src/bpf/intf.h b/scheds/rust/scx_layered/src/bpf/intf.h index fa1b7c9..7ca7be9 100644 --- a/scheds/rust/scx_layered/src/bpf/intf.h +++ b/scheds/rust/scx_layered/src/bpf/intf.h @@ -188,7 +188,6 @@ struct layer { u32 weight; int kind; - bool open; bool preempt; bool preempt_first; bool exclusive; diff --git a/scheds/rust/scx_layered/src/bpf/main.bpf.c b/scheds/rust/scx_layered/src/bpf/main.bpf.c index e6ac281..bf2ba01 100644 --- a/scheds/rust/scx_layered/src/bpf/main.bpf.c +++ b/scheds/rust/scx_layered/src/bpf/main.bpf.c @@ -532,7 +532,7 @@ bool should_try_preempt_first(s32 cand, struct layer *layer, if (!layer->preempt || !layer->preempt_first) return false; - if (!layer->open && !bpf_cpumask_test_cpu(cand, layered_cpumask)) + if (layer->kind == LAYER_KIND_CONFINED && !bpf_cpumask_test_cpu(cand, layered_cpumask)) return false; if (!(cand_cctx = lookup_cpu_ctx(cand)) || cand_cctx->current_preempt) @@ -561,7 +561,7 @@ s32 pick_idle_no_topo(struct task_struct *p, s32 prev_cpu, /* not much to do if bound to a single CPU */ if (p->nr_cpus_allowed == 1 && scx_bpf_test_and_clear_cpu_idle(prev_cpu)) { - if (!layer->open && !bpf_cpumask_test_cpu(prev_cpu, layer_cpumask)) + if (layer->kind == LAYER_KIND_CONFINED && !bpf_cpumask_test_cpu(prev_cpu, layer_cpumask)) lstat_inc(LSTAT_AFFN_VIOL, layer, cctx); return prev_cpu; } @@ -621,7 +621,7 @@ s32 pick_idle_cpu(struct task_struct *p, s32 prev_cpu, /* not much to do if bound to a single CPU */ if (p->nr_cpus_allowed == 1 && scx_bpf_test_and_clear_cpu_idle(prev_cpu)) { - if (!layer->open && !bpf_cpumask_test_cpu(prev_cpu, layer_cpumask)) + if (layer->kind == LAYER_KIND_CONFINED && !bpf_cpumask_test_cpu(prev_cpu, layer_cpumask)) lstat_inc(LSTAT_AFFN_VIOL, layer, cctx); return prev_cpu; } @@ -709,7 +709,7 @@ s32 pick_idle_cpu(struct task_struct *p, s32 prev_cpu, /* * If the layer is an open one, we can try the whole machine. */ - if (layer->open && + if (layer->kind != LAYER_KIND_CONFINED && ((cpu = pick_idle_cpu_from(p->cpus_ptr, prev_cpu, idle_cpumask)) >= 0)) { lstat_inc(LSTAT_OPEN_IDLE, layer, cctx); @@ -1070,7 +1070,7 @@ void BPF_STRUCT_OPS(layered_enqueue, struct task_struct *p, u64 enq_flags) (p->flags & PF_KTHREAD) && p->nr_cpus_allowed < nr_possible_cpus) { struct cpumask *layer_cpumask; - if (!layer->open && + if (layer->kind == LAYER_KIND_CONFINED && (layer_cpumask = lookup_layer_cpumask(tctx->layer)) && !bpf_cpumask_test_cpu(task_cpu, layer_cpumask)) lstat_inc(LSTAT_AFFN_VIOL, layer, cctx); @@ -1087,7 +1087,7 @@ void BPF_STRUCT_OPS(layered_enqueue, struct task_struct *p, u64 enq_flags) * confined layer may fail to be consumed for an indefinite amount of * time. Queue them to the fallback DSQ. */ - if (!layer->open && !tctx->all_cpus_allowed) { + if (layer->kind == LAYER_KIND_CONFINED && !tctx->all_cpus_allowed) { lstat_inc(LSTAT_AFFN_VIOL, layer, cctx); /* * We were previously dispatching to LO_FALLBACK_DSQ for any @@ -1183,7 +1183,7 @@ static bool keep_running(struct cpu_ctx *cctx, struct task_struct *p) * CPU. If confined, keep running if and only if the layer has * idle CPUs. */ - if (layer->open) { + if (layer->kind != LAYER_KIND_CONFINED) { has_idle = !bpf_cpumask_empty(idle_cpumask); } else { struct cpumask *layer_cpumask; @@ -1298,7 +1298,7 @@ void layered_dispatch_no_topo(s32 cpu, struct task_struct *prev) layer = MEMBER_VPTR(layers, [layer_idx]); if (has_budget(costc, layer) == 0) continue; - if (!layer->preempt && layers->open && + if (!layer->preempt && layer->kind != LAYER_KIND_CONFINED && scx_bpf_consume(layer_idx)) return; } @@ -1396,7 +1396,7 @@ int consume_open_no_preempt(struct cost *costc, u32 my_llc_id) u32 llc_id = rotate_llc_id(my_llc_id, llc_idx); dsq_id = layer_dsq_id(layer_idx, llc_id); - if (!layer->preempt && layer->open && scx_bpf_consume(dsq_id)) + if (!layer->preempt && layer->kind != LAYER_KIND_CONFINED && scx_bpf_consume(dsq_id)) return 0; } } @@ -2285,7 +2285,7 @@ s32 BPF_STRUCT_OPS_SLEEPABLE(layered_init) struct layer *layer = &layers[i]; dbg("CFG LAYER[%d][%s] min_exec_ns=%lu open=%d preempt=%d exclusive=%d", - i, layer->name, layer->min_exec_ns, layer->open, layer->preempt, + i, layer->name, layer->min_exec_ns, layer->kind != LAYER_KIND_CONFINED, layer->preempt, layer->exclusive); if (layer->nr_match_ors > MAX_LAYER_MATCH_ORS) { diff --git a/scheds/rust/scx_layered/src/main.rs b/scheds/rust/scx_layered/src/main.rs index 408cd34..eb32c37 100644 --- a/scheds/rust/scx_layered/src/main.rs +++ b/scheds/rust/scx_layered/src/main.rs @@ -1356,13 +1356,6 @@ impl<'a> Scheduler<'a> { } } - match &spec.kind { - LayerKind::Open { .. } | LayerKind::Grouped { .. } => { - layer.open.write(true); - } - _ => {} - } - perf_set |= layer.perf > 0; }