From 234b743d522883f941471596df14ba45a1a0afd3 Mon Sep 17 00:00:00 2001 From: Sarkar Date: Wed, 11 Jun 2025 08:39:50 +0530 Subject: [PATCH] Added workaround for query kernel time --- tools/unitrace/src/levelzero/ze_collector.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/unitrace/src/levelzero/ze_collector.h b/tools/unitrace/src/levelzero/ze_collector.h index 2592ce2..6cf1726 100644 --- a/tools/unitrace/src/levelzero/ze_collector.h +++ b/tools/unitrace/src/levelzero/ze_collector.h @@ -2488,10 +2488,20 @@ class ZeCollector { } } else { - ze_result_t status = ZE_FUNC(zeEventQueryKernelTimestamp)(command->event_, ×tamp); - if (status != ZE_RESULT_SUCCESS) { - std::cerr << "[ERROR] Unable to query event for timestamps" << std::endl; - return; + // Workaround: There is a L0 bug found on LNL where query timestamp values are bad hence retrying it few times. + const uint8_t MAX_RETRY = 10; + uint8_t retry_query_event_count = 0; + do { + ze_result_t status = ZE_FUNC(zeEventQueryKernelTimestamp)(command->event_, ×tamp); + if (status != ZE_RESULT_SUCCESS) { + std::cerr << "[ERROR] Unable to query event for timestamps" << std::endl; + return; + } + retry_query_event_count++; + } while((timestamp.global.kernelStart > timestamp.global.kernelEnd) && retry_query_event_count < MAX_RETRY); + + if (timestamp.global.kernelStart > timestamp.global.kernelEnd) { + std::cerr << "[WARNING] zeEventQueryKernelTimestamp has returned unexpect kernel timings" << std::endl; } }