Skip to content

Commit 00ac500

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

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

scheds/rust/scx_layered/src/main.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,21 +2442,27 @@ 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");
2455+
24522456
}
24532457
// enable the rest progressively based upon how often they are called
24542458
// for observed workloads
24552459
if opts.gpu_kprobe_level >= 2 {
2456-
compat::cond_kprobe_enable("nvidia_mmap", &skel.progs.kprobe_nvidia_mmap)?;
2460+
compat::cond_kprobe_load("nvidia_mmap", &skel.progs.kprobe_nvidia_mmap)?;
2461+
loaded_kprobes.insert("nvidia_mmap");
24572462
}
24582463
if opts.gpu_kprobe_level >= 3 {
2459-
compat::cond_kprobe_enable("nvidia_poll", &skel.progs.kprobe_nvidia_poll)?;
2464+
compat::cond_kprobe_load("nvidia_poll", &skel.progs.kprobe_nvidia_poll)?;
2465+
loaded_kprobes.insert("nvidia_poll");
24602466
}
24612467
}
24622468

@@ -2690,6 +2696,20 @@ impl<'a> Scheduler<'a> {
26902696

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

0 commit comments

Comments
 (0)