Use different sysfs for soc_pstate and xmgi_plpd
The sysfs is changed to use the pm_policy folder with multiple dpm_policy files. Change-Id: I40fac8de2d0cb127950d238b8196f6d2416778d0
This commit is contained in:
@@ -245,7 +245,7 @@ class AMDSMICommands():
|
||||
def static_gpu(self, args, multiple_devices=False, gpu=None, asic=None, bus=None, vbios=None,
|
||||
limit=None, driver=None, ras=None, board=None, numa=None, vram=None,
|
||||
cache=None, partition=None, dfc_ucode=None, fb_info=None, num_vf=None,
|
||||
policy=None, xgmi_plpd=None, process_isolation=None):
|
||||
soc_pstate=None, xgmi_plpd=None, process_isolation=None):
|
||||
"""Get Static information for target gpu
|
||||
|
||||
Args:
|
||||
@@ -268,7 +268,7 @@ class AMDSMICommands():
|
||||
dfc_ucode (bool, optional): Value override for args.dfc_ucode. Defaults to None.
|
||||
fb_info (bool, optional): Value override for args.fb_info. Defaults to None.
|
||||
num_vf (bool, optional): Value override for args.num_vf. Defaults to None.
|
||||
policy (bool, optional): Value override for args.policy. Defaults to None.
|
||||
soc_pstate (bool, optional): Value override for args.soc_pstate. Defaults to None.
|
||||
xgmi_plpd (bool, optional): Value override for args.xgmi_plpd. Defaults to None.
|
||||
process_isolation (bool, optional): Value override for args.process_isolation. Defaults to None.
|
||||
Returns:
|
||||
@@ -307,13 +307,12 @@ class AMDSMICommands():
|
||||
args.partition = partition
|
||||
if limit:
|
||||
args.limit = limit
|
||||
if policy:
|
||||
args.policy = policy
|
||||
if soc_pstate:
|
||||
args.soc_pstate = soc_pstate
|
||||
if xgmi_plpd:
|
||||
args.xgmi_plpd = xgmi_plpd
|
||||
|
||||
current_platform_args += ["ras", "limit", "partition", "policy", "xgmi_plpd"]
|
||||
current_platform_values += [args.ras, args.limit, args.partition, args.policy, args.xgmi_plpd]
|
||||
current_platform_args += ["ras", "limit", "partition", "soc_pstate", "xgmi_plpd"]
|
||||
current_platform_values += [args.ras, args.limit, args.partition, args.soc_pstate, args.xgmi_plpd]
|
||||
|
||||
if self.helpers.is_linux() and not self.helpers.is_virtual_os():
|
||||
if numa:
|
||||
@@ -638,15 +637,15 @@ class AMDSMICommands():
|
||||
|
||||
static_dict['partition'] = {"compute_partition": compute_partition,
|
||||
"memory_partition": memory_partition}
|
||||
if 'policy' in current_platform_args:
|
||||
if args.policy:
|
||||
if 'soc_pstate' in current_platform_args:
|
||||
if args.soc_pstate:
|
||||
try:
|
||||
policy_info = amdsmi_interface.amdsmi_get_dpm_policy(args.gpu)
|
||||
policy_info = amdsmi_interface.amdsmi_get_soc_pstate(args.gpu)
|
||||
except amdsmi_exception.AmdSmiLibraryException as e:
|
||||
policy_info = "N/A"
|
||||
logging.debug("Failed to get policy info for gpu %s | %s", gpu_id, e.get_error_info())
|
||||
logging.debug("Failed to get soc pstate policy info for gpu %s | %s", gpu_id, e.get_error_info())
|
||||
|
||||
static_dict['dpm_policy'] = policy_info
|
||||
static_dict['soc_pstate'] = policy_info
|
||||
if 'xgmi_plpd' in current_platform_args:
|
||||
if args.xgmi_plpd:
|
||||
try:
|
||||
@@ -802,7 +801,7 @@ class AMDSMICommands():
|
||||
bus=None, vbios=None, limit=None, driver=None, ras=None,
|
||||
board=None, numa=None, vram=None, cache=None, partition=None,
|
||||
dfc_ucode=None, fb_info=None, num_vf=None, cpu=None,
|
||||
interface_ver=None, policy=None, xgmi_plpd = None, process_isolation=None):
|
||||
interface_ver=None, soc_pstate=None, xgmi_plpd = None, process_isolation=None):
|
||||
"""Get Static information for target gpu and cpu
|
||||
|
||||
Args:
|
||||
@@ -825,7 +824,7 @@ class AMDSMICommands():
|
||||
num_vf (bool, optional): Value override for args.num_vf. Defaults to None.
|
||||
cpu (cpu_handle, optional): cpu_handle for target device. Defaults to None.
|
||||
interface_ver (bool, optional): Value override for args.interface_ver. Defaults to None
|
||||
policy (bool, optional): Value override for args.policy. Defaults to None.
|
||||
soc_pstate (bool, optional): Value override for args.soc_pstate. Defaults to None.
|
||||
xgmi_plpd (bool, optional): Value override for args.xgmi_plpd. Defaults to None.
|
||||
process_isolation (bool, optional): Value override for args.process_isolation. Defaults to None.
|
||||
Raises:
|
||||
@@ -853,7 +852,7 @@ class AMDSMICommands():
|
||||
gpu_args_enabled = False
|
||||
gpu_attributes = ["asic", "bus", "vbios", "limit", "driver", "ras",
|
||||
"board", "numa", "vram", "cache", "partition",
|
||||
"dfc_ucode", "fb_info", "num_vf", "policy", "xgmi_plpd",
|
||||
"dfc_ucode", "fb_info", "num_vf", "soc_pstate", "xgmi_plpd",
|
||||
"process_isolation"]
|
||||
for attr in gpu_attributes:
|
||||
if hasattr(args, attr):
|
||||
@@ -884,7 +883,7 @@ class AMDSMICommands():
|
||||
self.static_gpu(args, multiple_devices, gpu, asic,
|
||||
bus, vbios, limit, driver, ras,
|
||||
board, numa, vram, cache, partition,
|
||||
dfc_ucode, fb_info, num_vf, policy,
|
||||
dfc_ucode, fb_info, num_vf, soc_pstate,
|
||||
process_isolation)
|
||||
elif self.helpers.is_amd_hsmp_initialized(): # Only CPU is initialized
|
||||
if args.cpu == None:
|
||||
@@ -899,7 +898,7 @@ class AMDSMICommands():
|
||||
self.static_gpu(args, multiple_devices, gpu, asic,
|
||||
bus, vbios, limit, driver, ras,
|
||||
board, numa, vram, cache, partition,
|
||||
dfc_ucode, fb_info, num_vf, policy, xgmi_plpd,
|
||||
dfc_ucode, fb_info, num_vf, soc_pstate, xgmi_plpd,
|
||||
process_isolation)
|
||||
|
||||
|
||||
@@ -3387,7 +3386,7 @@ class AMDSMICommands():
|
||||
|
||||
def set_gpu(self, args, multiple_devices=False, gpu=None, fan=None, perf_level=None,
|
||||
profile=None, perf_determinism=None, compute_partition=None,
|
||||
memory_partition=None, power_cap=None, dpm_policy=None, xgmi_plpd = None,
|
||||
memory_partition=None, power_cap=None, soc_pstate=None, xgmi_plpd = None,
|
||||
process_isolation=None):
|
||||
"""Issue reset commands to target gpu(s)
|
||||
|
||||
@@ -3402,7 +3401,7 @@ class AMDSMICommands():
|
||||
compute_partition (amdsmi_interface.AmdSmiComputePartitionType, optional): Value override for args.compute_partition. Defaults to None.
|
||||
memory_partition (amdsmi_interface.AmdSmiMemoryPartitionType, optional): Value override for args.memory_partition. Defaults to None.
|
||||
power_cap (int, optional): Value override for args.power_cap. Defaults to None.
|
||||
dpm_policy (int, optional): Value override for args.dpm_policy. Defaults to None.
|
||||
soc_pstate (int, optional): Value override for args.soc_pstate. Defaults to None.
|
||||
xgmi_plpd (int, optional): Value override for args.xgmi_plpd. Defaults to None.
|
||||
process_isolation (int, optional): Value override for args.process_isolation. Defaults to None.
|
||||
Raises:
|
||||
@@ -3429,8 +3428,8 @@ class AMDSMICommands():
|
||||
args.memory_partition = memory_partition
|
||||
if power_cap:
|
||||
args.power_cap = power_cap
|
||||
if dpm_policy:
|
||||
args.dpm_policy = dpm_policy
|
||||
if soc_pstate:
|
||||
args.soc_pstate = soc_pstate
|
||||
if xgmi_plpd:
|
||||
args.xgmi_plpd = xgmi_plpd
|
||||
if process_isolation:
|
||||
@@ -3455,7 +3454,7 @@ class AMDSMICommands():
|
||||
args.memory_partition,
|
||||
args.perf_determinism is not None,
|
||||
args.power_cap is not None,
|
||||
args.dpm_policy is not None,
|
||||
args.soc_pstate is not None,
|
||||
args.xgmi_plpd is not None,
|
||||
args.process_isolation is not None]):
|
||||
command = " ".join(sys.argv[1:])
|
||||
@@ -3551,14 +3550,14 @@ class AMDSMICommands():
|
||||
if min_power_cap == 0:
|
||||
min_power_cap = 1
|
||||
self.logger.store_output(args.gpu, 'powercap', f"Power cap must be between {min_power_cap} and {max_power_cap}")
|
||||
if isinstance(args.dpm_policy, int):
|
||||
if isinstance(args.soc_pstate, int):
|
||||
try:
|
||||
amdsmi_interface.amdsmi_set_dpm_policy(args.gpu, args.dpm_policy)
|
||||
amdsmi_interface.amdsmi_set_soc_pstate(args.gpu, args.soc_pstate)
|
||||
except amdsmi_exception.AmdSmiLibraryException as e:
|
||||
if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM:
|
||||
raise PermissionError('Command requires elevation') from e
|
||||
raise ValueError(f"Unable to set dpm policy to {args.dpm_policy} on {gpu_string}") from e
|
||||
self.logger.store_output(args.gpu, 'dpmpolicy', f"Successfully set dpm policy to id {args.dpm_policy}")
|
||||
raise ValueError(f"Unable to set dpm soc pstate policy to {args.soc_pstate} on {gpu_string}") from e
|
||||
self.logger.store_output(args.gpu, 'socpstate', f"Successfully soc pstate dpm policy to id {args.soc_pstate}")
|
||||
if isinstance(args.xgmi_plpd, int):
|
||||
try:
|
||||
amdsmi_interface.amdsmi_set_xgmi_plpd(args.gpu, args.xgmi_plpd)
|
||||
@@ -3566,7 +3565,7 @@ class AMDSMICommands():
|
||||
if e.get_error_code() == amdsmi_interface.amdsmi_wrapper.AMDSMI_STATUS_NO_PERM:
|
||||
raise PermissionError('Command requires elevation') from e
|
||||
raise ValueError(f"Unable to set XGMI policy to {args.xgmi_plpd} on {gpu_string}") from e
|
||||
self.logger.store_output(args.gpu, 'xgmiplpd', f"Successfully set per-link power down policy to id {args.dpm_policy}")
|
||||
self.logger.store_output(args.gpu, 'xgmiplpd', f"Successfully set per-link power down policy to id {args.xgmi_plpd}")
|
||||
if isinstance(args.process_isolation, int):
|
||||
status_string = "Enabled" if args.process_isolation else "Disabled"
|
||||
result = f"Requested process isolation to {status_string}" # This should not print out
|
||||
@@ -3597,7 +3596,7 @@ class AMDSMICommands():
|
||||
cpu=None, cpu_pwr_limit=None, cpu_xgmi_link_width=None, cpu_lclk_dpm_level=None,
|
||||
cpu_pwr_eff_mode=None, cpu_gmi3_link_width=None, cpu_pcie_link_rate=None,
|
||||
cpu_df_pstate_range=None, cpu_enable_apb=None, cpu_disable_apb=None,
|
||||
soc_boost_limit=None, core=None, core_boost_limit=None, dpm_policy=None, xgmi_plpd=None,
|
||||
soc_boost_limit=None, core=None, core_boost_limit=None, soc_pstate=None, xgmi_plpd=None,
|
||||
process_isolation=None):
|
||||
"""Issue reset commands to target gpu(s)
|
||||
|
||||
@@ -3627,7 +3626,7 @@ class AMDSMICommands():
|
||||
|
||||
core (device_handle, optional): device_handle for target core. Defaults to None.
|
||||
core_boost_limit (int, optional): Value override for args.core_boost_limit. Defaults to None
|
||||
dpm_policy (int, optional): Value override for args.dpm_policy. Defaults to None.
|
||||
soc_pstate (int, optional): Value override for args.soc_pstate. Defaults to None.
|
||||
xgmi_plpd (int, optional): Value override for args.xgmi_plpd. Defaults to None.
|
||||
process_isolation (int, optional): Value override for args.process_isolation. Defaults to None.
|
||||
Raises:
|
||||
@@ -3649,7 +3648,8 @@ class AMDSMICommands():
|
||||
# Check if a GPU argument has been set
|
||||
gpu_args_enabled = False
|
||||
gpu_attributes = ["fan", "perf_level", "profile", "perf_determinism", "compute_partition",
|
||||
"memory_partition", "power_cap", "dpm_policy", "xgmi_plpd", "process_isolation"]
|
||||
"memory_partition", "power_cap", "soc_pstate", "xgmi_plpd", "process_isolation",
|
||||
]
|
||||
for attr in gpu_attributes:
|
||||
if hasattr(args, attr):
|
||||
if getattr(args, attr) is not None:
|
||||
@@ -3704,7 +3704,7 @@ class AMDSMICommands():
|
||||
self.logger.clear_multiple_devices_ouput()
|
||||
self.set_gpu(args, multiple_devices, gpu, fan, perf_level,
|
||||
profile, perf_determinism, compute_partition,
|
||||
memory_partition, power_cap, dpm_policy, xgmi_plpd,
|
||||
memory_partition, power_cap, soc_pstate, xgmi_plpd,
|
||||
process_isolation)
|
||||
elif self.helpers.is_amd_hsmp_initialized(): # Only CPU is initialized
|
||||
if args.cpu == None and args.core == None:
|
||||
@@ -3724,7 +3724,7 @@ class AMDSMICommands():
|
||||
self.logger.clear_multiple_devices_ouput()
|
||||
self.set_gpu(args, multiple_devices, gpu, fan, perf_level,
|
||||
profile, perf_determinism, compute_partition,
|
||||
memory_partition, power_cap, dpm_policy, xgmi_plpd,
|
||||
memory_partition, power_cap, soc_pstate, xgmi_plpd,
|
||||
process_isolation)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user