Skip to content

Commit 496027a

Browse files
Merge pull request #2867 from jasonrandrews/review2
Review Fastpath Learning Path
2 parents 140ff0a + b6514e7 commit 496027a

11 files changed

Lines changed: 232 additions & 323 deletions

File tree

content/learning-paths/servers-and-cloud-computing/fastpath/_index.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
---
2-
title: Fastpath Kernel Build and Install Guide
2+
title: Benchmark on Arm servers with different Linux kernels using Fastpath
33

44
draft: true
55
cascade:
66
draft: true
77

88
minutes_to_complete: 45
99

10-
who_is_this_for: Software developers and performance engineers who want to explore benchmarking across different kernel versions with Fastpath on Arm.
10+
who_is_this_for: This is an advanced topic for software developers and performance engineers who want to benchmark and compare different Linux kernel versions on Arm servers.
1111

1212
learning_objectives:
13-
- Understand how Fastpath streamlines kernel experimentation workflows
14-
- Provision an Arm-based build machine and compile Fastpath-enabled kernels on it
15-
- Provision an Arm-based test system, also known as the System Under Test (SUT)
16-
- Create a test plan consisting of kernel versions and benchmark suites
17-
- Launch an Arm-based Fastpath host to orchestrate the kernel benchmarking process on the SUT
13+
- Build custom Linux kernels for Arm systems using tuxmake and Fastpath
14+
- Configure and provision Arm-based EC2 instances for kernel testing
15+
- Create and execute test plans that compare kernel performance across versions
16+
- Analyze benchmark results to identify performance differences between kernels
1817

1918
prerequisites:
2019
- An AWS account with permissions to create EC2 instances
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---

content/learning-paths/servers-and-cloud-computing/fastpath/analyze_benchmark_results.md

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
---
2-
title: "Analyze the Benchmark Results"
2+
title: "Analyze the benchmark results"
33
weight: 14
44

55
layout: "learningpathall"
66
---
77

88
## Review benchmark results
99

10+
To inspect the outputs stored in the `results/` directory, use the sample commands output when `generate_plan.sh` completed. Some examples are below:
1011

11-
12-
To inspect the outputs stored in the `results/` directory you can use the sample commands output when `generate_plan.sh` completed. Some examples are below:
13-
14-
### List swprofiles involved from tests saved in the *results* folder:
12+
### List swprofiles from tests
1513

1614
To see the swprofiles (kernels) tested and stored in the results directory, run:
1715

18-
```commandline
16+
```console
1917
source ~/venv/bin/activate
2018
~/fastpath/fastpath/fastpath result list results-fastpath_test_010826-1837 --object swprofile
2119
```
2220

23-
If you followed the tutorial exactly, you should see output similar to:
21+
The output is similar to:
2422

2523
```output
2624
+------------------+----------------------+
@@ -58,12 +56,15 @@ If you followed the tutorial exactly, you should see output similar to:
5856

5957
### View relative results per kernel
6058

61-
To see the relative results for each kernel, run the following commands:
59+
To see the relative results for each kernel, run the following command:
6260

63-
```commandline
64-
~/fastpath/fastpath/fastpath result show results-fastpath_test_010826-1837 --swprofile fp_6.19.0-rc1-ubuntu --relative
61+
```console
62+
~/fastpath/fastpath/fastpath result show results-fastpath_test_010826-1837 --swprofile fp_6.19.0-rc1-ubuntu --relative
6563
```
66-
Relative in this case means that the statistics displayed are relative to the mean. In addition to the min/mean/max, you are also given the confidence interval bounds, the coefficient of variation and the number of samples, similar to:
64+
65+
Relative in this case means that the statistics displayed are relative to the mean. In addition to the min/mean/max, you're also given the confidence interval bounds, the coefficient of variation, and the number of samples.
66+
67+
The output is similar to:
6768

6869
```output
6970
+------------------+--------------------+--------+----------+--------+----------+--------+--------+-------+
@@ -75,10 +76,11 @@ Relative in this case means that the statistics displayed are relative to the me
7576

7677
You can run it again for the other kernel:
7778

78-
```commandline
79+
```console
7980
~/fastpath/fastpath/fastpath result show results-fastpath_test_010826-1837 --swprofile fp_6.18.1-ubuntu --relative
8081
```
81-
with output similar to:
82+
83+
The output is similar to:
8284

8385
```output
8486
+------------------+--------------------+--------+----------+--------+----------+--------+--------+-------+
@@ -92,12 +94,11 @@ with output similar to:
9294

