fix: Get Pci and Memory timestamp from PMT telemetry with correct unit

Related-To: NEO-13237

Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
shubham kumar
2024-11-15 13:56:53 +00:00
committed by Compute-Runtime-Automation
parent 1809afeb96
commit ee9af40a27
4 changed files with 37 additions and 6 deletions

View File

@@ -713,7 +713,21 @@ ze_result_t SysmanProductHelperHw<gfxProduct>::getPciStats(zes_pci_stats_t *pSta
}
pStats->packetCounter = packInto64Bit(txPacketCounterH, txPacketCounterL) + packInto64Bit(rxPacketCounterH, rxPacketCounterL);
pStats->timestamp = SysmanDevice::getSysmanTimestamp();
// timestamp calculation
uint32_t timeStampL = 0;
uint32_t timeStampH = 0;
status = pPmt->readValue("GDDR_TELEM_CAPTURE_TIMESTAMP_UPPER", timeStampH);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
status = pPmt->readValue("GDDR_TELEM_CAPTURE_TIMESTAMP_LOWER", timeStampL);
if (status != ZE_RESULT_SUCCESS) {
return status;
}
// timestamp from PMT is in milli seconds
pStats->timestamp = packInto64Bit(timeStampH, timeStampL) * milliSecsToMicroSecs;
return status;
}
@@ -842,7 +856,8 @@ ze_result_t SysmanProductHelperHw<gfxProduct>::getMemoryBandWidth(zes_mem_bandwi
return status;
}
pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL);
// timestamp from PMT is in milli seconds
pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL) * milliSecsToMicroSecs;
return status;
}

View File

@@ -19,6 +19,7 @@ constexpr uint64_t mockRxCounter = 24200000u;
constexpr uint64_t mockTxCounter = 231000000u;
constexpr uint64_t mockRxPacketCounter = 300000u;
constexpr uint64_t mockTxPacketCounter = 200000u;
constexpr uint64_t mockTimestamp = 120000u;
struct PciKmdSysManager : public MockKmdSysManager {
// PciCurrentDevice, PciParentDevice, PciRootPort

View File

@@ -27,7 +27,9 @@ const std::map<std::string, std::pair<uint32_t, uint32_t>> dummyKeyOffsetMap = {
{"rx_pkt_count_lsb", {74, 1}},
{"rx_pkt_count_msb", {73, 1}},
{"tx_pkt_count_lsb", {76, 1}},
{"tx_pkt_count_msb", {75, 1}}}};
{"tx_pkt_count_msb", {75, 1}},
{"GDDR_TELEM_CAPTURE_TIMESTAMP_UPPER", {92, 1}},
{"GDDR_TELEM_CAPTURE_TIMESTAMP_LOWER", {93, 1}}}};
const std::wstring pmtInterfaceName = L"TEST\0";
std::vector<wchar_t> deviceInterfacePci(pmtInterfaceName.begin(), pmtInterfaceName.end());
@@ -351,6 +353,10 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidDeviceHandleWhenGettingZesDevicePciG
*lpBytesReturned = 4;
*static_cast<uint32_t *>(lpOutBuffer) = mockTxPacketCounter;
return true;
case 93:
*lpBytesReturned = 8;
*static_cast<uint32_t *>(lpOutBuffer) = mockTimestamp;
return true;
default:
*lpBytesReturned = 4;
*static_cast<uint32_t *>(lpOutBuffer) = 0;
@@ -364,6 +370,7 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidDeviceHandleWhenGettingZesDevicePciG
EXPECT_EQ(stats.rxCounter, mockRxCounter);
EXPECT_EQ(stats.txCounter, mockTxCounter);
EXPECT_EQ(stats.packetCounter, mockRxPacketCounter + mockTxPacketCounter);
EXPECT_EQ(stats.timestamp, mockTimestamp * milliSecsToMicroSecs);
}
HWTEST2_F(SysmanDevicePciFixture, GivenNullPmtHandleWhenGettingZesDevicePciGetStatsThenCallFails, IsBMG) {
@@ -374,7 +381,7 @@ HWTEST2_F(SysmanDevicePciFixture, GivenNullPmtHandleWhenGettingZesDevicePciGetSt
}
HWTEST2_F(SysmanDevicePciFixture, GivenValidPmtHandleWhenCallingZesDevicePciGetStatsAndIoctlFailsThenCallsFails, IsBMG) {
static int count = 8;
static int count = 10;
VariableBackup<decltype(NEO::SysCalls::sysCallsCreateFile)> psysCallsCreateFile(&NEO::SysCalls::sysCallsCreateFile, [](LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) -> HANDLE {
return reinterpret_cast<HANDLE>(static_cast<uintptr_t>(0x7));
});
@@ -413,6 +420,14 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidPmtHandleWhenCallingZesDevicePciGetS
*lpBytesReturned = 4;
*static_cast<uint32_t *>(lpOutBuffer) = mockTxPacketCounter;
return count == 8 ? false : true;
case 92:
*lpBytesReturned = 4;
*static_cast<uint32_t *>(lpOutBuffer) = 0;
return count == 9 ? false : true;
case 93:
*lpBytesReturned = 4;
*static_cast<uint32_t *>(lpOutBuffer) = mockTimestamp;
return count == 10 ? false : true;
}
return false;
});

View File

@@ -124,7 +124,7 @@ HWTEST2_F(SysmanDeviceMemoryHelperFixture, GivenValidMemoryHandleWhenGettingBand
return true;
case 93:
*lpBytesReturned = 8;
*static_cast<uint32_t *>(lpOutBuffer) = 1230000;
*static_cast<uint32_t *>(lpOutBuffer) = mockMemoryBandwidthTimestamp;
return true;
default:
*lpBytesReturned = 8;
@@ -147,7 +147,7 @@ HWTEST2_F(SysmanDeviceMemoryHelperFixture, GivenValidMemoryHandleWhenGettingBand
EXPECT_EQ(bandwidth.maxBandwidth, static_cast<uint64_t>(mockMemoryMaxBandwidth * megaBytesToBytes * 100));
EXPECT_EQ(bandwidth.readCounter, (6 * mockPmtBandWidthVariableBackupValue * 32) + (6 * mockPmtBandWidthVariableBackupValue * 64));
EXPECT_EQ(bandwidth.writeCounter, (4 * mockPmtBandWidthVariableBackupValue * 32) + (4 * mockPmtBandWidthVariableBackupValue * 64));
EXPECT_EQ(bandwidth.timestamp, mockMemoryBandwidthTimestamp);
EXPECT_EQ(bandwidth.timestamp, mockMemoryBandwidthTimestamp * milliSecsToMicroSecs);
}
}