Variorum supports two flavors of ARM architectures: - Arm Juno r2 SoC - Ampere Neoverse N1
The Arm Juno r2 platform is a big.LITTLE cluster with Cortex-A72 (big) and Cortex-A53 (LITTLE) clusters (also called processors), respectively. It also has an Arm Mali GP-GPU. We have tested the ARM functionality of Variorum on Linaro supported Linux.
The Ampere Neoverse N1 platform is an 80-core single-processor platform with two Nvidia Ampere GPUs.
This version of the ARM port of Variorum depends on the Linux Hardware Monitoring (hwmon) subsystem for access to the telemetry and control interfaces on the tested ARM platform. The standardized data interfaces provided by the hwmon framework enable a generic ARM implementation of Variorum.
Variorum use the MIDR_EL1 (Main ID) register which provides the identification information of the ARM processor to initialize the low-level interfaces on the target architecture. Specifically, Variorum uses bits [15:4] of MIDR_E1 to get the primary part number. For Neoverse N1 the primary part number is 0xD0C whereas for Arm Juno r2 big.LITTLE SoC the primary part numbers are 0xD08 (Cortex-A72) and 0xD03 (Cortex-A53).
Monitoring and Control Through Sysfs Interface¶
The built-in monitoring interface on the Arm Juno r2 board is implemented by the on-board FPGA. Since this interface is not universally available on most Arm implementations, we leverage the standard Linux sysfs interface for monitoring and control. The following subsections provide the specific metrics that are monitored on Arm Juno r2:
The sysfs interface provides a file for each of the following Advanced Peripheral Bus (APB) energy meter registers:
Instantaneous power is recorded in bits 0-23 and reported in microwatts by the sysfs interface. To improve readability of the verbose output Variorum converts power into milliwatts before reporting. All registers are updated every 100 microseconds.
Memory power telemetry is not available on this platform.
The sysfs interface provides a file for thermal telemetry for each system component through the GetSensorValue command in CSS System Control and Power Interface (SCPI).
Instantaneous temperatures are reported in degree Celsius.
On the Neoverse N1 system, the following thermal sensors are provided:
Ethernet connector temperature:
Clocks are collected by the sysfs interface using the GetClockValue command in
SCPI on both of the supported ARM platforms. On the Arm Juno r2 platform, a
policy*/ subdirectory is provided for the big and LITTLE clusters.
On the Neoverse N1 platform, a separate
policy*/ subdirectory is provided
for each core in the SoC.
Frequencies are reported by the sysfs interface in KHz. Variorum reports the clocks in MHz to keep it consistent with the clocks reported for other supported architectures.
The sysfs interface uses the SetClockValue SCPI command to set processor frequency for the following user-facing interfaces on the supported platforms:
Arm Juno r2:
New frequency is specified in KHz to these interfaces. Variorum takes the new frequency as input in MHz and performs this conversion internally.
If you run into an error accessing the sysfs interface, this could be due to an
the specified frequency value or the set governor. The sysfs interface only
accepts valid values for frequencies as output by
policy*/scaling_available_frequencies. Also, the specified frequency is only
applied when the governor in
policy*/scaling_governor is set to userspace.