Skip to content

Commit 656dda2

Browse files
authored
perf: Optimize GPU monitoring display (#11156)
1 parent 63b62f4 commit 656dda2

File tree

15 files changed

+314
-521
lines changed

15 files changed

+314
-521
lines changed

agent/app/dto/monitor.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,20 @@ type MonitorGPUSearch struct {
4848
EndTime time.Time `json:"endTime"`
4949
}
5050
type MonitorGPUData struct {
51-
Date []time.Time `json:"date"`
52-
GPUValue []float64 `json:"gpuValue"`
53-
TemperatureValue []float64 `json:"temperatureValue"`
54-
PowerValue []GPUPowerUsageHelper `json:"powerValue"`
55-
MemoryValue []GPUMemoryUsageHelper `json:"memoryValue"`
56-
SpeedValue []int `json:"speedValue"`
57-
}
58-
type GPUPowerUsageHelper struct {
59-
Total float64 `json:"total"`
60-
Used float64 `json:"used"`
61-
Percent float64 `json:"percent"`
62-
}
63-
type GPUMemoryUsageHelper struct {
64-
Total float64 `json:"total"`
65-
Used float64 `json:"used"`
66-
Percent float64 `json:"percent"`
51+
Date []time.Time `json:"date"`
52+
GPUValue []float64 `json:"gpuValue"`
53+
TemperatureValue []float64 `json:"temperatureValue"`
54+
PowerTotal []float64 `json:"powerTotal"`
55+
PowerUsed []float64 `json:"powerUsed"`
56+
PowerPercent []float64 `json:"powerPercent"`
57+
MemoryTotal []float64 `json:"memoryTotal"`
58+
MemoryUsed []float64 `json:"memoryUsed"`
59+
MemoryPercent []float64 `json:"memoryPercent"`
60+
SpeedValue []int `json:"speedValue"`
6761

68-
GPUProcesses []GPUProcess `json:"gpuProcesses"`
62+
GPUProcesses [][]GPUProcess `json:"gpuProcesses"`
6963
}
64+
7065
type GPUProcess struct {
7166
Pid string `json:"pid"`
7267
Type string `json:"type"`

agent/app/service/monitor.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -165,24 +165,27 @@ func (m *MonitorService) LoadGPUMonitorData(req dto.MonitorGPUSearch) (dto.Monit
165165
data.Date = append(data.Date, gpu.CreatedAt)
166166
data.GPUValue = append(data.GPUValue, gpu.GPUUtil)
167167
data.TemperatureValue = append(data.TemperatureValue, gpu.Temperature)
168-
powerItem := dto.GPUPowerUsageHelper{
169-
Total: gpu.MaxPowerLimit,
170-
Used: gpu.PowerDraw,
171-
}
172-
if powerItem.Total != 0 {
173-
powerItem.Percent = powerItem.Used / powerItem.Total
168+
data.PowerUsed = append(data.PowerUsed, gpu.PowerDraw)
169+
data.PowerTotal = append(data.PowerTotal, gpu.MaxPowerLimit)
170+
if gpu.MaxPowerLimit != 0 {
171+
data.PowerPercent = append(data.PowerPercent, gpu.PowerDraw/gpu.MaxPowerLimit*100)
172+
} else {
173+
data.PowerPercent = append(data.PowerPercent, float64(0))
174174
}
175-
data.PowerValue = append(data.PowerValue, powerItem)
176-
memItem := dto.GPUMemoryUsageHelper{
177-
Total: gpu.MemTotal,
178-
Used: gpu.MemUsed,
179-
Percent: gpu.MemUsed / gpu.MemTotal * 100,
175+
176+
data.MemoryTotal = append(data.MemoryTotal, gpu.MemTotal)
177+
data.MemoryUsed = append(data.MemoryUsed, gpu.MemUsed)
178+
if gpu.MemTotal != 0 {
179+
data.MemoryPercent = append(data.MemoryPercent, gpu.MemUsed/gpu.MemTotal*100)
180+
} else {
181+
data.MemoryPercent = append(data.MemoryPercent, float64(0))
180182
}
181183
var process []dto.GPUProcess
182184
if err := json.Unmarshal([]byte(gpu.Processes), &process); err == nil {
183-
memItem.GPUProcesses = process
185+
data.GPUProcesses = append(data.GPUProcesses, process)
186+
} else {
187+
data.GPUProcesses = append(data.GPUProcesses, []dto.GPUProcess{})
184188
}
185-
data.MemoryValue = append(data.MemoryValue, memItem)
186189
data.SpeedValue = append(data.SpeedValue, gpu.FanSpeed)
187190
}
188191
return data, nil
@@ -606,7 +609,6 @@ func saveXPUDataToDB() {
606609
for _, xpuItem := range xpuInfo.Xpu {
607610
item := model.MonitorGPU{
608611
ProductName: fmt.Sprintf("%d - %s", xpuItem.Basic.DeviceID, xpuItem.Basic.DeviceName),
609-
GPUUtil: loadGPUInfoFloat(xpuItem.Stats.MemoryUtil),
610612
Temperature: loadGPUInfoFloat(xpuItem.Stats.Temperature),
611613
PowerDraw: loadGPUInfoFloat(xpuItem.Stats.Power),
612614
MemUsed: loadGPUInfoFloat(xpuItem.Stats.MemoryUsed),

frontend/src/api/interface/host.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -174,20 +174,14 @@ export namespace Host {
174174
date: Array<Date>;
175175
gpuValue: Array<number>;
176176
temperatureValue: Array<number>;
177-
powerValue: Array<GPUPowerUsageHelper>;
178-
memoryValue: Array<GPUMemoryUsageHelper>;
177+
powerTotal: Array<number>;
178+
powerUsed: Array<number>;
179+
powerPercent: Array<number>;
180+
memoryTotal: Array<number>;
181+
memoryUsed: Array<number>;
182+
memoryPercent: Array<number>;
179183
speedValue: Array<number>;
180-
}
181-
export interface GPUPowerUsageHelper {
182-
total: number;
183-
used: number;
184-
percent: number;
185-
}
186-
export interface GPUMemoryUsageHelper {
187-
total: number;
188-
used: number;
189-
percent: number;
190-
gpuProcesses: Array<GPUProcess>;
184+
gpuProcesses: Array<Array<GPUProcess>>;
191185
}
192186
export interface GPUProcess {
193187
pid: string;

frontend/src/lang/modules/en.ts

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -680,42 +680,29 @@ const message = {
680680
whiteListHelper: 'Restrict access to only IPs in the whitelist',
681681
},
682682
gpu: {
683-
gpu: 'GPU Monitor',
684-
base: 'Basic Information',
685-
gpuHelper: 'NVIDIA-SMI or XPU-SMI command not detected on the current system. Please check and try again!',
686-
driverVersion: 'Driver Version',
687-
cudaVersion: 'CUDA Version',
683+
gpu: 'GPU Monitoring',
684+
gpuHelper: 'The system did not detect NVIDIA-SMI or XPU-SMI commands. Please check and try again!',
688685
process: 'Process Information',
689686
type: 'Type',
690687
typeG: 'Graphics',
691688
typeC: 'Compute',
692-
typeCG: 'Compute + Graphics',
689+
typeCG: 'Compute+Graphics',
693690
processName: 'Process Name',
694-
processMemoryUsage: 'Memory Usage',
695-
temperatureHelper: 'High GPU temperature can cause GPU frequency throttling',
696-
performanceStateHelper: 'From P0 (maximum performance) to P12 (minimum performance)',
697-
busID: 'Bus ID',
698-
persistenceMode: 'Persistence Mode',
699-
enabled: 'Enabled',
700-
disabled: 'Disabled',
701-
persistenceModeHelper:
702-
'Persistence mode allows quicker task responses but increases standby power consumption.',
703-
displayActive: 'Graphics Card Initialized',
704-
displayActiveT: 'Yes',
705-
displayActiveF: 'No',
706-
ecc: 'Error Correction and Check Technology',
707-
computeMode: 'Compute Mode',
708-
default: 'Default',
709-
exclusiveProcess: 'Exclusive Process',
710-
exclusiveThread: 'Exclusive Thread',
711-
prohibited: 'Prohibited',
712-
defaultHelper: 'Default: Processes can execute concurrently',
713-
exclusiveProcessHelper:
714-
'Exclusive Process: Only one CUDA context can use the GPU, but can be shared by multiple threads',
715-
exclusiveThreadHelper: 'Exclusive Thread: Only one thread in a CUDA context can use the GPU',
716-
prohibitedHelper: 'Prohibited: Processes are not allowed to execute simultaneously',
717-
migModeHelper: 'Used to create MIG instances for physical isolation of the GPU at the user level.',
718-
migModeNA: 'Not Supported',
691+
shr: 'Shared Memory',
692+
temperatureHelper: 'High GPU temperature may cause GPU frequency reduction',
693+
gpuUtil: 'GPU Utilization',
694+
temperature: 'Temperature',
695+
performanceState: 'Performance State',
696+
powerUsage: 'Power Consumption',
697+
memoryUsage: 'Memory Utilization',
698+
fanSpeed: 'Fan Speed',
699+
power: 'Power',
700+
powerCurrent: 'Current Power',
701+
powerLimit: 'Power Limit',
702+
memory: 'Memory',
703+
memoryUsed: 'Memory Used',
704+
memoryTotal: 'Total Memory',
705+
percent: 'Utilization',
719706
},
720707
mcp: {
721708
server: 'MCP Server',
@@ -1235,13 +1222,6 @@ const message = {
12351222
down: 'Down',
12361223
interval: 'Collection Interval',
12371224
intervalHelper: 'Please enter an appropriate monitoring collection interval (5 seconds - 12 hours)',
1238-
1239-
gpuUtil: 'GPU Utilization',
1240-
temperature: 'Temperature',
1241-
performanceState: 'Performance state',
1242-
powerUsage: 'Power usage',
1243-
memoryUsage: 'Memory usage',
1244-
fanSpeed: 'Fan speed',
12451225
},
12461226
terminal: {
12471227
local: 'Local',

frontend/src/lang/modules/es-es.ts

Lines changed: 20 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -679,43 +679,29 @@ const message = {
679679
whiteListHelper: 'Restringir el acceso solo a las IP incluidas en la lista blanca',
680680
},
681681
gpu: {
682-
gpu: 'Monitor de GPU',
683-
base: 'Información básica',
684-
gpuHelper:
685-
'No se detectó el comando NVIDIA-SMI o XPU-SMI en el sistema actual. ¡Por favor verifique e intente nuevamente!',
686-
driverVersion: 'Versión del controlador',
687-
cudaVersion: 'Versión de CUDA',
688-
process: 'Información del proceso',
682+
gpu: 'Monitoreo de GPU',
683+
gpuHelper: 'El sistema no detectó comandos NVIDIA-SMI o XPU-SMI. ¡Compruebe e inténtelo de nuevo!',
684+
process: 'Información del Proceso',
689685
type: 'Tipo',
690686
typeG: 'Gráficos',
691687
typeC: 'Cómputo',
692-
typeCG: 'Cómputo + Gráficos',
693-
processName: 'Nombre del proceso',
694-
processMemoryUsage: 'Uso de memoria',
695-
temperatureHelper: 'Una temperatura alta de la GPU puede causar reducción de frecuencia',
696-
performanceStateHelper: 'Desde P0 (máximo rendimiento) hasta P12 (mínimo rendimiento)',
697-
busID: 'ID del bus',
698-
persistenceMode: 'Modo de persistencia',
699-
enabled: 'Habilitado',
700-
disabled: 'Deshabilitado',
701-
persistenceModeHelper:
702-
'El modo de persistencia permite respuestas más rápidas, pero incrementa el consumo en reposo.',
703-
displayActive: 'Tarjeta gráfica inicializada',
704-
displayActiveT: 'Sí',
705-
displayActiveF: 'No',
706-
ecc: 'Tecnología de corrección y verificación de errores',
707-
computeMode: 'Modo de cómputo',
708-
default: 'Predeterminado',
709-
exclusiveProcess: 'Proceso exclusivo',
710-
exclusiveThread: 'Hilo exclusivo',
711-
prohibited: 'Prohibido',
712-
defaultHelper: 'Predeterminado: Los procesos pueden ejecutarse simultáneamente',
713-
exclusiveProcessHelper:
714-
'Proceso exclusivo: Solo un contexto CUDA puede usar la GPU, pero puede ser compartido por varios hilos',
715-
exclusiveThreadHelper: 'Hilo exclusivo: Solo un hilo en un contexto CUDA puede usar la GPU',
716-
prohibitedHelper: 'Prohibido: No se permite la ejecución simultánea de procesos',
717-
migModeHelper: 'Se utiliza para crear instancias MIG y aislar físicamente la GPU a nivel de usuario.',
718-
migModeNA: 'No compatible',
688+
typeCG: 'Cómputo+Gráficos',
689+
processName: 'Nombre del Proceso',
690+
shr: 'Memoria Compartida',
691+
temperatureHelper: 'La alta temperatura de la GPU puede causar una reducción de la frecuencia de la GPU',
692+
gpuUtil: 'Utilización de GPU',
693+
temperature: 'Temperatura',
694+
performanceState: 'Estado de Rendimiento',
695+
powerUsage: 'Consumo de Energía',
696+
memoryUsage: 'Utilización de Memoria',
697+
fanSpeed: 'Velocidad del Ventilador',
698+
power: 'Energía',
699+
powerCurrent: 'Energía Actual',
700+
powerLimit: 'Límite de Energía',
701+
memory: 'Memoria',
702+
memoryUsed: 'Memoria Utilizada',
703+
memoryTotal: 'Memoria Total',
704+
percent: 'Utilización',
719705
},
720706
mcp: {
721707
server: 'Servidor MCP',
@@ -1243,12 +1229,6 @@ const message = {
12431229
down: 'Bajada',
12441230
interval: 'Intervalo de Recolección',
12451231
intervalHelper: 'Ingrese un intervalo de recolección de monitoreo apropiado (5 segundos - 12 horas)',
1246-
gpuUtil: 'Uso de GPU',
1247-
temperature: 'Temperatura',
1248-
performanceState: 'Estado de rendimiento',
1249-
powerUsage: 'Consumo de energía',
1250-
memoryUsage: 'Uso de memoria',
1251-
fanSpeed: 'Velocidad del ventilador',
12521232
},
12531233
terminal: {
12541234
local: 'Local',

frontend/src/lang/modules/ja.ts

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -667,42 +667,30 @@ const message = {
667667
whiteListHelper: 'ホワイトリスト内のIPのみアクセスを許可する',
668668
},
669669
gpu: {
670-
gpu: 'GPUモニター',
671-
base: '基本情報',
670+
gpu: 'GPU 監視',
672671
gpuHelper:
673-
'現在のシステムでNVIDIA-SMIまたはXPU-SMIコマンドが検出されませんでした。確認して再試行してください!',
674-
driverVersion: 'ドライバーバージョン',
675-
cudaVersion: 'CUDAバージョン',
672+
'システムが NVIDIA-SMI または XPU-SMI コマンドを検出しませんでした。確認して再試行してください!',
676673
process: 'プロセス情報',
677674
type: 'タイプ',
678675
typeG: 'グラフィックス',
679676
typeC: 'コンピュート',
680-
typeCG: 'コンピュート + グラフィックス',
677+
typeCG: 'コンピュート+グラフィックス',
681678
processName: 'プロセス名',
682-
processMemoryUsage: 'メモリ使用量',
683-
temperatureHelper: '高いGPU温度はGPUの周波数制限を引き起こす可能性があります',
684-
performanceStateHelper: 'P0(最大性能)からP12(最小性能)まで',
685-
busID: 'バスID',
686-
persistenceMode: '永続モード',
687-
enabled: '有効',
688-
disabled: '無効',
689-
persistenceModeHelper: '永続モードはタスクの応答速度を速くしますが、待機時の消費電力が増加します。',
690-
displayActive: 'グラフィックカード初期化済み',
691-
displayActiveT: 'はい',
692-
displayActiveF: 'いいえ',
693-
ecc: 'エラー訂正およびチェック技術',
694-
computeMode: 'コンピュートモード',
695-
default: 'デフォルト',
696-
exclusiveProcess: '専用プロセス',
697-
exclusiveThread: '専用スレッド',
698-
prohibited: '禁止',
699-
defaultHelper: 'デフォルト:プロセスは並行して実行できます',
700-
exclusiveProcessHelper:
701-
'専用プロセス:1つのCUDAコンテキストのみがGPUを使用できますが、複数のスレッドで共有できます',
702-
exclusiveThreadHelper: '専用スレッド:CUDAコンテキスト内の1つのスレッドのみがGPUを使用できます',
703-
prohibitedHelper: '禁止:プロセスは同時に実行できません',
704-
migModeHelper: 'ユーザーレベルでGPUの物理的分離を行うためのMIGインスタンスを作成するために使用されます。',
705-
migModeNA: 'サポートされていません',
679+
shr: '共有メモリ',
680+
temperatureHelper: 'GPU 温度が高いと GPU 周波数が低下する可能性があります',
681+
gpuUtil: 'GPU 使用率',
682+
temperature: '温度',
683+
performanceState: 'パフォーマンス状態',
684+
powerUsage: '消費電力',
685+
memoryUsage: 'メモリ使用率',
686+
fanSpeed: 'ファン速度',
687+
power: '電力',
688+
powerCurrent: '現在の電力',
689+
powerLimit: '電力上限',
690+
memory: 'メモリ',
691+
memoryUsed: '使用メモリ',
692+
memoryTotal: '総メモリ',
693+
percent: '使用率',
706694
},
707695
mcp: {
708696
server: 'MCP サーバー',
@@ -1199,13 +1187,6 @@ const message = {
11991187
down: '下',
12001188
interval: '収集間隔',
12011189
intervalHelper: '適切な監視収集間隔を入力してください(5秒 - 12時間)',
1202-
1203-
gpuUtil: 'GPU利用',
1204-
temperature: '温度',
1205-
performanceState: 'パフォーマンス状態',
1206-
powerUsage: '電力使用量',
1207-
memoryUsage: 'メモリの使用',
1208-
fanSpeed: 'ファンの速度',
12091190
},
12101191
terminal: {
12111192
local: 'ローカル',

0 commit comments

Comments
 (0)