Arm System Characterization Tool

The Arm System Characterization Tool (ASCT) is a standalone command-line utility for running low-level benchmarks, diagnostic scripts, and system tests to analyze and debug performance on Arm-based platforms.

ASCT provides a standardized environment for evaluating key hardware characteristics, such as memory latency and bandwidth, and is especially suited for platform bring-up, system tuning, and architectural comparison tasks. It helps developers and system architects gain early and repeatable insights into performance-critical subsystems.

Current capabilities include:

Planned features include:

Documentation

For detailed guidance, see:

Requirements

Download ASCT

  1. Download the latest ASCT release bundle from: artifacts.tools.arm.com.

    For users within the Arm network, early-access versions might be available at: artifacts.internal.tools.arm.com.

  2. Locate the downloaded file on your host machine. Move it to the target machine where you want to install and run the tool.

  3. Extract the release bundle:

    tar -xvzf asct-<version>-release.tar.gz

    This process creates a directory:

    asct-<version>/

    The directory contains the following files:

Install ASCT

You can install ASCT in one of the following ways:

Option 1: Install ASCT with the helper script

This is the simplest installation method. It creates a dedicated Python virtual environment and installs ASCT into it.

Steps

From inside the extracted asct-<version>/ directory:

    ./install.sh --install-dir /path/to/install/directory

If --install-dir is not specified, the script installs into the directory containing install.sh.

The install.sh script performs the following tasks:

By default, the virtual environment is created at <install-dir>/asct_venv.

After installation, follow the instructions printed by the script to activate the virtual environment before running ASCT.

Option 2: Install ASCT manually using pip

Use this method if you prefer to manage Python environments manually, are installing into an existing virtual environment, or are automating installation in your own scripts.

You can install ASCT into any active Python environment.

Install into a new virtual environment

  1. Create a virtual environment:

    python3 -m venv asct_venv
  2. Activate it:

    source asct_venv/bin/activate
  3. Install ASCT from the bundled source distribution:

    python3 -m pip install ./asct-<version>.tar.gz

    ASCT is now installed inside the virtual environment.

Install into an existing environment

python3 -m pip install ./asct-<version>.tar.gz

ASCT is installed into the currently active Python environment.

Option 3: Install ASCT as a system-wide tool with uv

This method installs ASCT as a system-wide tool available on the system PATH.

Use this option only for shared systems, managed environments, or CI environments.

Steps

  1. Create the required directories:

    sudo mkdir -p /opt/uv/tools /usr/local/bin
  2. Install ASCT with uv and place the executable in /usr/local/bin:

    sudo UV_TOOL_DIR=/opt/uv/tools UV_TOOL_BIN_DIR=/usr/local/bin uv tool install ./asct-<version>.tar.gz

    After installation, ASCT is available on the system PATH.

Runtime tools

Some workloads require additional system tools, such as:

If tools are missing, ASCT reports this at runtime.

Run ASCT

To verify the installation, run:

asct help

You can also open the offline documentation at: asct_docs/index.html.

Uninstall ASCT

Option 1: If you installed ASCT using the helper script

To uninstall ASCT, remove that virtual environment directory:

rm -rf <install-dir>/asct_venv

Option 2: If you manually installed ASCT using pip

If you installed ASCT into a dedicated virtual environment, you can remove that environment directory.

Alternatively, activate the relevant Python environment and uninstall ASCT:

python3 -m pip uninstall asct

Option 3: If you installed ASCT system-wide using uv

Remove ASCT using uv:

sudo UV_TOOL_DIR=/opt/uv/tools UV_TOOL_BIN_DIR=/usr/local/bin uv tool uninstall asct

Getting started

ASCT contains a number of separate commands with the following common pattern:

asct [command] [arguments]
Command Description More information
cmn Collects information about the Arm Coherent Mesh Network (CMN) interconnect when it is present on your system See System report
diff Compares results from previous ASCT runs See Run diff
list Lists available benchmarks See list command
run Runs a list of benchmarks based on a provided list of keywords See run command
system-info Displays system information only and quit. ASCT also includes this information by default with every benchmark run. See System report

For more information on a specific command, run:

asct [command] --help

To display the ASCT version, run:

asct version

To get started, run the default set of benchmarks:

sudo asct run

[!IMPORTANT] Some benchmarks require sudo or root privileges to configure huge pages and access certain system information. You can run ASCT without sudo, but some benchmarks might be unavailable or have limited functionality.

