Skip to content

Commit ba2f471

Browse files
authored
Merge pull request #3458 from anupras-mohapatra-arm/summaries-and-faqs
adding 20 more summaries and faqs for servers and cloud computing
2 parents b0f291d + b202a0c commit ba2f471

23 files changed

Lines changed: 979 additions & 30 deletions

File tree

content/learning-paths/cross-platform/_example-learning-path/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ prerequisites:
1818

1919
author: Zach Lasiuk
2020

21-
generate_summary_faq: true
21+
generate_summary_faq: false
2222
rerun_summary: false
2323
rerun_faqs: false
2424

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

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,55 @@ learning_objectives:
1414
prerequisites:
1515
- An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from a cloud service provider or an on-premise Arm server.
1616

17+
# START generated_summary_faq
18+
generated_summary_faq:
19+
template_version: summary-faq-v3
20+
generated_at: '2026-06-30T21:36:51Z'
21+
generator: ai
22+
ai_assisted: true
23+
ai_review_required: true
24+
model: gpt-5
25+
prompt_template: summary-faq-v3
26+
source_hash: a4cf1d9161b3a32e29694415762eda419752e1c3144662d5e131b6553f0a58e3
27+
summary_generated_at: '2026-06-30T21:36:51Z'
28+
summary_source_hash: a4cf1d9161b3a32e29694415762eda419752e1c3144662d5e131b6553f0a58e3
29+
faq_generated_at: '2026-06-30T21:36:51Z'
30+
faq_source_hash: a4cf1d9161b3a32e29694415762eda419752e1c3144662d5e131b6553f0a58e3
31+
summary: >-
32+
You'll deploy Hugging Face Sentiment Analysis models
33+
with PyTorch on Arm servers and measure how they perform. Starting from a working Ubuntu
34+
22.04 Arm environment, you'll run three NLP models with the Sentiment Analysis
35+
pipeline, record baseline results, and enable BFloat16 fast math kernels to assess the
36+
impact on inference performance. By
37+
the end, you'll compare before-and-after measurements to confirm the effect of BFloat16
38+
on this workload.
39+
faqs:
40+
- question: Which environment do the instructions assume?
41+
answer: >-
42+
The instructions target an Arm server running Ubuntu 22.04 LTS. They've been tested on
43+
AWS Graviton3 (c7g) instances.
44+
- question: What system resources should I provision before running the steps?
45+
answer: >-
46+
Use an Arm server instance with at least four CPU cores and 8 GB of RAM. This capacity supports
47+
running the three sentiment analysis models and collecting measurements.
48+
- question: Which framework and model source will I use in this Learning Path?
49+
answer: >-
50+
You'll uses PyTorch to run NLP Sentiment Analysis models sourced from Hugging Face.
51+
- question: How should I measure the performance uplift from BFloat16 fast math kernels?
52+
answer: >-
53+
First, run the models to collect a baseline using the same Sentiment Analysis pipeline.
54+
Then enable BFloat16 fast math kernels on supported Arm Neoverse-based AWS Graviton3 processors,
55+
rerun the same workload, and compare measurements.
56+
- question: Which models will I evaluate and what should I have at the end?
57+
answer: >-
58+
You'll evaluate three NLP models with the Sentiment Analysis pipeline. By the end, you
59+
should have deployed the models on your Arm server and recorded baseline and BFloat16-enabled
60+
performance results for comparison.
61+
# END generated_summary_faq
62+
1763
author: Pareena Verma
1864

19-
generate_summary_faq: true
65+
generate_summary_faq: false
2066
rerun_summary: false
2167
rerun_faqs: false
2268

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

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,59 @@ learning_objectives:
1313
- Measure performance improvements on Graviton4 instances
1414