9395
To compare the relative results between both kernels, run:
9496

95-
96-
97-
```commandline
97+
```console
9898
~/fastpath/fastpath/fastpath result show results-fastpath_test_010826-1837 --swprofile fp_6.19.0-rc1-ubuntu --swprofile fp_6.18.1-ubuntu --relative
9999
```
100-
with output similar to:
100+
101+
The output is similar to:
101102

102103
```output
103104
+------------------+--------------------+-----------------------+---------------------+
@@ -108,4 +109,6 @@ with output similar to:
108109
```
109110
We see 6.18.1 is performing slightly better than 6.19-rc1 in this benchmark.
110111

111-
More examples of analyzing results can be found in the [*fastpath* Results User Guide](https://fastpath.docs.arm.com/en/latest/user-guide/resultshow.html).
112+
More examples of analyzing results can be found in the [Fastpath Results User Guide](https://fastpath.docs.arm.com/en/latest/user-guide/resultshow.html).
113+
114+
When you're done testing, remember to terminate your EC2 instances and clean up any other AWS resources you created to avoid unnecessary charges.

content/learning-paths/servers-and-cloud-computing/fastpath/build_setup.md

Lines changed: 49 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
---
2-
title: "Setup Build Instance"
2+
title: "Set up the kernel build host"
33

44
weight: 3
55

66
layout: "learningpathall"
77
---
88

9-
## Provision the build host
9+
## Provision the kernel build host
1010

11-
CPU-optimized instances compile kernels quickly, so in our example, an AWS Graviton `m6g.12xlarge` instance is used. It will be referred to as the *build* machine throughout the rest of the guide.
11+
CPU-optimized instances compile kernels quickly, so in our example, an AWS Graviton `m6g.12xlarge` instance is used. It will be referred to as the kernel build host throughout the rest of the guide.
1212

1313
{{% notice Note %}}
14-
The following steps involve launching an EC2 instance. You can perform all EC2 instance creation steps via the AWS Management Console instead or AWS CLI. For step-by-step instructions to bring up an EC2 instance via the console, consult the [Compute Service Provider learning path](/learning-paths/servers-and-cloud-computing/csp/) for detailed instructions. A tutorial from AWS is also available via [Get started with Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html).
14+
The following steps involve launching an EC2 instance. You can perform all EC2 instance creation steps using the AWS Management Console or AWS CLI. For step-by-step instructions to bring up an EC2 instance using the console, see [Get started with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/csp/) or the AWS tutorial [Get started with Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html).
1515
{{% /notice %}}
1616

17-
Create build host with the following specifications:
17+
Create the kernel build host with the following specifications:
1818

19-
1. **Name***fastpath-build*
20-
2. **Operating system***Ubuntu*
21-
3. **AMI***Ubuntu 24.04 LTS (Arm)*
22-
4. **Architecture***64-bit Arm*
19+
1. **Name** — fastpath-build
20+
2. **Operating system** — Ubuntu
21+
3. **AMI** — Ubuntu 24.04 LTS (Arm)
22+
4. **Architecture** — 64-bit Arm
2323
5. **Instance type**`m6g.12xlarge`
24-
6. **Key pair***Select or create a key for SSH*
25-
7. **Security group***allow SSH inbound from your IP and cluster peers*
26-
8. **Storage***200 GB gp3*
24+
6. **Key pair** — Select or create a key for SSH
25+
7. **Security group**Allow SSH inbound from your IP and cluster peers
26+
8. **Storage** — 200 GB gp3
2727

28-
There are many different ways to create this instance, and a few different methods are demonstrated below. Choose the method which suits you best.
28+
There are many different ways to create this instance, and a few different methods are demonstrated below. Choose the method that suits you best.
2929

3030
{{< tabpane >}}
3131
{{< tab header="AWS Console" img_src="/learning-paths/servers-and-cloud-computing/fastpath/images/ec2_setup.png">}}
@@ -160,102 +160,73 @@ EOF
160160
{{< /tab >}}
161161
{{< /tabpane >}}
162162

163-
When the instance reports a `running` state, note the public and private IP addresses as BUILD_PUBLIC_IP and BUILD_PRIVATE_IP. You'll need these values later.
163+
When the instance reports a `running` state, note the public and private IP addresses as BUILD_PUBLIC_IP and BUILD_PRIVATE_IP. You'll need these values later.
164164

165-
## Clone the Kernel Build repository on the build machine
165+
## Clone the Kernel Build repository on the build host
166166

167-
The Kernel Build repository contains build scripts and configuration files needed to easily compile kernels. To clone the repository:
167+
The kernel build repository contains build scripts and configuration files to compile kernels.
168168

169-
1. SSH into the `m6g.12xlarge` host using the configured key pair.
169+
To clone the repository, first, SSH into the `m6g.12xlarge` host using the configured key pair.
170170

171-
```output
172-
ssh -i ~/.ssh/gcohen1.pem ubuntu@34.216.87.65
171+
For more background, refer to the [Install required dependencies](/learning-paths/servers-and-cloud-computing/kernel-build/how-to-1/#install-required-dependencies) of the kernel build Learning Path.
173172

174-
$ ssh -i ~/.ssh/gcohen1.pem ubuntu@54.174.185.226
173+
Run the commands from that section on the build host.
175174

176-
Warning: Permanently added '54.174.185.226' (ED25519) to the list of known hosts.
177-
Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 6.14.0-1018-aws aarch64)
178-
179-
System information as of Thu Jan 8 18:12:07 UTC 2026
180-
181-
System load: 0.35 Users logged in: 0
182-
Memory usage: 0% IPv4 address for ens66: 172.31.110.110
183-
184-
Last login: Thu Jan 8 18:12:14 2026 from 217.140.103.82
185-
ubuntu@ip-172-31-110-110:~$
186-
```
187-
188-
2. Open the [Install and Clone section](/learning-paths/servers-and-cloud-computing/kernel-build/how-to-1/#install-required-dependencies) of the install guide from your workstation.
189-
190-
3. Run each command from that section on the build machine. It should be similar to the following (always refer to the above link for the latest command line):
191-
192-
193-
```output
194-
$ sudo apt update
195-
$ sudo apt install -y git python3 python3-pip python3-venv build-essential bc rsync dwarves flex bison libssl-dev libelf-dev btop yq
196-
$ cd
197-
$ git clone https://github.com/geremyCohen/arm_kernel_install_guide.git ~/arm_kernel_install_guide
198-
$ cd ~/arm_kernel_install_guide
199-
$ chmod +x scripts/*.sh
200-
201-
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
202-
Hit:1 http://us-east-1.ec2.ports.ubuntu.com/ubuntu-ports noble InRelease
203-
Get:2 http://us-east-1.ec2.ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
204-
Get:3 http://us-east-1.ec2.ports.ubuntu.com/ubuntu-ports noble-backports InRelease [126 kB]
205-
Get:4 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease [126 kB]
206-
...
207-
0 upgraded, 104 newly installed, 0 to remove and 43 not upgraded.
208-
Setting up build-essential (12.10ubuntu1) ...
209-
Setting up libssl-dev:arm64 (3.0.13-0ubuntu3.6) ...
210-
Setting up python3-pip (24.0+dfsg-1ubuntu1.3) ...
211-
Cloning into 'arm_kernel_install_guide'...
175+
```console
176+
sudo apt update
177+
sudo apt install -y git python3 python3-pip python3-venv python-is-python3 build-essential bc rsync dwarves flex bison libssl-dev libelf-dev btop yq jq
178+
git clone https://github.com/geremyCohen/arm_kernel_install_guide.git ~/arm_kernel_install_guide
179+
cd ~/arm_kernel_install_guide
180+
chmod +x scripts/*.sh
212181
```
213182

214-
## Building with the Kernel Build utility script
183+
## Building with the kernel build utility script
215184

216-
With the repository cloned, you can now produce kernels with *fastpath* support.
185+
With the repository cloned, you can now produce kernels with Fastpath support.
217186

218187
Normally, to manually build, you'd have to:
219188

220189
- Update the host and install proper versions of every kernel build dependency
221-
- Find and utilize the current stock kernel config
190+
- Find and use the current stock kernel config
222191
- Clone the upstream kernel tree to fetch the desired versions and clean the tree between builds
223-
- For each kernel version, copy the base config into the workspace, and append all *fastpath*-specific options
192+
- For each kernel version, copy the base config into the workspace, and append all Fastpath-specific options
224193
- Run tuxmake for each kernel with the proper options
225-
- Repeat the entire process for the second tag, ensuring the builds dont collide
194+
- Repeat the entire process for the second tag, ensuring the builds don't collide
226195
- Verify both kernel directories contain the required files
227-
228-
But do not fear... Using ```scripts/kernel_build_and_install.sh``` bundles all those steps together in a single easy-to-use command.
229196

230-
### Which kernels should you build and test against with Fastpath?
231-
The answer to this question depends on what you are trying to accomplish.
197+
The `scripts/kernel_build_and_install.sh` script bundles all those steps together in a single easy-to-use command.
198+
199+
### Which kernels should you build and test with Fastpath?
232200

233-
If you are running through the *fastpath* tutorial for the first time and getting used to how it works, its fine to use the arbitrary kernel versions given in *fastpath* Example 2, which are v6.18.1 and v6.19-rc1.
201+
The answer to this question depends on what you're trying to accomplish.
234202

235-
Once you are familiar with the process and you wish to explore and test further, choose any specific kernel versions, based on your use case.
203+
If you're running through the Fastpath tutorial for the first time and getting used to how it works, use kernel versions v6.18.1 and v6.19-rc1.
204+
205+
Once you're familiar with the process and want to explore and test further, choose any specific kernel versions based on your use case.
236206

237207
## Compile and build Fastpath-enabled kernels 6.18.1 and 6.19-rc1
238208

239209
{{% notice Note %}}
240-
Warning messages are expected at compile-time. Warnings can be safely ignored, however fatal errors should be investigated.
210+
Warning messages are expected at compile-time. Warnings can be safely ignored, however fatal errors should be investigated.
241211
{{% /notice %}}
242212

243-
To compile kernels with *fastpath* options:
213+
To compile kernels with Fastpath options:
244214

245-
1. On the build machine, ```cd``` into the `arm_kernel_install_guide` folder you just cloned.
215+
On the build host, navigate to the `arm_kernel_install_guide` folder you just cloned.
246216

247-
```command
217+
```console
248218
cd ~/arm_kernel_install_guide
249219
```
250220

251-
```output
252-
ubuntu@ip-172-31-110-110:~/arm_kernel_install_guide$
221+
Open the [Custom tags with Fastpath enabled](/learning-paths/servers-and-cloud-computing/kernel-build/how-to-3/#build-custom-tags-with-fastpath-enabled) section from the Learning Path, and follow the instructions to run the build script.
222+
223+
```console
224+
./scripts/kernel_build_and_install.sh --tags v6.18.1,v6.19-rc1 --fastpath true
253225
```
254226

255-
2. Open the [Custom tags with *fastpath* enabled](/learning-paths/servers-and-cloud-computing/kernel-build/how-to-3/#build-custom-tags-with-fastpath-enabled) section from the install guide, and follow the instructions to run the build script. It should be similar to the following (always refer to the above link for the latest command line):
227+
The output should be similar to the following (always refer to the above link for the latest command line):
256228

257229
```output
258-
$ ./scripts/kernel_build_and_install.sh --tags v6.18.1,v6.19-rc1 --fastpath true
259230
260231
[2026-01-08 18:13:14] Updating apt metadata
261232
Kernel build settings:
@@ -275,8 +246,8 @@ I: build output in /home/ubuntu/kernels/6.19.0-rc1-ubuntu
275246
[2026-01-08 18:32:06] [v6.19-rc1-2] Build artifacts are located in /home/ubuntu/kernels/6.19.0-rc1-ubuntu+
276247
```
277248

278-
The script will now build two kernel images. This process may take some time -- on a `m6g.12xlarge` instance, expect approximately 30 minutes for both kernel builds to complete.
249+
The script builds two kernel images. This process may take some time. On a `m6g.12xlarge` instance, expect approximately 30 minutes for both kernel builds to complete.
279250

280-
4. Monitor the console output for the `BUILD COMPLETE` message.
251+
Monitor the console output for the `BUILD COMPLETE` message.
281252

282-
Once finished, you will be ready to move on to the next step, where you prepare the *fastpath* host.
253+
Once finished, you're ready to move on to the next step, where you prepare the Fastpath host.

0 commit comments

Comments
 (0)