README.md revision 1.1 1 1.1 christos # Page Allocator (PA) Microbenchmark Suite
2 1.1 christos
3 1.1 christos This directory contains a comprehensive microbenchmark suite for testing and analyzing jemalloc's Page Allocator (PA) system, including the Hugepage-aware Page Allocator (HPA) and Slab Extent Cache (SEC) components.
4 1.1 christos
5 1.1 christos ## Overview
6 1.1 christos
7 1.1 christos The PA microbenchmark suite consists of two main programs designed to preprocess allocation traces and replay them against jemalloc's internal PA system to measure performance, memory usage, and allocation patterns.
8 1.1 christos
9 1.1 christos To summarize how to run it, assume we have a file `test/stress/pa/data/hpa.csv` collected from a real application using USDT, the simulation can be run as follows:
10 1.1 christos ```
11 1.1 christos make tests_pa
12 1.1 christos ./test/stress/pa/pa_data_preprocessor hpa test/stress/pa/data/hpa.csv test/stress/pa/data/sample_hpa_output.csv
13 1.1 christos ./test/stress/pa/pa_microbench -p -o test/stress/pa/data/sample_hpa_stats.csv test/stress/pa/data/sample_hpa_output.csv
14 1.1 christos ```
15 1.1 christos
16 1.1 christos If it's sec, simply replace the first parameter passed to `pa_data_preprocessor` with sec.
17 1.1 christos
18 1.1 christos ## Architecture
19 1.1 christos
20 1.1 christos ### PA System Components
21 1.1 christos
22 1.1 christos The Page Allocator sits at the core of jemalloc's memory management hierarchy:
23 1.1 christos
24 1.1 christos ```
25 1.1 christos Application
26 1.1 christos
27 1.1 christos Arena (tcache, bins)
28 1.1 christos
29 1.1 christos PA (Page Allocator) This is what we benchmark
30 1.1 christos HPA (Hugepage-aware Page Allocator)
31 1.1 christos SEC (Slab Extent Cache)
32 1.1 christos
33 1.1 christos Extent Management (emap, edata)
34 1.1 christos
35 1.1 christos Base Allocator
36 1.1 christos
37 1.1 christos OS (mmap/munmap)
38 1.1 christos ```
39 1.1 christos
40 1.1 christos ### Microbenchmark Architecture
41 1.1 christos
42 1.1 christos ```
43 1.1 christos Raw Allocation Traces
44 1.1 christos
45 1.1 christos [pa_data_preprocessor] Preprocesses and filters traces
46 1.1 christos
47 1.1 christos CSV alloc/dalloc Files
48 1.1 christos
49 1.1 christos [pa_microbench] Replays against real PA system
50 1.1 christos
51 1.1 christos Performance Statistics & Analysis
52 1.1 christos ```
53 1.1 christos
54 1.1 christos ## Programs
55 1.1 christos
56 1.1 christos ### 1. pa_data_preprocessor
57 1.1 christos
58 1.1 christos A C++ data preprocessing tool that converts raw allocation traces into a standardized CSV format suitable for microbenchmarking.
59 1.1 christos
60 1.1 christos **Purpose:**
61 1.1 christos - Parse and filter raw allocation trace data
62 1.1 christos - Convert various trace formats to standardized CSV
63 1.1 christos - Filter by process ID, thread ID, or other criteria
64 1.1 christos - Validate and clean allocation/deallocation sequences
65 1.1 christos
66 1.1 christos ### 2. pa_microbench
67 1.1 christos
68 1.1 christos A C microbenchmark that replays allocation traces against jemalloc's actual PA system to measure performance and behavior with HPA statistics collection.
69 1.1 christos
70 1.1 christos **Purpose:**
71 1.1 christos - Initialize real PA infrastructure (HPA, SEC, base allocators, emaps)
72 1.1 christos - Replay allocation/deallocation sequences from CSV traces
73 1.1 christos - Measure allocation latency, memory usage, and fragmentation
74 1.1 christos - Test different PA configurations (HPA-only vs HPA+SEC)
75 1.1 christos - Generate detailed HPA internal statistics
76 1.1 christos
77 1.1 christos **Key Features:**
78 1.1 christos - **Real PA Integration**: Uses jemalloc's actual PA implementation, not simulation
79 1.1 christos - **Multi-shard Support**: Tests allocation patterns across multiple PA shards
80 1.1 christos - **Configurable Modes**: Supports HPA-only mode (`-p`) and HPA+SEC mode (`-s`)
81 1.1 christos - **Statistics Output**: Detailed per-shard statistics and timing data
82 1.1 christos - **Configurable Intervals**: Customizable statistics output frequency (`-i/--interval`)
83 1.1 christos
84 1.1 christos ## Building
85 1.1 christos
86 1.1 christos ### Compilation
87 1.1 christos
88 1.1 christos ```bash
89 1.1 christos # Build both PA microbenchmark tools
90 1.1 christos cd /path/to/jemalloc
91 1.1 christos make tests_pa
92 1.1 christos ```
93 1.1 christos
94 1.1 christos This creates:
95 1.1 christos - `test/stress/pa/pa_data_preprocessor` - Data preprocessing tool
96 1.1 christos - `test/stress/pa/pa_microbench` - PA microbenchmark
97 1.1 christos
98 1.1 christos ## Usage
99 1.1 christos
100 1.1 christos ### Data Preprocessing
101 1.1 christos
102 1.1 christos ```bash
103 1.1 christos # Basic preprocessing
104 1.1 christos ./test/stress/pa/pa_data_preprocessor <hpa/sec> input_trace.txt output.csv
105 1.1 christos ```
106 1.1 christos
107 1.1 christos ### Microbenchmark Execution
108 1.1 christos
109 1.1 christos ```bash
110 1.1 christos # Run with HPA + SEC (default mode)
111 1.1 christos ./test/stress/pa/pa_microbench -s -o stats.csv trace.csv
112 1.1 christos
113 1.1 christos # Run with HPA-only (no SEC)
114 1.1 christos ./test/stress/pa/pa_microbench -p -o stats.csv trace.csv
115 1.1 christos
116 1.1 christos # Show help
117 1.1 christos ./test/stress/pa/pa_microbench -h
118 1.1 christos ```
119