Skip to content

Commit e7d2ac6

Browse files
committed
feature: Add more APIs to L0 Sysman python binding
Added following APIs to python binding: 1. zesDevicePciGetProperties 2. zesDevicePciGetStats 3. zesDeviceEccAvailable 4. zesDeviceEccConfigurable 5. zesDeviceGetEccState 6. zesDeviceSetEccState 7. zesPowerGetLimitsExt 8. zesPowerSetLimitsExt 9. zesFrequencyGetAvailableClocks 10. zesFrequencyGetRange 11. zesFrequencySetRange 12. zesFrequencyGetThrottleTime 13. zesDevicePciGetState 14. zesPowerGetProperties 15. zesPowerGetUsage Signed-off-by: Aviral Nigam <aviral.nigam@intel.com>
1 parent 174d4eb commit e7d2ac6

3 files changed

Lines changed: 66 additions & 1 deletion

File tree

bindings/sysman/python/source/examples/pyzes_black_box_test.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,17 @@ def test_power_module(device_handle, device_index):
10361036
if not check_rc(f"zesPowerGetEnergyCounter(power {i}, second)", rc):
10371037
continue
10381038

1039+
instant_power = c_uint32(0)
1040+
average_power = c_uint32(0)
1041+
rc = pz.zesPowerGetUsage(
1042+
power_handles[i], byref(instant_power), byref(average_power)
1043+
)
1044+
if not check_rc(f"zesPowerGetUsage(power {i})", rc):
1045+
continue
1046+
1047+
print_verbose(f" Instant Power Usage: {instant_power.value} mW")
1048+
print_verbose(f" Average Power Usage: {average_power.value} mW")
1049+
10391050
energy_delta = energy_counter2.energy - energy_counter1.energy
10401051
time_delta = energy_counter2.timestamp - energy_counter1.timestamp
10411052
if time_delta > 0:

bindings/sysman/python/source/pyzes.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def _LoadZeLibrary():
6767
# load the library
6868
libName = "ze_loader"
6969
if sys.platform.startswith("linux"):
70-
libName = "/usr/lib/x86_64-linux-gnu/lib" + libName + ".so.1"
70+
libName = "/usr/lib/x86_64-linux-gnu/lib" + libName + ".so"
7171
else:
7272
# Try multiple common locations for Windows Intel GPU drivers
7373
possible_paths = [
@@ -1178,6 +1178,32 @@ def zesPowerGetEnergyCounter(hPower, pEnergy):
11781178
return retVal
11791179

11801180

1181+
def zesPowerGetUsage(hPower, pInstantPower, pAveragePower):
1182+
"""Wraps API:
1183+
ze_result_t zesPowerGetUsage(
1184+
zes_pwr_handle_t hPower,
1185+
uint32_t* pInstantPower,
1186+
uint32_t* pAveragePower)
1187+
1188+
Parameters:
1189+
hPower: power handle
1190+
pInstantPower: POINTER(c_uint32) - instant power usage in milliwatts
1191+
pAveragePower: POINTER(c_uint32) - average power usage in milliwatts
1192+
Returns:
1193+
ze_result_t - return code only, usage values are filled into the output pointers
1194+
"""
1195+
funcPtr = getFunctionPointerList("zesPowerGetUsage")
1196+
funcPtr.argtypes = [
1197+
zes_pwr_handle_t,
1198+
POINTER(c_uint32),
1199+
POINTER(c_uint32),
1200+
]
1201+
funcPtr.restype = ze_result_t
1202+
1203+
retVal = funcPtr(hPower, pInstantPower, pAveragePower)
1204+
return retVal
1205+
1206+
11811207
def zesPowerGetProperties(hPower, pProperties):
11821208
"""Wraps API:
11831209
ze_result_t zesPowerGetProperties(

bindings/sysman/python/test/unit_tests/test_power.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,34 @@ def mock_get_energy(power_handle, energy_ptr):
7373
mock_get_func.assert_called_with("zesPowerGetEnergyCounter")
7474
mock_func.assert_called_once()
7575

76+
def test_GivenValidPowerHandleWhenCallingZesPowerGetUsageThenCallSucceedsWithUsageData(
77+
self, mock_get_func
78+
):
79+
mock_instant_power = 185000
80+
mock_average_power = 172500
81+
82+
def mock_get_usage(power_handle, instant_power_ptr, average_power_ptr):
83+
instant_power_ptr._obj.value = mock_instant_power
84+
average_power_ptr._obj.value = mock_average_power
85+
return self.pyzes.ZE_RESULT_SUCCESS
86+
87+
mock_func = MagicMock(side_effect=mock_get_usage)
88+
mock_get_func.return_value = mock_func
89+
90+
power_handle = self.pyzes.zes_pwr_handle_t()
91+
instant_power = c_uint32(0)
92+
average_power = c_uint32(0)
93+
94+
result = self.pyzes.zesPowerGetUsage(
95+
power_handle, byref(instant_power), byref(average_power)
96+
)
97+
98+
self.assertEqual(result, self.pyzes.ZE_RESULT_SUCCESS)
99+
self.assertEqual(instant_power.value, mock_instant_power)
100+
self.assertEqual(average_power.value, mock_average_power)
101+
mock_get_func.assert_called_with("zesPowerGetUsage")
102+
mock_func.assert_called_once()
103+
76104
def test_GivenValidPowerHandleWhenCallingZesPowerGetPropertiesThenCallSucceedsWithDomainData(
77105
self, mock_get_func
78106
):

0 commit comments

Comments
 (0)