1515
prerequisites:
16-
- An [Arm based instance](/learning-paths/servers-and-cloud-computing/csp/) from an appropriate
17-
cloud service provider.
16+
- An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from an appropriate cloud service provider.
17+
18+
# START generated_summary_faq
19+
generated_summary_faq:
20+
template_version: summary-faq-v3
21+
generated_at: '2026-06-30T21:37:19Z'
22+
generator: ai
23+
ai_assisted: true
24+
ai_review_required: true
25+
model: gpt-5
26+
prompt_template: summary-faq-v3
27+
source_hash: 1701b37580fe5d012a5e6fd322307742656a748dfb766fd48914011167386e95
28+
summary_generated_at: '2026-06-30T21:37:19Z'
29+
summary_source_hash: 1701b37580fe5d012a5e6fd322307742656a748dfb766fd48914011167386e95
30+
faq_generated_at: '2026-06-30T21:37:19Z'
31+
faq_source_hash: 1701b37580fe5d012a5e6fd322307742656a748dfb766fd48914011167386e95
32+
summary: >-
33+
You'll implement and benchmark bitmap scanning for database-style
34+
workloads on Arm Neoverse V2–based servers, such as AWS Graviton4. First, you'll build a compact
35+
bit vector in C and add baseline and improved scalar scanning routines. Then, you'll implement Neon
36+
and SVE vectorized versions to process data in wider chunks. You'll use a benchmarking harness
37+
that measures each approach so the relative behavior of scalar, Neon, and SVE implementations can
38+
be compared on an Arm-based Linux instance. By the end, you'll run a single C program
39+
that exercises all variants and produces timing results suitable for side-by-side evaluation.
40+
faqs:
41+
- question: Where should I place the code as I follow the steps?
42+
answer: >-
43+
Use a single source file named `bitvector_scan_benchmark.c`. Add the bit vector type, helper
44+
functions, scalar scan routines, Neon and SVE implementations, and the benchmarking code
45+
into this file as directed.
46+
- question: What must the bitmap data structure contain before I can add the scan functions?
47+
answer: >-
48+
The data structure must include a byte array that holds the bits, the physical size in bytes, and the logical
49+
size in bits. The same file must also add helpers to generate and analyze test bitmaps.
50+
- question: In what order should I implement and test the scanning approaches?
51+
answer: >-
52+
Start with the per-bit scalar baseline, then the optimized scalar version, followed by the
53+
Neon implementation, and finally SVE. After each addition, run the benchmark to compare
54+
against the previous versions.
55+
- question: What result should I expect from the benchmarking step?
56+
answer: >-
57+
The framework measures elapsed time for each scan function over a chosen number of iterations
58+
and tracks how many set-bit positions were found. Use the same input bitmap and iteration
59+
count when comparing implementations.
60+
- question: How can I exercise different workload characteristics when benchmarking?
61+
answer: >-
62+
Use the provided bitmap generation helpers to create datasets with varying densities. Sparse
63+
and dense bitmaps highlight different behaviors across the scalar, Neon, and SVE implementations.
64+
# END generated_summary_faq
1865

1966
author: Pareena Verma
2067

21-
generate_summary_faq: true
68+
generate_summary_faq: false
2269
rerun_summary: false
2370
rerun_faqs: false
2471

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,59 @@ prerequisites:
2020
- GCC version 13.3 or later to compile the example program ([GCC](/install-guides/gcc/) )
2121
- A system with with sufficient hardware performance counters to use the [TopDown](/install-guides/topdown-tool) methodology. This typically requires running on bare metal rather than a virtualized environment.
2222

