From c6e54e09e7bf8434345f5f3745a694e4b0ca3a7e Mon Sep 17 00:00:00 2001 From: Maisam Arif Date: Tue, 10 Oct 2023 14:20:11 -0500 Subject: [PATCH] Placeholders for new ras values Signed-off-by: Maisam Arif Change-Id: I66cea253b19a5029172af0a3f4dd2f993c13b309 Signed-off-by: Maisam Arif --- amdsmi_cli/amdsmi_commands.py | 26 ++++++++++++++++----- py-interface/README.md | 40 ++++++++++++++++++++++++++++++++ py-interface/__init__.py | 1 + py-interface/amdsmi_interface.py | 19 ++++++++++++++- 4 files changed, 79 insertions(+), 7 deletions(-) diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 76f1d20c9a..b598a15d5c 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -437,11 +437,25 @@ class AMDSMICommands(): if self.helpers.is_hypervisor() or self.helpers.is_baremetal(): if args.ras: + ras_dict = {"eeprom_version": "N/A", + "parity_schema" : "N/A", + "single_bit_schema" : "N/A", + "double_bit_schema" : "N/A", + "poison_schema" : "N/A", + "ecc_block_state": "N/A"} + try: - static_dict['ras'] = amdsmi_interface.amdsmi_get_gpu_ras_block_features_enabled(args.gpu) + ras_info = amdsmi_interface.amdsmi_get_gpu_ras_feature_info(args.gpu) + ras_dict.update(ras_info) + except amdsmi_exception.AmdSmiLibraryException as e: + logging.debug("Failed to get ras info for gpu %s | %s", gpu_id, e.get_error_info()) + + try: + ras_dict["ecc_block_state"] = amdsmi_interface.amdsmi_get_gpu_ras_block_features_enabled(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - static_dict['ras'] = "N/A" logging.debug("Failed to get ras block features for gpu %s | %s", gpu_id, e.get_error_info()) + + static_dict["ras"] = ras_dict if self.helpers.is_linux() and self.helpers.is_baremetal(): if args.numa: try: @@ -467,11 +481,11 @@ class AMDSMICommands(): if self.logger.is_csv_format(): # expand if ras blocks are populated if self.helpers.is_linux() and self.helpers.is_baremetal() and args.ras: - if isinstance(static_dict['ras'], list): - ras_dicts = static_dict.pop('ras') + if isinstance(static_dict['ras']['ecc_block_state'], list): + ecc_block_dicts = static_dict['ras'].pop('ecc_block_state') multiple_devices_csv_override = True - for ras_dict in ras_dicts: - for key, value in ras_dict.items(): + for ecc_block_dict in ecc_block_dicts: + for key, value in ecc_block_dict.items(): self.logger.store_output(args.gpu, key, value) self.logger.store_output(args.gpu, 'values', static_dict) self.logger.store_multiple_device_output() diff --git a/py-interface/README.md b/py-interface/README.md index bf7d547809..8147ba1b6d 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -942,6 +942,46 @@ except AmdSmiException as e: print(e) ``` +### amdsmi_get_gpu_ras_feature_info + +Description: Returns RAS version and schema information +It is not supported on virtual machine guest + +Input parameters: + +* `processor_handle` device which to query + +Output: List containing dictionaries with fields + +Field | Description +---|--- +`eeprom_version` | eeprom version +`parity_schema` | parity schema +`single_bit_schema` | single bit schema +`double_bit_schema` | double bit schema +`poison_schema` | poison schema + +Exceptions that can be thrown by `amdsmi_get_gpu_ras_feature_info` function: + +* `AmdSmiLibraryException` +* `AmdSmiRetryException` +* `AmdSmiParameterException` + +Example: + +```python +try: + devices = amdsmi_get_processor_handles() + if len(devices) == 0: + print("No GPUs on machine") + else: + for device in devices: + ras_info = amdsmi_get_gpu_ras_feature_info(device) + print(ras_info) +except AmdSmiException as e: + print(e) +``` + ### amdsmi_get_gpu_ras_block_features_enabled Description: Returns status of each RAS block for the given GPU. diff --git a/py-interface/__init__.py b/py-interface/__init__.py index 6be5f36436..22a13f7c95 100644 --- a/py-interface/__init__.py +++ b/py-interface/__init__.py @@ -66,6 +66,7 @@ from .amdsmi_interface import amdsmi_get_gpu_total_ecc_count from .amdsmi_interface import amdsmi_get_gpu_board_info # # Ras Information +from .amdsmi_interface import amdsmi_get_gpu_ras_feature_info from .amdsmi_interface import amdsmi_get_gpu_ras_block_features_enabled # # Unsupported Functions In Virtual Environment diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index a3b1b4127b..98907c2708 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -832,9 +832,26 @@ def amdsmi_get_gpu_board_info( } -def amdsmi_get_gpu_ras_block_features_enabled( +def amdsmi_get_gpu_ras_feature_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, ) -> Dict[str, Any]: + if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): + raise AmdSmiParameterException( + processor_handle, amdsmi_wrapper.amdsmi_processor_handle + ) + # Dummy data waiting on population + ras_info = {"eeprom_version": "N/A", + "parity_schema" : "N/A", + "single_bit_schema" : "N/A", + "double_bit_schema" : "N/A", + "poison_schema" : "N/A"} + + return ras_info + + +def amdsmi_get_gpu_ras_block_features_enabled( + processor_handle: amdsmi_wrapper.amdsmi_processor_handle, +) -> List[Dict[str, Any]]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle