Refactor graphic collectors

This commit is contained in:
Meliox 2026-06-07 01:53:47 +02:00
parent 8ad182943c
commit d45407fc7e
2 changed files with 30 additions and 45 deletions

View File

@ -20,12 +20,6 @@ our @EXPORT_OK = qw(
sub get_nvidia_gpu_devices { sub get_nvidia_gpu_devices {
my @devices = (); my @devices = ();
unless (check_executable('/usr/bin/nvidia-smi', 'NVIDIA',
$config{debug}{nvidia_mode},
$config{debug}{nvidia_devices_file})) {
return @devices;
}
if ($config{debug}{nvidia_mode} && -f $config{debug}{nvidia_devices_file}) { if ($config{debug}{nvidia_mode} && -f $config{debug}{nvidia_devices_file}) {
debug(__LINE__, "Debug mode: reading NVIDIA GPU devices from $config{debug}{nvidia_devices_file}"); debug(__LINE__, "Debug mode: reading NVIDIA GPU devices from $config{debug}{nvidia_devices_file}");
if (open my $fh, '<', $config{debug}{nvidia_devices_file}) { if (open my $fh, '<', $config{debug}{nvidia_devices_file}) {

View File

@ -281,59 +281,42 @@ sub _start_graphics_collectors {
debug(__LINE__, "Starting graphics collectors"); debug(__LINE__, "Starting graphics collectors");
my (@all_devices, @all_types, @all_collector_subs); my (@all_devices, @all_types, @all_collector_subs);
my @nvidia_devices;
# Intel # Intel (each GPU has its own collector)
if ($config{gpu}{intel_enabled}) { if ($config{gpu}{intel_enabled} && check_executable('/usr/bin/intel_gpu_top', 'Intel')) {
debug(__LINE__, "Intel GPU support enabled");
return unless check_executable('/usr/bin/intel_gpu_top', 'Intel');
my @intel_devices = get_intel_gpu_devices(); my @intel_devices = get_intel_gpu_devices();
if (@intel_devices) { for my $device (@intel_devices) {
debug(__LINE__, "Found " . scalar(@intel_devices) . " Intel GPU device(s)"); push @all_devices, $device;
for my $device (@intel_devices) { push @all_types, 'intel';
push @all_devices, $device; push @all_collector_subs, \&collector_for_intel_device;
push @all_types, 'intel';
push @all_collector_subs, \&collector_for_intel_device;
}
} else {
debug(__LINE__, "No Intel GPU devices found");
} }
} }
# AMD (future) # AMD (each GPU has its own collector)
if ($config{gpu}{amd_enabled}) { if ($config{gpu}{amd_enabled} && check_executable('/usr/bin/rocm-smi', 'AMD')) {
debug(__LINE__, "AMD GPU support enabled");
return unless check_executable('/usr/bin/rocm-smi', 'AMD');
my @amd_devices = get_amd_gpu_devices(); my @amd_devices = get_amd_gpu_devices();
debug(__LINE__, "Got " . scalar(@amd_devices) . " AMD devices");
for my $device (@amd_devices) { for my $device (@amd_devices) {
push @all_devices, $device; push @all_devices, $device;
push @all_types, 'amd'; push @all_types, 'amd';
push @all_collector_subs, \&collector_for_amd_device; push @all_collector_subs, \&collector_for_amd_device;
} }
} }
# NVIDIA (all GPUs collected together in one collector due to nvidia-smi design)
if ($config{gpu}{nvidia_enabled} && check_executable('/usr/bin/nvidia-smi', 'NVIDIA')) {
@nvidia_devices = get_nvidia_gpu_devices();
}
debug(__LINE__, debug(__LINE__,
"Finished detecting devices. Total Intel/AMD collectors to manage: " "Detected: "
. scalar(@all_devices)); . scalar(grep { $_ eq 'intel' } @all_types) . " Intel, "
. scalar(grep { $_ eq 'amd' } @all_types) . " AMD, "
. scalar(@nvidia_devices) . " NVIDIA");
my $started_count = 0; my $started_count = 0;
# NVIDIA — single collector for all GPUs # Start individual collectors for Intel and AMD devices
if ($config{gpu}{nvidia_enabled}) {
debug(__LINE__, "NVIDIA GPU support enabled");
my @nvidia_devices = get_nvidia_gpu_devices();
debug(__LINE__, "Got " . scalar(@nvidia_devices) . " NVIDIA devices");
if (@nvidia_devices) {
my $pid = _start_collector('nvidia-all', 'nvidia',
\&collector_for_nvidia_devices,
\@nvidia_devices);
$started_count++ if $pid;
}
}
for (my $i = 0; $i < @all_devices; $i++) { for (my $i = 0; $i < @all_devices; $i++) {
my $device = $all_devices[$i]; my $device = $all_devices[$i];
my $type = $all_types[$i]; my $type = $all_types[$i];
@ -344,8 +327,16 @@ sub _start_graphics_collectors {
$started_count++ if $pid; $started_count++ if $pid;
} }
# NVIDIA — single collector for all GPUs
if (@nvidia_devices) {
my $pid = _start_collector('nvidia-all', 'nvidia',
\&collector_for_nvidia_devices,
\@nvidia_devices);
$started_count++ if $pid;
}
debug(__LINE__, debug(__LINE__,
"Started/verified $started_count graphics collector(s) (Intel/AMD)"); "Started/verified $started_count graphics collector(s)");
} }
# ============================================================================ # ============================================================================