23+
# START generated_summary_faq
24+
generated_summary_faq:
25+
template_version: summary-faq-v3
26+
generated_at: '2026-06-30T21:37:54Z'
27+
generator: ai
28+
ai_assisted: true
29+
ai_review_required: true
30+
model: gpt-5
31+
prompt_template: summary-faq-v3
32+
source_hash: 8654b656131bf1d529e11d85f874f7a81c01f7207340d2a606b6fd2d80bfad04
33+
summary_generated_at: '2026-06-30T21:37:54Z'
34+
summary_source_hash: 8654b656131bf1d529e11d85f874f7a81c01f7207340d2a606b6fd2d80bfad04
35+
faq_generated_at: '2026-06-30T21:37:54Z'
36+
faq_source_hash: 8654b656131bf1d529e11d85f874f7a81c01f7207340d2a606b6fd2d80bfad04
37+
summary: >-
38+
You'll apply LLVM BOLT post-link optimization to AArch64 binaries
39+
using profile-guided code layout. Starting with a deliberately inefficient BubbleSort workload
40+
to make instruction locality issues visible, you'll install a suitable BOLT
41+
release, set up a working directory, and gather profiles with BRBE, SPE, instrumentation,
42+
or PMU sampling. Using a small set of Arm TopDown indicators, you'll judge
43+
whether a program is front-end bound and a good candidate for BOLT. You'll then run BOLT with
44+
collected profiles to reorganize code layout and evaluate the impact using performance
45+
metrics and profiling data to confirm improvements in instruction delivery and locality.
46+
faqs:
47+
- question: Which BOLT version should I use if my package manager installs an older release?
48+
answer: >-
49+
Use LLVM BOLT 22.1.0 or later. If your distribution provides an older version, install a
50+
prebuilt LLVM release instead (for example, LLVM 22.1.5) to match the required features.
51+
- question: Where do the example’s build and profiling outputs go?
52+
answer: >-
53+
You'll find outputs in three directories: out for binaries, prof for profile data,
54+
and heatmap for visualization artifacts. Keeping these separate makes it easier to rerun
55+
steps and compare results.
56+
- question: How do I know if my program is a good candidate for BOLT?
57+
answer: >-
58+
Check a small set of Arm TopDown indicators related to instruction delivery and code locality.
59+
Programs that appear front-end bound, with inefficient instruction fetch and poor locality,
60+
are strong candidates for code layout optimization with BOLT.
61+
- question: What should I use if my kernel doesn't meet the BRBE or SPE requirements?
62+
answer: >-
63+
If your kernel is older than the BRBE requirement, use SPE if the kernel meets the SPE version
64+
requirement. If neither is available, you can use instrumentation or PMU
65+
event sampling to collect profiles.
66+
- question: What result should I expect after running BOLT with profiles?
67+
answer: >-
68+
You should be able to evaluate changes using performance metrics and profiling data. Look
69+
for improvements in instruction delivery indicators and evidence of better code locality
70+
in the optimized binary.
71+
# END generated_summary_faq
72+
2373
author: Paschalis Mpeis
2474

25-
generate_summary_faq: true
75+
generate_summary_faq: false
2676
rerun_summary: false
2777
rerun_faqs: false
2878

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,59 @@ learning_objectives:
1616
prerequisites:
1717
- An Arm-based Linux system with [BOLT](/install-guides/bolt/) and [Linux Perf](/install-guides/perf/) installed
1818

19+
# START generated_summary_faq
20+
generated_summary_faq:
21+
template_version: summary-faq-v3
22+
generated_at: '2026-06-30T21:38:23Z'
23+
generator: ai
24+
ai_assisted: true
25+
ai_review_required: true
26+
model: gpt-5
27+
prompt_template: summary-faq-v3
28+
source_hash: 84a8b96fe7df302e0a2a6e4645bbb6170b45a3e0b55e0ea3682ec47663d34819
29+
summary_generated_at: '2026-06-30T21:38:23Z'
30+
summary_source_hash: 84a8b96fe7df302e0a2a6e4645bbb6170b45a3e0b55e0ea3682ec47663d34819
31+
faq_generated_at: '2026-06-30T21:38:23Z'
32+
faq_source_hash: 84a8b96fe7df302e0a2a6e4645bbb6170b45a3e0b55e0ea3682ec47663d34819
33+
summary: >-
34+
You'll use BOLT with Linux Perf profiles to optimize an Arm application
35+
and its shared libraries. First, you'll instrument a MySQL server build to generate workload-specific
36+
profiles, create separate traces for read-heavy and write-heavy runs, and merge them to broaden
37+
code layout guidance. Then, you'll rebuild OpenSSL to make `libssl.so` and
38+
`libcrypto.so` suitable for BOLT, collect profiles, and apply optimizations independently
39+
from the main binary. Finally, you'll compare results across baseline, isolated, and merged
40+
scenarios using a consistent Sysbench configuration to assess the
41+
impact of application and library-level optimizations on throughput and latency.
42+
faqs:
43+
- question: What output should I expect after running an instrumented workload with BOLT?
44+
answer: >-
45+
BOLT produces a profile file in `.fdata` format, such as `profile-writeonly.fdata`. These files
46+
are later used to optimize the binary and can be merged to improve coverage.
47+
- question: Should I reuse the BOLT-instrumented mysqld binary for additional workloads or create
48+
a new one?
49+
answer: >-
50+
Either approach works. The steps allow reusing the previously instrumented binary or generating
51+
a new instrumented variant as long as you produce a new `.fdata` profile for each workload.
52+
- question: Which shared libraries are targeted for optimization, and what if the system copies
53+
are stripped?
54+
answer: >-
55+
The path optimizes `libssl.so` and `libcrypto.so`. If system libraries are stripped, rebuild
56+
OpenSSL from source with relocations enabled so BOLT can instrument and optimize them.
57+
- question: Do I need to rebuild the application to benefit from optimized shared libraries?
58+
answer: >-
59+
The shared libraries are optimized independently of the application binary. The path focuses
60+
on rebuilding OpenSSL for symbol information and then integrating the optimized libraries
61+
with the application.
62+
- question: What test configuration is used to compare baseline and BOLT-optimized results?
63+
answer: >-
64+
Sysbench is run with `--time=0 --events=10000` to complete exactly 10,000 requests per thread.
65+
Use this consistent configuration to compare baseline, application-only, and merged-with-library
66+
optimization scenarios.
67+
# END generated_summary_faq
68+
1969
author: Gayathri Narayana Yegna Narayanan
2070

