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