asct run command

The asct run command runs one or more benchmarks.

Default behavior

sudo asct run

Running the asct run command with no arguments executes a default set of benchmarks and displays the results in the terminal.

Each time you run asct run, ASCT collects system information and includes it with the benchmark results. ASCT also saves detailed output in a directory under the current working directory.

The output can include data in multiple formats, such as CSV and JSON. Some benchmarks also generate additional artifacts, such as plots or raw data dumps.

By default, ASCT creates an output directory named: data.<YYYYMMDD_HHMMSS_microseconds>.

You can change the output location using the --output-dir flag.

Select benchmarks

To run all available benchmarks:

sudo asct run all

To run specific benchmarks, pass a list of benchmark names as arguments to the asct run command.

For example, to run the latency-sweep and idle-latency benchmarks:

sudo asct run latency-sweep idle-latency

Alternatively, each benchmark also has associated keywords that you can use to select multiple benchmarks that match those keywords.

For example, to run all benchmarks tagged with the memory keyword:

sudo asct run memory

You can exclude benchmarks by negating their names or keywords. To do this, prepend the name or keyword with a caret (^).

For example, to run all benchmarks but exclude all of those tagged with the bandwidth keyword:

sudo asct run all ^bandwidth

[!NOTE] If a benchmark is a dependency for running another benchmark, negating or excluding it has no effect. For example, if you use ^latency-sweep to exclude the latency-sweep benchmark, but another benchmark depends on latency-sweep, the latency-sweep benchmark still runs.

To display the list of available benchmarks and their keywords, run the following command:

asct list

Output options

The run command also supports the following arguments:

asct list command

Run the following command to get the list of available benchmarks and their associated keywords:

asct list

System report

This section describes the system reporting commands in the Arm System Characterization Tool (ASCT). Use these commands to view hardware, software, and platform configuration details.

ASCT collects system information each time you run asct run .... Arm Coherent Mesh Network (CMN) reporting is available as a separate command.

Use these commands:

View system information

What asct system-info collects

The asct system-info report provides a structured snapshot of your system. It includes the following information:

Run asct system-info

Run this command:

sudo asct system-info

If you run the command without sudo, ASCT collects only a limited set of information. ASCT cannot access Desktop Management Interface (DMI) platform and memory details without elevated privileges.

Use asct system-info options

asct system-info supports the common ASCT output and logging options.

Example:

sudo asct system-info --format=json --output-dir data --force --log-level=error --log-file data/asct.log --quiet

View asct system-info output

ASCT supports these output formats:

ASCT writes these files to the output directory:

Example standard output

Example excerpt:


System Information ------------------------------------------------------------

System feature report:
  Collected:           2025-07-17 08:16:18.729527
  ASCT version:        0.4.2
  Running as root:     True

System hardware:
  Architecture:        ARMv8.2
  CPUs:                128
  Interconnect:        CMN-600 x 1

...

Network Information ------------------------------------------------------------

Local IPv4:      192.0.2.10
Local IPv6:      2001:db8::10
Interfaces:
  eth0: UP mtu=1500 ipv4=192.0.2.10

...

View CMN information

What asct cmn collects

Use asct cmn to collect information about the CMN interconnect when it is present on your system. asct cmn requires root access to gather CMN information.

Depending on the options that you select, the output includes:

Run asct cmn

Before you run asct cmn for the first time, run:

asct cmn --detect

The --detect option performs CMN discovery and CPU mapping. This step can take several minutes.

Then run:

asct cmn

Use asct cmn options

Use these optional flags:

Examples:

asct cmn --standard
asct cmn --verbose
asct cmn --detect --verbose

View asct cmn output

ASCT supports these output formats:

ASCT writes these files to the output directory:

Example standard output

The examples in this section are truncated to improve readability.

Default output

In the CPU grid layout, each parenthesized group lists the Linux logical CPU IDs that map to a CMN crosspoint (XP) at that grid position. An empty () indicates that no CPUs map to that XP.

Output with –standard

Output with –verbose

Memory characterization

Latency

Latency sweep

    Latencies at different levels of cache
    --------------------------------------
    Level Lower bound Upper bound Optimum data size Latency [ns]
    L1           128         64K         32.0625K          1.5
    L2           64K        512K             288K          5.2
    LLC           1M          8M             4.5M         48.1
    DRAM         32M          1G             528M        107.6
