mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-22 12:58:36 +00:00
energy_model: further fixes to idle measurement.
- Fix to core frequency to min - Only disable idle states that are deeper than the measured state. Keep shallower states enabed.
This commit is contained in:
parent
4389a7d350
commit
1b6b0907f9
@ -475,10 +475,10 @@ class EnergyModelInstrument(Instrument):
|
|||||||
if not context.spec.label.startswith('idle_'):
|
if not context.spec.label.startswith('idle_'):
|
||||||
return
|
return
|
||||||
for idle_state in self.get_device_idle_states(self.measured_cluster):
|
for idle_state in self.get_device_idle_states(self.measured_cluster):
|
||||||
if idle_state.id == context.spec.idle_state_id:
|
if idle_state.id > context.spec.idle_state_index:
|
||||||
idle_state.disable = 0
|
|
||||||
else:
|
|
||||||
idle_state.disable = 1
|
idle_state.disable = 1
|
||||||
|
else:
|
||||||
|
idle_state.disable = 0
|
||||||
|
|
||||||
def fast_start(self, context): # pylint: disable=unused-argument
|
def fast_start(self, context): # pylint: disable=unused-argument
|
||||||
self.start_time = time.time()
|
self.start_time = time.time()
|
||||||
@ -718,6 +718,7 @@ class EnergyModelInstrument(Instrument):
|
|||||||
cluster_frequencies = self.get_frequencies_param(cluster)
|
cluster_frequencies = self.get_frequencies_param(cluster)
|
||||||
if not cluster_frequencies:
|
if not cluster_frequencies:
|
||||||
raise InstrumentError('Could not read available frequencies for {}'.format(core))
|
raise InstrumentError('Could not read available frequencies for {}'.format(core))
|
||||||
|
min_frequency = min(cluster_frequencies)
|
||||||
|
|
||||||
idle_states = self.get_device_idle_states(cluster)
|
idle_states = self.get_device_idle_states(cluster)
|
||||||
new_specs = []
|
new_specs = []
|
||||||
@ -728,8 +729,10 @@ class EnergyModelInstrument(Instrument):
|
|||||||
spec.workload_parameters = self.idle_workload_params
|
spec.workload_parameters = self.idle_workload_params
|
||||||
spec.idle_state_id = state.id
|
spec.idle_state_id = state.id
|
||||||
spec.idle_state_desc = state.desc
|
spec.idle_state_desc = state.desc
|
||||||
|
spec.idle_state_index = state.index
|
||||||
if not self.no_hotplug:
|
if not self.no_hotplug:
|
||||||
spec.runtime_parameters['{}_cores'.format(core)] = num_cpus
|
spec.runtime_parameters['{}_cores'.format(core)] = num_cpus
|
||||||
|
spec.runtime_parameters['{}_frequency'.format(core)] = min_frequency
|
||||||
spec.cluster = cluster
|
spec.cluster = cluster
|
||||||
spec.num_cpus = num_cpus
|
spec.num_cpus = num_cpus
|
||||||
spec.id = '{}_idle_{}_{}'.format(cluster, state.id, num_cpus)
|
spec.id = '{}_idle_{}_{}'.format(cluster, state.id, num_cpus)
|
||||||
|
@ -45,8 +45,9 @@ class CpuidleState(object):
|
|||||||
raise ValueError('invalid idle state name: "{}"'.format(self.id))
|
raise ValueError('invalid idle state name: "{}"'.format(self.id))
|
||||||
return int(self.id[i:])
|
return int(self.id[i:])
|
||||||
|
|
||||||
def __init__(self, device, path):
|
def __init__(self, device, index, path):
|
||||||
self.device = device
|
self.device = device
|
||||||
|
self.index = index
|
||||||
self.path = path
|
self.path = path
|
||||||
self.id = self.device.path.basename(self.path)
|
self.id = self.device.path.basename(self.path)
|
||||||
self.cpu = self.device.path.basename(self.device.path.dirname(path))
|
self.cpu = self.device.path.basename(self.device.path.dirname(path))
|
||||||
@ -106,7 +107,8 @@ class Cpuidle(Module):
|
|||||||
idle_states = []
|
idle_states = []
|
||||||
for state in self.device.listdir(states_dir):
|
for state in self.device.listdir(states_dir):
|
||||||
if state.startswith('state'):
|
if state.startswith('state'):
|
||||||
idle_states.append(CpuidleState(self.device, self.device.path.join(states_dir, state)))
|
index = int(state[5:])
|
||||||
|
idle_states.append(CpuidleState(self.device, index, self.device.path.join(states_dir, state)))
|
||||||
return idle_states
|
return idle_states
|
||||||
|
|
||||||
def _on_device_init(self, context): # pylint: disable=unused-argument
|
def _on_device_init(self, context): # pylint: disable=unused-argument
|
||||||
|
Loading…
x
Reference in New Issue
Block a user