@@ -244,6 +244,55 @@ int GPU_fdinfo::get_gpu_load()
244
244
return result;
245
245
}
246
246
247
+ void GPU_fdinfo::find_intel_gt_dir ()
248
+ {
249
+ std::string device = " /sys/bus/pci/devices/" + pci_dev + " /drm" ;
250
+
251
+ auto dir_iterator = fs::directory_iterator (device);
252
+
253
+ // Find first dir which starts with name "card"
254
+ for (const auto & entry : fs::directory_iterator (device)) {
255
+ auto path = entry.path ().string ();
256
+ if (path.substr (device.size () + 1 , 4 ) == " card" ) {
257
+ device = path;
258
+ break ;
259
+ }
260
+ }
261
+
262
+ device += " /gt_cur_freq_mhz" ;
263
+
264
+ if (!fs::exists (device)) {
265
+ SPDLOG_WARN (
266
+ " Intel gt file ({}) not found. GPU clock will not be available." ,
267
+ device
268
+ );
269
+ return ;
270
+ }
271
+
272
+ gpu_clock_stream.open (device);
273
+
274
+ if (!gpu_clock_stream.good ())
275
+ SPDLOG_WARN (" Intel gt dir: failed to open {}" , device);
276
+ }
277
+
278
+ int GPU_fdinfo::get_gpu_clock ()
279
+ {
280
+ // Only i915 currently supported
281
+ if (module != " i915" || !gpu_clock_stream.is_open ())
282
+ return 0 ;
283
+
284
+ std::string clock_str;
285
+
286
+ gpu_clock_stream.seekg (0 );
287
+
288
+ std::getline (gpu_clock_stream, clock_str);
289
+
290
+ if (clock_str.empty ())
291
+ return 0 ;
292
+
293
+ return std::stoi (clock_str);
294
+ }
295
+
247
296
void GPU_fdinfo::main_thread ()
248
297
{
249
298
while (!stop_thread) {
@@ -255,6 +304,7 @@ void GPU_fdinfo::main_thread()
255
304
metrics.load = get_gpu_load ();
256
305
metrics.memoryUsed = get_memory_used ();
257
306
metrics.powerUsage = get_power_usage ();
307
+ metrics.CoreClock = get_gpu_clock ();
258
308
259
309
SPDLOG_DEBUG (
260
310
" pci_dev = {}, pid = {}, module = {}, load = {}, mem = {}, power = {}" ,
0 commit comments