Latency sweep line chart of average memory latency against data size. Latency stays low (~1.3 ns) up to 32 KiB, then increases in steps at 128 KiB, 1 MiB, and 16 MiB, reaching ~120 ns at 64 MiB and above.

Idle latency

  Latencies of random memory access at idle (in nanoseconds)
  ----------------------------------------------------------
          Node 0 Node 1
  Node 0  113.3  266.9
  Node 1  266.5  115.7

Note: ASCT derives the data size used to target DRAM from the latency-sweep benchmark. If not selected manually, ASCT automatically includes latency-sweep as a dependency.

Loaded latency

    Loaded latency with background memory activity
    ------------------------------------------------
     Injected NOPs  Loaded latency [ns]  Bandwidth [GB/s]
              3000                115.5              10.7
               900                115.8              35.2
               500                117.6              61.4
               180                122.2             175.3
               100                129.2             306.5
                80                134.1             385.0
                70                138.3             441.8
                50                158.8             603.9
                40                193.9             753.7
                30                250.7             912.7
                20                266.5             918.3
                10                281.0             918.3
                 0                305.4             920.7

Note: ASCT derives the data size used to target DRAM from the latency-sweep benchmark. If not selected manually, ASCT automatically includes latency-sweep as a dependency.

Core-to-core latency

    Core-to-Core Latency Summary (ns): Data Address @ Local Numa Node
    =================================================================
    Node-to-Node Median Latency Matrix (ns):
    ----------------------------------------
            Node0   Node1
    Node0   31.91  152.86
    Node1  153.10   32.00

    Latency Statistics (ns):
    ------------------------
    Min       : 23.81
    Max       : 161.65
    Mean      : 92.87
    Median    : 140.66

    Top Latency Core Pairs with Median Latency
    ------------------------------------------
    CPUA   CPUB    Latency (ns)
    ---------------------------
    186       91         161.65
    187       83         161.37
     95      186         161.29
     91      190         161.12
    178       90         161.02
    186       83         160.50
     82      157         160.44
     83      176         160.42
     90      187         160.42
     90      159         160.41

    Node-to-Node Latency Statistics (ns):
    -------------------------------------

    Node0 → Node0:
    Min:    24.68 ns
    Max:    42.24 ns
    Mean:   32.16 ns
    Median: 31.91 ns

    Node0 → Node1:
    Min:    112.43 ns
    Max:    161.29 ns
    Mean:   152.67 ns
    Median: 152.86 ns

    Node1 → Node0:
    Min:    141.72 ns
    Max:    161.65 ns
    Mean:   153.14 ns
    Median: 153.10 ns

    Node1 → Node1:
    Min:    23.81 ns
    Max:    41.44 ns
    Mean:   32.26 ns
    Median: 32.00 ns
Square core-to-core latency heatmap with green diagonal quadrants (low latency within clusters) and orange off-diagonal quadrants (higher latency between clusters). A vertical color scale indicates latency from green (low) to red (high).

Ping-pong microbenchmark

A diagram titled Inter-Core Ping-Pong Synchronization showing communication between two threads on separate CPUs. Thread A on CPU_1 waits for a spin signal from Thread B on CPU_2, then follows a pointer chain with a write operation, and finally signals Thread B to proceed. A note below explains that threads A and B alternate modifying and reading cache lines, with writes on one causing cache invalidation on the other.

NUMA and memory binding

Bandwidth

Bandwidth sweep

    Bandwidth at different levels of cache
    --------------------------------------
    Data size used Level Bandwidth [GB/s]
         32.0625K    L1            126.5
             288K    L2             74.5
             4.5M   LLC             35.1
             528M  DRAM             15.8
Bandwidth sweep chart showing memory bandwidth (in GiB/s) vs. data sizes. Bandwidth remains near peak (~149 GiB/s) for small sizes, then drops sharply around 128 KiB, and continues declining gradually as data size increases

Note: ASCT derives the data size used to target each cache level from the results of the latency-sweep benchmark. If not selected manually, ASCT automatically includes latency-sweep as a dependency.

Cross-NUMA bandwidth

    Cross-NUMA bandwidths for the system (in GB/s)
    ----------------------------------------------
           Node 0 Node 1
    Node 0  459.1   78.3
    Node 1   78.8  459.2

Note: ASCT derives the data size used to target DRAM from the latency-sweep benchmark. If not selected manually, ASCT automatically includes latency-sweep as a dependency.

