Who is this for?

This is an advanced topic for software developers and performance engineers who want to measure and compare energy efficiency across CPU frequency configurations on Arm Linux systems.

What will you learn?

Upon completion of this Learning Path, you will be able to:

  • Discover CPU frequency controls and power, temperature, and fan sensors on an Arm Linux system
  • Collect synchronized CPU frequency, power, temperature, and fan telemetry during a workload
  • Compare Linux CPUFreq governors and maximum-frequency limits using a repeatable OpenSSL workload
  • Calculate throughput per watt and energy consumed per unit of work

Prerequisites

Before starting, you will need the following:

  • An Arm Linux system with root or sudo access and Python 3 installed
  • CPU frequency policies available under /sys/devices/system/cpu/cpufreq/
  • CPU and I/O power sensors exposed through Linux hwmon

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll measure and compare performance per watt on an Arm Linux system with CPUFreq controls, hwmon telemetry, and an OpenSSL SHA-256 workload. You’ll inspect frequency policies and sensors, create a synchronized telemetry logger, and establish a baseline. Then, you’ll compare governors and frequency caps, and calculate throughput per watt and energy per gigabyte.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
How do I choose which hwmon power channels to include in SoC power?
Use the CPU and I/O power channels exposed by your platform’s hwmon driver. On the example Thelio Astra, apm_xgene provides those channels. On another system, identify the equivalent labeled inputs before you run the logger. Treat the sum as an SoC estimate that excludes memory, storage, fans, and power-supply losses.
How do I verify CPUFreq policies before changing settings?
List the policy directories under /sys/devices/system/cpu/cpufreq/ and compare their count with nproc. If the counts differ, your system might group multiple CPUs into one policy. Use this layout to understand which CPUs change together before you run experiments.
What do I need to edit in collect-telemetry.sh for my machine?
Replace apm_xgene and system76_thelio_io with the device names reported by /sys/class/hwmon/hwmon*/name, then update sensor labels if your drivers use different labels. The logger accepts an output filename and sampling interval as its first and second arguments.
How do I run the OpenSSL workload and know it exercised all CPUs?
Run sudo ./run-openssl.sh LABEL SECONDS. The script uses openssl speed with SHA-256, a fixed 16384-byte buffer, and -multi "$(nproc)" to start one worker per online CPU. Check the saved openssl-output.txt file for the aggregate throughput.
What should I check if changing a CPU governor fails?
Confirm that the requested governor appears in each policy’s scaling_available_governors file. The set-governor.sh script validates this and exits if any policy lacks the governor. Check that scaling_min_freq and scaling_max_freq remain unchanged across runs.
Next