Install Aperf for performance analysis on AWS Graviton processors
Tags: aws, performance
Published: 2024-01-05 17:16:33

APerf (AWS Perf) is an open source command line performance analysis tool which saves time by collecting information which is normally collected by multiple tools such as `perf`, `sysstat`, and `sysctl`.

APerf was recently created by AWS to help with Linux performance analysis.

In addition to the CLI, APerf includes an HTML view to visualize the collected data. 

## Before you begin

APerf works on Linux and is available as a single binary. 

APerf works best if `perf` is installed. Refer to the [Perf for Linux on Arm](https://learn.arm.com/install-guides/perf) install guide for instructions.

This article provides a quick solution to install APerf on AWS Graviton processors.

Confirm you are using Graviton:

```console
uname -m
```

The output should be:

```output
aarch64
```

## Download and install APerf

The easiest way to install APerf is to download a release from GitHub, extract it, and setup your `PATH` environment variable or copy the executable to a directory already in your search path. 

Visit the [releases page](https://github.com/aws/aperf/releases/) to see a list of available releases. 

You can also download a release from the command line:

```console
wget https://github.com/aws/aperf/releases/download/v0.1.9-alpha/aperf-v0.1.9-alpha-aarch64.tar.gz
```

Extract the release:

```console
tar xvfz aperf-v0.1.9-alpha-aarch64.tar.gz
```

Add the path to `aperf` in your `.bashrc` file. 

```console
echo 'export PATH="$PATH:$HOME/aperf-v0.1.9-alpha-aarch64"' >> ~/.bashrc
source ~/.bashrc
```

Alternatively, you can copy the `aperf` executable to a directory already in your search path.

```console
sudo cp aperf-v0.1.9-alpha-aarch64/aperf /usr/local/bin 
```

Confirm `aperf` is installed by printing the version:

```console 
aperf --version
```

The output should print the version:

```output
aperf 0.1.0 (0c4f58c)
```

## Verify APerf is working

### Create and view a report 

To confirm APerf is working, start it for 10 seconds and take a sample every 1 second.

```console 
aperf record -i 1 -p 10 -r run1 --profile
```

After 10 seconds `aperf` completes and you see a directory named `run1` and a tar file named `run1.tar.gz`. 

Next, generate a report from the recorded data:

```console
aperf report -r run1 -n report1
```

The name of the report is `report1` and you will see a `report1` directory and a tar file named `report1.tar.gz`. 

The tar files are useful if you want to copy them to another machine.

Using a web browser, open the file `index.html` in the `report1/` directory. To open the file use `Ctrl+O` for Linux and Windows and use `⌘+O` for macOS.

The report is now visible in the browser. 

There are a number of tabs on the left side showing the collected data. 

You can browse the data and see what has been collected. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h166eguwlyb7epido1g5.png)

The Kernel Config and Sysctl Data tabs are blank unless you click No.

### Create and view a report containing 2 runs

To demonstrate comparing 2 runs, create a second run with `aperf record`:

```console
aperf record -i 1 -p 10 -r run2 --profile
```

After 10 seconds `aperf` completes and you see a directory named `run2` and a tar file named `run2.tar.gz`. 

Generate a report with both the first and second runs included:

```console
aperf report -r run1 -r run2 -n compare
```

The name of the report is `compare` and you will see a `compare` directory and a tar file named `compare.tar.gz`. 

Open the `index.html` file in the `compare/` directory to see the 2 runs side by side. 

A screenshot is shown below:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ik54gpi7zq0luzx3wra.png)

### Use an HTTP server

If you are doing performance analysis on an EC2 instance without a remote desktop, you can view the APerf reports from your local browser by running a simple web server on the remote machine.

In the directory with the report data and the `index.html` file run a simple web server:

```console
python -m http.server 3000
```

Make sure port 3000 is open on the remote system. 

You can open the port in your security group or use SSH to forward port 3000.

To use SSH (substitute your SSH key name and IP address):

```console
ssh -i your-key.pem -L 3000:localhost:3000 ubuntu@your-ec2-ip 
```

If you use SSH port forwarding, open your browser to http://localhost:3000 

If you use the security group, enter the IP address of the EC2 instance followed by `:3000` in your browser address bar.

You will see the same APerf report, and avoid the need to copy files to your local machine from the remote system for viewing.

You are ready to use APerf for performance analysis on AWS Graviton processors.

Visit https://learn.arm.com for more Graviton related content.