Peak bandwidth

    Peak memory bandwidth
    ---------------------
                Traffic type  Peak BW [GB/s]
                   All Reads           918.9
            3:1 Reads-Writes           868.8
            2:1 Reads-Writes           859.5
            1:1 Reads-Writes           842.7
    2:1 Rd-Wr (Non-Temporal)           652.1

Note: ASCT derives the data size used to target DRAM from the latency-sweep benchmark. If not selected manually, ASCT automatically includes latency-sweep as a dependency.

Storage characterization

This section describes the storage benchmarks in the Arm System Characterization Tool (ASCT). These tests evaluate performance characteristics of block devices and filesystems using fio under controlled sweep parameters.

What ASCT storage benchmarking measures

ASCT evaluates storage performance by sweeping parameters and measuring their impact on input/output (I/O) performance. - Sustained bandwidth - Input/Output Operations Per Second (IOPS) and latency - Host CPU utilization during I/O

CPU utilization is reported as a breakdown of time spent in user space, kernel code, I/O wait, and hardware and software interrupt handling. This information helps identify whether performance is limited by the application, the kernel, or the storage device.

Sweeps included

ASCT automates multiple types of parameter sweeps, each designed to isolate one dimension of I/O behavior: - Request Size Sweep (4 KiB → 128 KiB) Reveals throughput scaling as well as controller or device saturation points - I/O Queue Depth Sweep (QD=1 → QD=128, powers of two) Capture parallelism gains and concurrent access behavior - Concurrent Process Count Sweep (1 → 16 concurrent processes, powers of two) Show scaling across CPU cores - Access Pattern Sweep Sequential vs random, and read/write/mixed ratios (default: 70% reads). Demonstrates workload-specific differences. Compare sequential and random I/O, as well as read-only, write-only, and mixed workloads (default 70% reads). Use this sweep to show how performance varies by workload. ## How ASCT runs parameter sweeps

ASCT uses fio to perform controlled parameter sweeps. For each sweep, ASCT changes one parameter at a time while keeping all other parameters fixed. It then repeats the sweep for each configured parameter set.

Sweep type Example values
Request size 4K, 8K, 16K, 32K, 64K, 128K
Queue depth 1, 2, 4, 8, 16, 32, 64, 128
Jobs 1, 2, 4, 8, 16
Access pattern seq read, seq write, rand read, rand write, seq mixed, rand mixed

For each sweep point, ASCT records the following key metrics: - From fio: bandwidth, I/O rate, average latency, latency distribution - From mpstat: CPU utilization breakdowns (user/system/iowait/hard irq/soft irq)

Run storage benchmarking

Use the run command with storage keywords and optional --user-config parameters to select a device or create a temporary file.

# Run a specific sweep (in order of Request Size Sweep, I/O Depth Sweep, Concurrent Process Count Sweep, Access Pattern Sweep)
sudo asct run storage-request-size-sweep ...
sudo asct run storage-io-depth-sweep ...
sudo asct run storage-process-count-sweep ...
sudo asct run storage-access-pattern-sweep ...

Alternatively, use the short-form alias:

# Run a specific sweep (short form in order of Request Size Sweep, I/O Depth Sweep, Concurrent Process Count Sweep, Access Pattern Sweep)
sudo asct run srss ...
sudo asct run sids ...
sudo asct run spcs ...
sudo asct run saps ...

ASCT requires a target device or file. CAUTION: tests might overwrite file content.

# Provide a target file (ASCT will use /tmp/mytest.dat for test, user needs to create file upfront)
sudo asct run srss --user-config srss.file_names=/tmp/mytest.dat
# Provide a target device (ASCT will use the device /dev/nvme07, user needs to ensure device exists)
sudo asct run srss --user-config srss.file_names=/dev/nvme07

ASCT exposes several user overrides, including the following examples: - Create a temporary file for file benchmarking so that you do not need to provide the device name:

# Auto-create temporary file for file I/O
sudo asct run srss --user-config srss.create_temp_file=1
# Change read write mix ratio for access pattern sweep to use 20% read instead of default of 70%
sudo asct run saps --user-config saps.rwmixread=20
# Use linear iodepth sweep step between 4 and 8 for more details
sudo asct run sids --user-config sids.iodepth_sweep_steps=4,5,6,7,8

See the ASTC help for a full list of user overrides.

Outputs generated

Storage benchmarking in ASCT produces output similar to memory benchmarking:

Per-sweep sample outputs


Request Size Sweep

