Skip to content

Commit b005d33

Browse files
committed
scx_layered: defer attaching kprobes until after scheduler .init()
1 parent ecec4f5 commit b005d33

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

scheds/rust/scx_layered/src/main.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,21 +2442,26 @@ impl<'a> Scheduler<'a> {
24422442
skel.progs.scx_pmu_switch_tc.set_autoload(membw_tracking);
24432443
skel.progs.scx_pmu_tick_tc.set_autoload(membw_tracking);
24442444

2445+
let mut loaded_kprobes = HashSet::new();
2446+
24452447
// enable autoloads for conditionally loaded things
24462448
// immediately after creating skel (because this is always before loading)
24472449
if opts.enable_gpu_support {
24482450
// by default, enable open if gpu support is enabled.
24492451
// open has been observed to be relatively cheap to kprobe.
24502452
if opts.gpu_kprobe_level >= 1 {
2451-
compat::cond_kprobe_enable("nvidia_open", &skel.progs.kprobe_nvidia_open)?;
2453+
compat::cond_kprobe_load("nvidia_open", &skel.progs.kprobe_nvidia_open)?;
2454+
loaded_kprobes.insert("nvidia_open");
24522455
}
24532456
// enable the rest progressively based upon how often they are called
24542457
// for observed workloads
24552458
if opts.gpu_kprobe_level >= 2 {
2456-
compat::cond_kprobe_enable("nvidia_mmap", &skel.progs.kprobe_nvidia_mmap)?;
2459+
compat::cond_kprobe_load("nvidia_mmap", &skel.progs.kprobe_nvidia_mmap)?;
2460+
loaded_kprobes.insert("nvidia_mmap");
24572461
}
24582462
if opts.gpu_kprobe_level >= 3 {
2459-
compat::cond_kprobe_enable("nvidia_poll", &skel.progs.kprobe_nvidia_poll)?;
2463+
compat::cond_kprobe_load("nvidia_poll", &skel.progs.kprobe_nvidia_poll)?;
2464+
loaded_kprobes.insert("nvidia_poll");
24602465
}
24612466
}
24622467

@@ -2690,6 +2695,20 @@ impl<'a> Scheduler<'a> {
26902695

26912696
// Attach.
26922697
let struct_ops = scx_ops_attach!(skel, layered)?;
2698+
2699+
// Turn on installed kprobes
2700+
if opts.enable_gpu_support {
2701+
if loaded_kprobes.contains("nvidia_open") {
2702+
compat::cond_kprobe_attach("nvidia_open", &skel.progs.kprobe_nvidia_open)?;
2703+
}
2704+
if loaded_kprobes.contains("nvidia_mmap") {
2705+
compat::cond_kprobe_attach("nvidia_mmap", &skel.progs.kprobe_nvidia_mmap)?;
2706+
}
2707+
if loaded_kprobes.contains("nvidia_poll") {
2708+
compat::cond_kprobe_attach("nvidia_poll", &skel.progs.kprobe_nvidia_poll)?;
2709+
}
2710+
}
2711+
26932712
let stats_server = StatsServer::new(stats::server_data()).launch()?;
26942713
let mut gpu_task_handler =
26952714
GpuTaskAffinitizer::new(opts.gpu_affinitize_secs, opts.enable_gpu_affinitize);

0 commit comments

Comments
 (0)