Skip to content

Commit ae9a4ba

Browse files
fix(sysman): Get Pci and Memory timestamp from PMT telemetry with correct unit
Related-To: NEO-13278 Signed-off-by: Anvesh Bakwad <[email protected]>
1 parent fc1c08a commit ae9a4ba

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

level_zero/sysman/source/shared/linux/product_helper/xe2_hpg_core/bmg/sysman_product_helper_bmg.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -605,14 +605,26 @@ static ze_result_t getPciStatsValues(zes_pci_stats_t *pStats, std::map<std::stri
605605

606606
uint64_t txPacketCounter = packInto64Bit(txPacketCounterMsb, txPacketCounterLsb);
607607

608+
uint32_t timeStampLsb = 0;
609+
if (!PlatformMonitoringTech::readValue(keyOffsetMap, telemNodeDir, "GDDR_TELEM_CAPTURE_TIMESTAMP_LOWER", 0, timeStampLsb)) {
610+
return ZE_RESULT_ERROR_NOT_AVAILABLE;
611+
}
612+
613+
uint32_t timeStampMsb = 0;
614+
if (!PlatformMonitoringTech::readValue(keyOffsetMap, telemNodeDir, "GDDR_TELEM_CAPTURE_TIMESTAMP_UPPER", 0, timeStampMsb)) {
615+
return ZE_RESULT_ERROR_NOT_AVAILABLE;
616+
}
617+
618+
uint64_t timeStamp = packInto64Bit(timeStampMsb, timeStampLsb);
619+
608620
pStats->speed.gen = -1;
609621
pStats->speed.width = -1;
610622
pStats->speed.maxBandwidth = -1;
611623
pStats->replayCounter = 0;
612624
pStats->rxCounter = rxCounter;
613625
pStats->txCounter = txCounter;
614626
pStats->packetCounter = rxPacketCounter + txPacketCounter;
615-
pStats->timestamp = SysmanDevice::getSysmanTimestamp();
627+
pStats->timestamp = timeStamp * milliSecsToMicroSecs;
616628

617629
return ZE_RESULT_SUCCESS;
618630
}
@@ -757,7 +769,7 @@ static ze_result_t getMemoryBandwidthTimestamp(const std::map<std::string, uint6
757769
return ZE_RESULT_ERROR_NOT_AVAILABLE;
758770
}
759771

760-
pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL);
772+
pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL) * milliSecsToMicroSecs;
761773

762774
return ZE_RESULT_SUCCESS;
763775
}

level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_memory_tests.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ HWTEST2_F(SysmanProductHelperMemoryTest, GivenSysmanProductHelperInstanceWhenCal
11631163
outputWriteCounter = (outputWriteCounter * transactionSize) / microFactor;
11641164
EXPECT_EQ(outputWriteCounter, memBandwidth.writeCounter);
11651165

1166-
uint64_t outputTimestamp = packInto64Bit(timeStampUpper, timeStampLower);
1166+
uint64_t outputTimestamp = packInto64Bit(timeStampUpper, timeStampLower) * milliSecsToMicroSecs;
11671167
EXPECT_EQ(outputTimestamp, memBandwidth.timestamp);
11681168

11691169
uint64_t outputMaxBandwidth = vramBandwidth;

level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_pci_tests.cpp

+20-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ constexpr uint64_t mockRxPacketCounterLsbOffset = telem3OffsetValue + 296;
3636
constexpr uint64_t mockRxPacketCounterMsbOffset = telem3OffsetValue + 292;
3737
constexpr uint64_t mockTxPacketCounterLsbOffset = telem3OffsetValue + 304;
3838
constexpr uint64_t mockTxPacketCounterMsbOffset = telem3OffsetValue + 300;
39+
constexpr uint64_t mockTimestampLsbOffset = telem3OffsetValue + 372;
40+
constexpr uint64_t mockTimestampMsbOffset = telem3OffsetValue + 368;
3941

4042
constexpr uint32_t mockRxCounterLsb = 0xA2u;
4143
constexpr uint32_t mockRxCounterMsb = 0xF5u;
@@ -45,6 +47,8 @@ constexpr uint32_t mockRxPacketCounterLsb = 0xA0u;
4547
constexpr uint32_t mockRxPacketCounterMsb = 0xBCu;
4648
constexpr uint32_t mockTxPacketCounterLsb = 0xFAu;
4749
constexpr uint32_t mockTxPacketCounterMsb = 0xFFu;
50+
constexpr uint32_t mockTimestampLsb = 0xCDu;
51+
constexpr uint32_t mockTimestampMsb = 0xEFu;
4852

4953
using SysmanProductHelperPciTest = SysmanDeviceFixture;
5054

@@ -102,6 +106,12 @@ static ssize_t mockPreadSuccess(int fd, void *buf, size_t count, off_t offset) {
102106
case mockTxPacketCounterMsbOffset:
103107
memcpy(buf, &mockTxPacketCounterMsb, count);
104108
break;
109+
case mockTimestampLsbOffset:
110+
memcpy(buf, &mockTimestampLsb, count);
111+
break;
112+
case mockTimestampMsbOffset:
113+
memcpy(buf, &mockTimestampMsb, count);
114+
break;
105115
}
106116
}
107117
return count;
@@ -187,14 +197,20 @@ HWTEST2_F(SysmanProductHelperPciTest, GivenSysmanProductHelperInstanceWhenGetPci
187197
case mockTxPacketCounterMsbOffset:
188198
count = (readFailCount == 8) ? -1 : sizeof(uint32_t);
189199
break;
200+
case mockTimestampLsbOffset:
201+
count = (readFailCount == 9) ? -1 : sizeof(uint32_t);
202+
break;
203+
case mockTimestampMsbOffset:
204+
count = (readFailCount == 10) ? -1 : sizeof(uint32_t);
205+
break;
190206
}
191207
}
192208
return count;
193209
});
194210

195211
auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(defaultHwInfo->platform.eProductFamily);
196212
zes_pci_stats_t stats = {};
197-
while (readFailCount <= 8) {
213+
while (readFailCount <= 10) {
198214
EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, pSysmanProductHelper->getPciStats(&stats, pLinuxSysmanImp));
199215
readFailCount++;
200216
}
@@ -238,6 +254,9 @@ HWTEST2_F(SysmanProductHelperPciTest, GivenValidSysmanDeviceHandleWhenDeviceGetP
238254
uint64_t mockRxPacketCounter = packInto64Bit(mockRxPacketCounterMsb, mockRxPacketCounterLsb);
239255
uint64_t mockTxPacketCounter = packInto64Bit(mockTxPacketCounterMsb, mockTxPacketCounterLsb);
240256
EXPECT_EQ(mockRxPacketCounter + mockTxPacketCounter, stats.packetCounter);
257+
258+
uint64_t mockFinalTimestamp = packInto64Bit(mockTimestampMsb, mockTimestampLsb) * milliSecsToMicroSecs;
259+
EXPECT_EQ(mockFinalTimestamp, stats.timestamp);
241260
}
242261

243262
HWTEST2_F(SysmanProductHelperPciTest, GivenValidDeviceHandleWhenDeviceGetPciPropertiesIsCalledThenCallSucceeds, IsBMG) {

0 commit comments

Comments
 (0)