This sweep varies the I/O request size while keeping the rest of parameter constant. It highlights how throughput scales with larger transfers and shows when the device reaches saturation.

Console summary

BlockSize Read BW (MB/s) Write BW (MB/s) Total BW (MB/s) Read Thruput (kops) Write Thruput (kops) Thruput (kops) Read Lat. (us) Write Lat. (us) Lat. (us) CPU usr (%) CPU sys (%) CPU iowait (%)
4K 11.9 0.0 11.9 3.0 0.0 3.0 1311.7 0.0 1311.7 0.1 0.1 99.8
8K 23.8 0.0 23.8 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.2 99.6
16K 47.7 0.0 47.7 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.2 99.5
32K 95.4 0.0 95.4 3.1 0.0 3.1 1310.1 0.0 1310.1 0.1 0.3 99.6
64K 127.1 0.0 127.1 2.0 0.0 2.0 1965.9 0.0 1965.9 0.1 0.2 99.7
128K 127.2 0.0 127.2 1.0 0.0 1.0 3932.0 0.0 3932.0 0.0 0.2 99.8

Plots for details

Bandwidth I/O Rate
CPU Utilization Read Latency CDF

I/O Depth Sweep

This sweep varies the I/O queue depth (the number of outstanding requests) while keeping the request size and process count constant.
It measures how effectively the device exploits parallelism.

Console summary

IODepth Read BW (MB/s) Write BW (MB/s) Total BW (MB/s) Read Thruput (kops) Write Thruput (kops) Thruput (kops) Read Lat. (us) Write Lat. (us) Lat. (us) CPU usr (%) CPU sys (%) CPU iowait (%)
1 11.9 0.0 11.9 3.0 0.0 3.0 1311.8 0.0 1311.8 0.1 0.1 99.7
2 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.1 99.7
4 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.4 0.2 98.4
8 11.9 0.0 11.9 3.0 0.0 3.0 1311.4 0.0 1311.4 0.5 0.2 98.5
16 11.9 0.0 11.9 3.0 0.0 3.0 1311.4 0.0 1311.4 0.1 0.1 99.8
32 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.1 99.8
64 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.1 99.7
128 11.9 0.0 11.9 3.0 0.0 3.0 1311.4 0.0 1311.4 0.7 0.2 98.7

Plots for details

Bandwidth I/O Rate
CPU Utilization Read Latency CDF

Concurrent Process Count Sweep

This sweep varies the number of concurrent processes issuing I/O.
It evaluates scaling across CPU cores and submission queues, and highlights the point at which performance no longer improves.

Console summary

ProcessCount Read BW (MB/s) Write BW (MB/s) Total BW (MB/s) Read Thruput (kops) Write Thruput (kops) Thruput (kops) Read Lat. (us) Write Lat. (us) Lat. (us) CPU usr (%) CPU sys (%) CPU iowait (%)
1 7.0 0.0 7.0 1.8 0.0 1.8 552.7 0.0 552.7 0.1 0.1 24.9
2 11.9 0.0 11.9 3.0 0.0 3.0 655.5 0.0 655.5 0.1 0.2 49.7
4 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.2 99.7
8 11.9 0.0 11.9 3.0 0.0 3.0 2622.3 0.0 2622.3 0.1 0.3 99.6
16 11.9 0.0 11.9 3.0 0.0 3.0 5245.5 0.0 5245.5 0.1 0.5 99.3

Plots for details

Bandwidth I/O Rate
CPU Utilization Read Latency CDF

Access Pattern Sweep

This sweep evaluates different workload profiles, including sequential and random access patterns, and the mix of read and write operations. It highlights the workload sensitivity of the device.

Console summary

AccessPattern Read BW (MB/s) Write BW (MB/s) Total BW (MB/s) Read Thruput (kops) Write Thruput (kops) Thruput (kops) Read Lat. (us) Write Lat. (us) Lat. (us) CPU usr (%) CPU sys (%) CPU iowait (%)
read 11.9 0.0 11.9 3.0 0.0 3.0 1311.8 0.0 1311.8 0.1 0.1 99.8
write 0.0 11.9 11.9 0.0 3.0 3.0 0.0 1311.4 1311.4 0.0 0.4 99.4
randread 11.9 0.0 11.9 3.0 0.0 3.0 1311.3 0.0 1311.3 0.1 0.2 99.7
randwrite 0.0 11.9 11.9 0.0 3.0 3.0 0.0 1311.3 1311.3 0.0 0.4 99.6
rw 8.3 3.6 11.9 2.1 0.9 3.0 1235.1 1488.3 1311.4 0.1 0.3 99.7
randrw 8.3 3.6 11.9 2.1 0.9 3.0 1237.9 1481.8 1311.4 0.1 0.3 99.4

