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