Skip to content

Commit 80d4865

Browse files
Update titles and section headings for clarity in memory subsystem documentation
1 parent fd5a9b9 commit 80d4865

6 files changed

Lines changed: 17 additions & 17 deletions

File tree

content/learning-paths/servers-and-cloud-computing/memory-subsystem/cache-hierarchy.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: Understand the cache hierarchy
2+
title: Analyze Arm cache hierarchy and performance characteristics
33
weight: 3
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Cache levels and performance clifs
9+
## Cache levels and performance cliffs
1010

1111
Each memory access is satisfied by the closest level of the hierarchy that contains the requested data. If the data is not found in the private caches, the request falls through to the next cache level and eventually to DRAM. Each level trades capacity for speed: L1 is tiny but fast, L2 is larger but slower, and L3 (or a system-level cache) is the largest on-chip cache but has the highest latency. Understanding this hierarchy for your specific system tells you where performance "cliffs" will occur as your working set grows.
1212

@@ -80,7 +80,7 @@ When you access a single byte, the hardware fetches an entire 64-byte cache line
8080

8181
A 4-way set associative cache can hold 4 lines that map to the same set. If your access pattern happens to map many addresses to the same set, lines get evicted even though the cache isn't full. Conflict misses are less likely with randomized pointer-chase patterns, but can still occur depending on address distribution and cache indexing, making this concept worth understanding.
8282

83-
### Prefetching
83+
### Hardware prefetching and cache performance
8484

8585
Modern Arm cores have hardware prefetchers that detect sequential and strided access patterns. They pull data into the cache before the CPU requests it, which can mask latency for predictable patterns. The pointer-chase benchmark in the next section defeats prefetching by design, giving you the true hardware latency rather than the prefetcher-assisted latency.
8686

content/learning-paths/servers-and-cloud-computing/memory-subsystem/comparative-analysis.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: Compare systems and draw conclusions
2+
title: Compare Arm memory subsystem performance across systems
33
weight: 7
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Bringing it all together
9+
## Complete memory subsystem analysis workflow
1010

1111
You now have a complete set of memory subsystem measurements for each of your test systems. This section shows how to collect all results in one pass, compare systems using ASCT's built-in diff tool, and draw meaningful architectural conclusions.
1212

@@ -149,15 +149,15 @@ Collect the key measurements from each system into a comparison table:
149149

150150
The conclusions below are from running ASCT on AWS EC2 instances that are easily available for you to try so you can learn the process and learn how to think about the results. There are many more details that go into CPU microarchitecture and system design that are not covered here, but this is a good way to get an initial understanding of the memory system of an Arm Linux server.
151151

152-
### Latency
152+
### Latency analysis across generations
153153

154154
The latency measurements from `latency-sweep` reveal how each generation's cache hierarchy performs. L1 latency is similar across both generations (1.6 ns vs 1.4 ns) because L1 caches are designed for very low latency, so the small difference reflects clock speed rather than cache microarchitecture. L2 latency improves by 27% on Graviton4 (4.0 ns vs 5.4 ns): Neoverse V2 has a 2 MB private L2 compared to Neoverse N1's 1 MB, and despite the larger size, the improved cache pipeline delivers lower latency. LLC latency improves by 24% on Graviton4 (21.8 ns vs 28.8 ns) even though the L3 is only slightly larger (36 MB vs 32 MB), which reflects microarchitectural improvements in the Neoverse V2 cache interconnect. DRAM latency is higher on Graviton4 (114.6 ns vs 95.5 ns, +20%) because DDR5 trades slightly higher access latency for significantly more bandwidth per channel compared to DDR4.
155155

156-
### Loaded latency
156+
### Loaded latency comparison
157157

158158
The `loaded-latency` results reveal the latency-bandwidth tradeoff. At low load (~3000 NOPs), latency matches the idle DRAM latency from `latency-sweep` (96.7 ns for Graviton2, 115.1 ns for Graviton4), confirming the two benchmarks are consistent. The knee on Graviton2 occurs between 70 and 50 NOPs, where latency nearly doubles from 134 ns to 266 ns before climbing to 344 ns at saturation. On Graviton4 the knee occurs between 30 and 20 NOPs at a much higher bandwidth (~340 GB/s vs ~126 GB/s on Graviton2), and latency plateaus around 190–198 ns at saturation rather than continuing to climb, suggesting the DDR5 memory controllers handle queue saturation more gracefully. Despite Graviton4's higher idle DRAM latency, its latency at saturation is 43% lower than Graviton2's (197 ns vs 344 ns), making it the better choice for workloads that operate near memory bandwidth limits.
159159

160-
### Bandwidth
160+
### Bandwidth comparison across systems
161161

