14
14
15
15
MPL_SUPPRESS_OSX_HAS_NO_SYMBOLS_WARNING ;
16
16
17
+ /* 1: loader 0: driver */
18
+ #define USELOADERTRACING 1
19
+
20
+ #if USELOADERTRACING == 1
21
+ #include "level_zero/layers/zel_tracing_api.h"
22
+ #include "level_zero/layers/zel_tracing_register_cb.h"
23
+ #else
24
+ #include <level_zero/zet_api.h>
25
+ #endif
26
+
17
27
#ifdef MPL_HAVE_ZE
18
28
#include <dirent.h>
19
29
#if defined(MPL_HAVE_DRM_I915_DRM_H )
@@ -211,6 +221,14 @@ static pFnzexMemGetIpcHandles zexMemGetIpcHandles = NULL;
211
221
static pFnzexMemOpenIpcHandles zexMemOpenIpcHandles = NULL ;
212
222
/* *INDENT-ON* */
213
223
224
+ /* tracing */
225
+ #if USELOADERTRACING == 1
226
+ static zel_tracer_handle_t freeTracer ;
227
+ #else
228
+ static zet_tracer_exp_handle_t freeTracer ;
229
+ #endif
230
+ static int callbacksEnabled = 0 ;
231
+
214
232
/* Backend-specific functions */
215
233
/* *INDENT-OFF* */
216
234
typedef ze_result_t (* pFnzexDriverImportExternalPointer )(ze_driver_handle_t , void * , size_t );
@@ -235,6 +253,8 @@ static void MPL_event_pool_destroy(void);
235
253
#ifdef ZE_PCI_PROPERTIES_EXT_NAME
236
254
static int search_physical_devices (ze_pci_address_ext_t pci );
237
255
#endif
256
+ static void onEnterMemFree (ze_mem_free_params_t * tracerParams , ze_result_t result ,
257
+ void * traceUserData , void * * tracerInstanceUserData );
238
258
239
259
/* For zeMemFree callbacks */
240
260
static gpu_free_hook_s * free_hook_chain = NULL ;
@@ -648,7 +668,8 @@ int MPL_gpu_init(int debug_summary)
648
668
ipc_max_entries [i ] = max_cache_entries ;
649
669
}
650
670
651
- MPL_gpu_free_hook_register (MPL_ze_ipc_remove_cache_handle );
671
+ if (!callbacksEnabled )
672
+ MPL_gpu_free_hook_register (MPL_ze_ipc_remove_cache_handle );
652
673
} else {
653
674
MPL_gpu_info .specialized_cache = false;
654
675
}
@@ -661,9 +682,11 @@ int MPL_gpu_init(int debug_summary)
661
682
662
683
mypid = getpid ();
663
684
664
- MPL_initlock_lock (& free_hook_mutex );
665
- gpu_mem_hook_init ();
666
- MPL_initlock_unlock (& free_hook_mutex );
685
+ if (!callbacksEnabled ) {
686
+ MPL_initlock_lock (& free_hook_mutex );
687
+ gpu_mem_hook_init ();
688
+ MPL_initlock_unlock (& free_hook_mutex );
689
+ }
667
690
gpu_initialized = 1 ;
668
691
669
692
if (MPL_gpu_info .debug_summary ) {
@@ -1217,6 +1240,45 @@ static int gpu_ze_init_driver(void)
1217
1240
(void * * ) & zexDriverGetHostPointerBaseAddress );
1218
1241
ZE_ERR_CHECK (ret );
1219
1242
1243
+ ret =
1244
+ zeDriverGetExtensionFunctionAddress (ze_driver_handle , "zexMemGetIpcHandles" ,
1245
+ (void * * ) & zexMemGetIpcHandles );
1246
+ if (ZE_RESULT_SUCCESS != ret )
1247
+ zexMemGetIpcHandles = NULL ;
1248
+
1249
+ ret =
1250
+ zeDriverGetExtensionFunctionAddress (ze_driver_handle , "zexMemOpenIpcHandles" ,
1251
+ (void * * ) & zexMemOpenIpcHandles );
1252
+ if (ZE_RESULT_SUCCESS != ret )
1253
+ zexMemOpenIpcHandles = NULL ;
1254
+
1255
+ /* tracing */
1256
+ if (likely (MPL_gpu_info .specialized_cache )) {
1257
+ #if USELOADERTRACING == 1
1258
+ zel_tracer_desc_t tracerDesc = { ZEL_STRUCTURE_TYPE_TRACER_DESC , NULL , NULL };
1259
+ ret = zelTracerCreate (& tracerDesc , & freeTracer );
1260
+ if (ret == ZE_RESULT_SUCCESS ) {
1261
+ callbacksEnabled = 1 ;
1262
+ zelTracerMemFreeRegisterCallback (freeTracer , ZEL_REGISTER_PROLOGUE , onEnterMemFree );
1263
+ zelTracerSetEnabled (freeTracer , true);
1264
+ if (MPL_gpu_info .debug_summary )
1265
+ printf ("ZE loader tracing is enabled.\n" );
1266
+ }
1267
+ #else
1268
+ zet_tracer_exp_desc_t tracerDesc = { ZET_STRUCTURE_TYPE_TRACER_EXP_DESC , NULL , NULL };
1269
+ ret = zetTracerExpCreate (ze_context , & tracerDesc , & freeTracer );
1270
+ if (ret == ZE_RESULT_SUCCESS ) {
1271
+ callbacksEnabled = 1 ;
1272
+ ze_callbacks_t prologCbs = { };
1273
+ prologCbs .Mem .pfnFreeCb = onEnterMemFree ;
1274
+ zetTracerExpSetPrologues (freeTracer , & prologCbs );
1275
+ zetTracerExpSetEnabled (freeTracer , true);
1276
+ if (MPL_gpu_info .debug_summary )
1277
+ printf ("ZE driver tracing is enabled. \n" );
1278
+ }
1279
+ #endif
1280
+ }
1281
+
1220
1282
fn_exit :
1221
1283
MPL_free (all_drivers );
1222
1284
return ret_error ;
@@ -1386,6 +1448,17 @@ int MPL_gpu_finalize(void)
1386
1448
MPL_free (ipc_lru_mapped_order_head );
1387
1449
MPL_free (ipc_lru_mapped_order_tail );
1388
1450
MPL_free (ipc_curr_mapped_entries );
1451
+
1452
+ /* tracing */
1453
+ if (callbacksEnabled ) {
1454
+ #if USELOADERTRACING == 1
1455
+ zelTracerSetEnabled (freeTracer , false);
1456
+ zelTracerDestroy (freeTracer );
1457
+ #else
1458
+ zetTracerExpSetEnabled (freeTracer , false);
1459
+ zetTracerExpDestroy (freeTracer );
1460
+ #endif
1461
+ }
1389
1462
}
1390
1463
1391
1464
MPL_free (ipc_max_entries );
@@ -2754,6 +2827,17 @@ ze_result_t ZE_APICALL zeMemFree(ze_context_handle_t hContext, void *dptr)
2754
2827
return (result );
2755
2828
}
2756
2829
2830
+ /* tracing */
2831
+ static void onEnterMemFree (ze_mem_free_params_t * tracerParams , ze_result_t result ,
2832
+ void * traceUserData , void * * tracerInstanceUserData )
2833
+ {
2834
+ if (MPL_gpu_info .debug_summary == 2 ) {
2835
+ printf ("GPU memory being freed: %lx\n" , (unsigned long int ) * tracerParams -> pptr );
2836
+ }
2837
+ MPL_ze_ipc_remove_cache_handle (* tracerParams -> pptr );
2838
+ * tracerInstanceUserData = NULL ;
2839
+ }
2840
+
2757
2841
/* ZE-Specific Functions */
2758
2842
2759
2843
#ifdef ZE_PCI_PROPERTIES_EXT_NAME
0 commit comments