21-
generate_summary_faq: true
71+
generate_summary_faq: false
2272
rerun_summary: false
2373
rerun_faqs: false
2474

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

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Learn how to optimize an application with BOLT
2+
title: Optimize an application with BOLT
33
description: Learn how to build, profile, and optimize Arm executables using BOLT post-link binary optimization to improve application performance through code layout improvements.
44

55
minutes_to_complete: 30
@@ -15,9 +15,55 @@ prerequisites:
1515
- An Arm based system running Linux with [BOLT](/install-guides/bolt/) and [Linux Perf](/install-guides/perf/) installed. The Linux kernel should be version 5.15 or later. Earlier kernel versions can be used, but some Linux Perf features may be limited or not available. For [SPE](./bolt-spe) the version should be 6.14 or later.
1616
- (Optional) A second, more powerful Linux system to build the software executable and run BOLT.
1717

18+
# START generated_summary_faq
19+
generated_summary_faq:
20+
template_version: summary-faq-v3
21+
generated_at: '2026-06-30T21:38:54Z'
22+
generator: ai
23+
ai_assisted: true
24+
ai_review_required: true
25+
model: gpt-5
26+
prompt_template: summary-faq-v3
27+
source_hash: 2e9ac8a3c73b7d3d59fe6ba20fb6d61fc2b7e5e9320aaadc20af0a8bbb3ff959
28+
summary_generated_at: '2026-06-30T21:38:54Z'
29+
summary_source_hash: 2e9ac8a3c73b7d3d59fe6ba20fb6d61fc2b7e5e9320aaadc20af0a8bbb3ff959
30+
faq_generated_at: '2026-06-30T21:38:54Z'
31+
faq_source_hash: 2e9ac8a3c73b7d3d59fe6ba20fb6d61fc2b7e5e9320aaadc20af0a8bbb3ff959
32+
summary: >-
33+
You'll use BOLT to post-link optimize an Arm Linux executable
34+
based on real execution profiles. First, you'll prepare a target system for profiling and optionally
35+
a separate build/BOLT system, then choose a profiling method — Perf samples, ETM, or SPE — to
36+
collect runtime behavior into a `perf.data` file. You'll convert the profile for BOLT, and run BOLT to reorder code layout and emit a new optimized executable. Finally, you'll compare the resulting binary against
37+
the original to observe improvements.
38+
faqs:
39+
- question: How should I choose between Perf samples, ETM, and SPE for profiling?
40+
answer: >-
41+
Use the dedicated sections for each method. Perf samples provide general sampling data,
42+
while ETM and SPE record richer branch information. Follow the method that best fits your
43+
availability and profiling detail needs.
44+
- question: Can I profile on one Arm Linux system and run BOLT on another?
45+
answer: >-
46+
Yes. The target system runs the application and collects the profile, and a separate Linux
47+
system can build the application and run BOLT. Transfer the executable and the collected
48+
profile files between systems as needed.
49+
- question: What file should exist after recording with Perf before converting for BOLT?
50+
answer: >-
51+
Expect a `perf.data` file. Perf prints sample counts or data size when recording completes,
52+
which indicates that profiling output was captured and is ready for conversion.
53+
- question: What version of Perf do I need for the SPE workflow?
54+
answer: >-
55+
Use Linux Perf version 6.14 or later for SPE to capture the required branch stack information.
56+
Verify the version before recording so the profile contains all needed fields.
57+
- question: How do I check results after BOLT creates the optimized executable?
58+
answer: >-
59+
Run the same workload with the original and the optimized executables and compare outcomes.
60+
The optimized executable should show improved performance relative to the original after
61+
the steps are completed.
62+
# END generated_summary_faq
63+
1864
author: Jonathan Davies
1965

