diff --git a/projects/amdsmi/CHANGELOG.md b/projects/amdsmi/CHANGELOG.md
index bea6fc8981..03ee2bbe02 100644
--- a/projects/amdsmi/CHANGELOG.md
+++ b/projects/amdsmi/CHANGELOG.md
@@ -12,6 +12,9 @@ Full documentation for amd_smi_lib is available at [https://rocm.docs.amd.com/](
### Changed
+- **Removed `amdsmi_get_gpu_process_info` from python library**
+amdsmi_get_gpu_process_info was removed from the C library in an earlier build, but the API was still in the python interface
+
- **Updated metrics --clocks**
Output for `amd-smi metric --clock` is updated to reflect each engine and bug fixes for the clock lock status and deep sleep status.
diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py
index ee6159e5ed..31c32f0aa4 100644
--- a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py
+++ b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py
@@ -2576,28 +2576,38 @@ class AMDSMICommands():
raise e
filtered_process_values = []
- for process in process_list:
- try:
- process_info = amdsmi_interface.amdsmi_get_gpu_process_info(args.gpu, process)
- except amdsmi_exception.AmdSmiLibraryException as e:
- process_info = "N/A"
- logging.debug("Failed to get process info for process %s on gpu %s | %s", process, gpu_id, e.get_error_info())
- filtered_process_values.append({'process_info': process_info})
- continue
-
+ for process_info in process_list:
process_info['mem_usage'] = process_info.pop('mem')
process_info['usage'] = process_info.pop('engine_usage')
+ engine_usage_unit = "ns"
+ memory_usage_unit = "B"
+
if self.logger.is_human_readable_format():
process_info['mem_usage'] = self.helpers.convert_bytes_to_readable(process_info['mem_usage'])
- engine_usage_unit = "ns"
for usage_metric in process_info['usage']:
process_info['usage'][usage_metric] = f"{process_info['usage'][usage_metric]} {engine_usage_unit}"
for usage_metric in process_info['memory_usage']:
process_info['memory_usage'][usage_metric] = self.helpers.convert_bytes_to_readable(process_info['memory_usage'][usage_metric])
+ elif self.logger.is_json_format():
+ process_info['mem_usage'] = {"value" : process_info['mem_usage'],
+ "unit" : memory_usage_unit}
+ for usage_metric in process_info['usage']:
+ process_info['usage'][usage_metric] = {"value" : process_info['usage'][usage_metric],
+ "unit" : engine_usage_unit}
+
+ for usage_metric in process_info['memory_usage']:
+ process_info['memory_usage'][usage_metric] = {"value" : process_info['memory_usage'][usage_metric],
+ "unit" : memory_usage_unit}
+
+ filtered_process_values.append({'process_info': process_info})
+
+ if not filtered_process_values:
+ process_info = "N/A"
+ logging.debug("Failed to detect any process on gpu %s", gpu_id)
filtered_process_values.append({'process_info': process_info})
# Arguments will filter the populated processes
@@ -2641,7 +2651,7 @@ class AMDSMICommands():
# Convert and store output by pid for csv format
if self.logger.is_csv_format():
# Check for empty list first
- if filtered_process_values == []:
+ if not filtered_process_values:
self.logger.store_output(args.gpu, 'process_info', 'No running processes detected')
else:
for process_info in filtered_process_values:
@@ -2660,7 +2670,7 @@ class AMDSMICommands():
self.logger.store_output(args.gpu, 'timestamp', int(time.time()))
# Store values in logger.output
- if filtered_process_values == []:
+ if not filtered_process_values:
self.logger.store_output(args.gpu, 'process_info', 'No running processes detected')
else:
for process_info in filtered_process_values:
diff --git a/projects/amdsmi/py-interface/README.md b/projects/amdsmi/py-interface/README.md
index 19454121ae..41468bd9a3 100644
--- a/projects/amdsmi/py-interface/README.md
+++ b/projects/amdsmi/py-interface/README.md
@@ -882,13 +882,21 @@ except AmdSmiException as e:
### amdsmi_get_gpu_process_list
-Description: Returns the list of processes running on the target GPU.
+Description: Returns the list of processes running on the target GPU; May require root level access
Input parameters:
* `processor_handle` device which to query
-Output: List of `amdsmi_proc_info_t` process objects running on the target GPU; can be empty
+Output: List of Dictionaries with the corresponding fields; empty list if no running process are detected
+
+Field | Description
+---|---
+`name` | Name of process
+`pid` | Process ID
+`mem` | Process memory usage
+`engine_usage` |
| Subfield | Description |
| `gfx` | GFX engine usage in ns |
| `enc` | Encode engine usage in ns |
+`memory_usage` | | Subfield | Description |
| `gtt_mem` | GTT memory usage |
| `cpu_mem` | CPU memory usage |
| `vram_mem` | VRAM memory usage |
Exceptions that can be thrown by `amdsmi_get_gpu_process_list` function:
@@ -910,50 +918,7 @@ try:
print("No processes running on this GPU")
else:
for process in processes:
- print(amdsmi_get_gpu_process_info(device, process))
-except AmdSmiException as e:
- print(e)
-```
-
-### amdsmi_get_gpu_process_info
-
-Description: Returns info about process given the target GPU and the corresponding `amdsmi_proc_info_t` object
-
-Input parameters:
-
-* `processor_handle` device which to query
-
-Output: Dictionary with fields
-
-Field | Description
----|---
-`name` | Name of process
-`pid` | Process ID
-`mem` | Process memory usage
-`engine_usage` | | Subfield | Description |
| `gfx` | GFX engine usage in ns |
| `enc` | Encode engine usage in ns |
-`memory_usage` | | Subfield | Description |
| `gtt_mem` | GTT memory usage |
| `cpu_mem` | CPU memory usage |
| `vram_mem` | VRAM memory usage |
Dict[str, Any]:
- if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
- raise AmdSmiParameterException(
- processor_handle, amdsmi_wrapper.amdsmi_processor_handle
- )
-
- if not isinstance(process, amdsmi_wrapper.amdsmi_proc_info_t):
- raise AmdSmiParameterException(
- process, amdsmi_wrapper.amdsmi_proc_info_t)
-
- return {
- "name": process.name.decode("utf-8"),
- "pid": process.pid,
- "mem": process.mem,
- "engine_usage": {
- "gfx": process.engine_usage.gfx,
- "enc": process.engine_usage.enc
- },
- "memory_usage": {
- "gtt_mem": process.memory_usage.gtt_mem,
- "cpu_mem": process.memory_usage.cpu_mem,
- "vram_mem": process.memory_usage.vram_mem,
- },
- }
-
-
def amdsmi_get_gpu_device_uuid(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str:
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(