162162
Single-core bandwidth from `bandwidth-sweep` shows the throughput capacity at each cache level. L1 bandwidth doubles on Graviton4 (321 vs 159 GB/s, +101%), likely reflecting a combination of higher clock speed and microarchitectural throughput improvements in Neoverse V2. L2 bandwidth improves by 29% (95 vs 73 GB/s) due to the wider L2 fill path, and LLC bandwidth more than doubles (80 vs 36 GB/s, +123%), reflecting improvements in the interconnect and shared cache design. Single-core DRAM bandwidth improves by 77% (37 vs 21 GB/s) because Neoverse V2 supports more outstanding memory requests than Neoverse N1 and DDR5 provides more bandwidth per channel than DDR4.
163163

content/learning-paths/servers-and-cloud-computing/memory-subsystem/multicore-bandwidth.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Measure multi-core bandwidth and loaded latency
2+
title: Measure Arm multi-core memory bandwidth and loaded latency with ASCT
33
weight: 6
44

55
### FIXED, DO NOT MODIFY
@@ -19,7 +19,7 @@ ASCT includes two benchmarks that characterize multi-core memory behavior:
1919

2020
Both benchmarks depend on `latency-sweep` to determine the optimal data size for targeting DRAM. ASCT runs it automatically as a dependency.
2121

22-
## Peak bandwidth
22+
## Measure peak system memory bandwidth
2323

2424
The `peak-bandwidth` benchmark makes full use of all cores to measure the maximum system bandwidth. It tests multiple traffic patterns to show how the mix of reads and writes affects peak throughput.
2525

@@ -63,7 +63,7 @@ Graviton4 with DDR5 delivers roughly 2.7x the peak all-reads bandwidth of Gravit
6363

6464
Compare the "All Reads" figure with the theoretical peak bandwidth reported by `asct system-info` to see how close each system gets to its maximum. Well-configured systems typically achieve 85-95% of theoretical peak with all-read traffic.
6565

66-
## Loaded latency
66+
## Measure memory latency under bandwidth load
6767

6868
The `loaded-latency` benchmark measures how memory latency changes as other cores generate increasing bandwidth pressure. It pins a latency-measuring thread on the last core of the first NUMA node and uses the remaining cores to generate background memory traffic. The traffic intensity is controlled by interleaving memory reads with different numbers of no-operation (NOP) instructions. More NOPs means less bandwidth pressure.
6969

content/learning-paths/servers-and-cloud-computing/memory-subsystem/pointer-chase-latency.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Measure cache and memory latency with a pointer chase
2+
title: Measure Arm cache and memory latency using ASCT pointer chase
33
weight: 4
44

55
### FIXED, DO NOT MODIFY
@@ -74,7 +74,7 @@ Latency sweep for Graviton4:
7474

7575
Your actual numbers will differ. The important pattern is the steps in latency as the working set exceeds each cache level.
7676

77-
## Interpret the results
77+
## Interpret cache latency measurements
7878

7979
Graviton2 uses Neoverse N1 cores with a 64 KB L1D, 1 MB private L2, and a 32 MB shared L3. DRAM is DDR4.
8080

content/learning-paths/servers-and-cloud-computing/memory-subsystem/streaming-bandwidth.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Measure single-core streaming bandwidth
2+
title: Measure Arm single-core memory bandwidth with ASCT
33
weight: 5
44

55
### FIXED, DO NOT MODIFY
@@ -52,7 +52,7 @@ Datasize Used Level Bandwidth [GB/s]
5252

5353
Look at the stepping pattern: high bandwidth for L1, a lower plateau for L2, a further drop at the LLC, and then the DRAM floor.
5454

55-
## Interpret the results
55+
## Interpret bandwidth benchmark results
5656

5757
The `bandwidth-sweep` benchmark reports the bandwidth at the optimal data size for each cache level, using the boundaries that `latency-sweep` identified.
5858

@@ -63,7 +63,7 @@ Key differences to look for between Graviton2 and Graviton4:
6363
- **LLC bandwidth**: Graviton4 more than doubles the LLC bandwidth of Graviton2, reflecting improvements in the interconnect and shared cache design on Neoverse V2.
6464
- **DRAM bandwidth (single core)**: Graviton4 achieves higher single-core DRAM throughput because Neoverse V2 supports more outstanding memory requests than Neoverse N1, and DDR5 provides more bandwidth per channel than DDR4.
6565

66-
### Bytes per cycle
66+
### Convert bandwidth to bytes per cycle
6767

6868
To convert GB/s to bytes per cycle, use your core's clock speed:
6969

content/learning-paths/servers-and-cloud-computing/memory-subsystem/system-overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Identify the system topology and configuration
2+
title: Identify Arm CPU topology, cache hierarchy, and NUMA configuration
33
weight: 2
44

55
### FIXED, DO NOT MODIFY

0 commit comments

Comments
 (0)