1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-01-31 02:00:45 +00:00

Merge pull request #68 from bjackman/cpuidle-trace-all

ftrace: Poke all CPUs before collecting trace
This commit is contained in:
setrofim 2016-11-08 17:19:02 +00:00 committed by GitHub
commit 02696e99e0
3 changed files with 24 additions and 0 deletions

View File

@ -46,6 +46,18 @@ cpufreq_trace_all_frequencies() {
done done
} }
################################################################################
# CPUIdle Utility Functions
################################################################################
cpuidle_wake_all_cpus() {
CPU_PATHS=/sys/devices/system/cpu/cpu[0-9]*
MASK=0x1; for F in $CPU_PATHS; do
$BUSYBOX taskset $MASK true
MASK=$($BUSYBOX printf '0x%x' $((MASK * 2)))
done
}
################################################################################ ################################################################################
# FTrace Utility Functions # FTrace Utility Functions
################################################################################ ################################################################################
@ -185,6 +197,9 @@ cpufreq_get_all_governors)
cpufreq_trace_all_frequencies) cpufreq_trace_all_frequencies)
cpufreq_trace_all_frequencies $* cpufreq_trace_all_frequencies $*
;; ;;
cpuidle_wake_all_cpus)
cpuidle_wake_all_cpus $*
;;
cgroups_get_attributes) cgroups_get_attributes)
cgroups_get_attributes $* cgroups_get_attributes $*
;; ;;

View File

@ -152,3 +152,9 @@ class Cpuidle(Module):
for state in self.get_states(cpu): for state in self.get_states(cpu):
state.disable() state.disable()
def perturb_cpus(self):
"""
Momentarily wake each CPU. Ensures cpu_idle events in trace file.
"""
output = self.target._execute_util('cpuidle_wake_all_cpus')
print(output)

View File

@ -170,6 +170,9 @@ class FtraceCollector(TraceCollector):
if 'cpufreq' in self.target.modules: if 'cpufreq' in self.target.modules:
self.logger.debug('Trace CPUFreq frequencies') self.logger.debug('Trace CPUFreq frequencies')
self.target.cpufreq.trace_frequencies() self.target.cpufreq.trace_frequencies()
if 'cpuidle' in self.target.modules:
self.logger.debug('Trace CPUIdle states')
self.target.cpuidle.perturb_cpus()
# Enable kernel function profiling # Enable kernel function profiling
if self.functions: if self.functions:
self.target.execute('echo nop > {}'.format(self.current_tracer_file), self.target.execute('echo nop > {}'.format(self.current_tracer_file),