20-
generate_summary_faq: true
66+
generate_summary_faq: false
2167
rerun_summary: false
2268
rerun_faqs: false
2369

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

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,57 @@ prerequisites:
1919
- Familiarity with [Docker](https://docs.docker.com/get-started/) and container concepts
2020
- A [GitHub account](https://github.com/join) to host your application repository
2121

22+
# START generated_summary_faq
23+
generated_summary_faq:
24+
template_version: summary-faq-v3
25+
generated_at: '2026-06-30T21:39:35Z'
26+
generator: ai
27+
ai_assisted: true
28+
ai_review_required: true
29+
model: gpt-5
30+
prompt_template: summary-faq-v3
31+
source_hash: 4bda206717eef380430009f859826d9bcf820442d13492cd3c22a114561e2917
32+
summary_generated_at: '2026-06-30T21:39:35Z'
33+
summary_source_hash: 4bda206717eef380430009f859826d9bcf820442d13492cd3c22a114561e2917
34+
faq_generated_at: '2026-06-30T21:39:35Z'
35+
faq_source_hash: 4bda206717eef380430009f859826d9bcf820442d13492cd3c22a114561e2917
36+
summary: >-
37+
You'll provision an Arm-based Google Cloud C4A virtual machine powered by Google
38+
Axion, install Docker, Docker Buildx, and the Buildkite agent, and connect the agent to a
39+
Buildkite queue. First, you'll create a small Flask application and Dockerfile in a GitHub repository,
40+
then configure a Buildkite pipeline that uses Buildx to build a multi-architecture container
41+
image, and push it to Docker Hub. You'll use Ubuntu or SUSE on the VM
42+
and validate that the agent is online. By the end, you'll have a published
43+
image and a running Flask service to confirm the build.
44+
faqs:
45+
- question: Which Google Cloud instance type and OS should I use for the VM?
46+
answer: >-
47+
Use a Google Axion C4A Arm VM, specifically `c4a-standard-4` with 4 vCPUs and 16
48+
GB memory. You can select either Ubuntu or SUSE Linux Enterprise Server as the OS.
49+
- question: Where do I create the Buildkite agent token, and when do I use it?
50+
answer: >-
51+
Create an agent token in your Buildkite organization after signing in (GitHub sign-in is
52+
supported). You use this token during the agent installation and configuration on the C4A
53+
VM.
54+
- question: How do I confirm the Buildkite agent is connected and assigned to the right queue?
55+
answer: >-
56+
After configuring the agent and queue, check the Agents page in Buildkite; the agent should
57+
appear online with the expected queue. If it doesn't, check the agent configuration and
58+
queue name, then repeat the verification step.
59+
- question: What files should my GitHub repository contain for the example application?
60+
answer: >-
61+
Add a Dockerfile and a Python file named `app.py`. The provided Dockerfile uses `python:3.12-slim`,
62+
installs Flask, exposes port 5000, and runs the app.
63+
- question: What result should I expect after the pipeline runs successfully?
64+
answer: >-
65+
A multi-architecture Docker image for Arm and x86 is built with Docker Buildx and pushed
66+
to Docker Hub. You then start the containerized Flask application and verify that it runs
67+
as the final validation step.
68+
# END generated_summary_faq
69+
2270
author: Jason Andrews
2371

24-
generate_summary_faq: true
72+
generate_summary_faq: false
2573
rerun_summary: false
2674
rerun_faqs: false
2775

0 commit comments

Comments
 (0)