@@ -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