Plots for details

Bandwidth I/O Rate CPU Utilization
Read Latency CDF Write Latency CDF

Additional notes

Run diff

Use asct diff to compare results from previous Arm System Characterization Tool (ASCT) runs. Each ASCT run produces an output directory that contains benchmark results and system information.

You can use asct diff to carry out the following tasks:

What asct diff compares

Each ASCT run output directory contains a structured summary of the following information:

When you run asct diff, ASCT performs the following tasks:

How asct diff shows values

For benchmark measurements, ASCT prints the percentage difference between the baseline and each comparison run.

For system configuration reports such as system-info, cmn, and metadata, ASCT prints raw values instead of percentage differences.

If a field is missing in one run, ASCT displays <missing>. It reports the change as added or removed.

Run asct diff

Compare runs

To compare 2 runs, use:

# ASCT uses the first run directory as the baseline
asct diff runA runB

To compare 3 runs against the first run as the baseline, use:

# Compare 3 runs against the first run as the baseline
asct diff runA runB runC

Specify a baseline

To specify a baseline explicitly, use --baseline:

# Use runB as the baseline and compare runA against it
asct diff runA --baseline runB

# Use runA as the baseline and compare runB and runC against it
asct diff runB runC --baseline runA

Use asct diff options

The asct diff command supports the common ASCT output and logging options:

In addition, asct diff supports the following options:

View asct diff output

Use --output-dir to specify an output directory.

When you use --format=csv, ASCT writes diff.csv to the output directory.

When you use --format=json, ASCT writes diff.json to the output directory.

In addition to tabular output, asct diff can generate comparison plots for supported benchmark types. ASCT writes these plot files to the diff output directory with the other generated artifacts.

Diff graphs

asct diff can generate PNG graphs in the diff output directory.

The images below show example graphs that compare 3 ASCT runs:

Latency Sweep
Bandwidth
Loaded Latency

Example output

The following example shows abbreviated standard output from asct diff:

Summary
========================================
Stat                  | Value             
========================================
Baseline              | runA           
Total # of Benchmarks | 9                 
========================================

Benchmarks with Most Differences
========================================
Benchmark            | Differences       
========================================            
system-info          | 3                              
peak-bandwidth       | 2                                
metadata             | 2                 
========================================


Differences In System-Info
============================================================================================================================
field                                                   | runA                 | runB                 | runC             
============================================================================================================================
system-info.data.kern_cfg.build_dir                     | /lib/modules/6.14.0- | /lib/modules/6.11.0- | /lib/modules/6.2.0- 
                                                        | 28-generic/build     | rc1-atp+/build       | 36-generic/build    
----------------------------------------------------------------------------------------------------------------------------
system-info.data.kern_cfg.cfg_file                      | /boot/config-6.14.0- | /boot/config-6.11.0- | /boot/config-6.2.0- 
                                                        | 28-generic           | rc1-atp+             | 36-generic          
----------------------------------------------------------------------------------------------------------------------------
system-info.data.kern_cfg.distro                        | Ubuntu 24.04.3 LTS   | Ubuntu 22.04.5 LTS   | Ubuntu 22.04.3 LTS  
----------------------------------------------------------------------------------------------------------------------------


Measurement Delta Percentage Between runA And Comparison Runs
============================================================================================================================
field                                                   | runA                 | runB                 | runC             
============================================================================================================================
peak-bandwidth.data.All Reads.Peak BW [GB/s]            | 186.31               | 155.73%              | 11.86%              
----------------------------------------------------------------------------------------------------------------------------
peak-bandwidth.data.All Reads.% of Peak Theoretical     | 90.97                | -2.57%               | -10.5%              
----------------------------------------------------------------------------------------------------------------------------
peak-bandwidth.data.3:1 Reads-Writes.Peak BW [GB/s]     | 161.98               | 158.14%              | 20.11%              
----------------------------------------------------------------------------------------------------------------------------


Differences In Metadata
============================================================================================================================
field                                                   | runA                 | runB                 | runC             
============================================================================================================================
metadata.version                                        | 0.3.0.               | 0.3.2                | 0.3.1         
----------------------------------------------------------------------------------------------------------------------------

This output shows the following information: