Skip to content

Commit c434b52

Browse files
committed
Add CLI flags to run-benchmark.sh and rename *_TASKSET to *_CPUSET for Docker-style CPU pinning
1 parent 825a3c8 commit c434b52

2 files changed

Lines changed: 149 additions & 189 deletions

File tree

benchmark-runner/README.md

Lines changed: 45 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -49,45 +49,45 @@ The `run-benchmark.sh` script will automatically build the JAR if missing.
4949

5050
## Configuration
5151

52-
All configuration is via environment variables:
52+
Configuration via CLI flags (preferred) or environment variables (fallback). CLI flags take precedence.
53+
54+
Run `./run-benchmark.sh --help` for the full list.
55+
56+
### Server
57+
| CLI flag | Env var | Default | Description |
58+
|----------|---------|---------|-------------|
59+
| `--mode` | `SERVER_MODE` | NON_VIRTUAL_NETTY | Mode: NON_VIRTUAL_NETTY, REACTIVE, VIRTUAL_NETTY, NETTY_SCHEDULER |
60+
| `--threads` | `SERVER_THREADS` | 2 | Number of event loop threads |
61+
| `--mockless` | `SERVER_MOCKLESS` | false | Skip mock server; do Jackson work inline |
62+
| `--io` | `SERVER_IO` | epoll | I/O type: epoll, nio, io_uring |
63+
| `--poller-mode` | `SERVER_POLLER_MODE` | | jdk.pollerMode: 1, 2, or 3 |
64+
| `--fj-parallelism` | `SERVER_FJ_PARALLELISM` | | ForkJoinPool parallelism |
65+
| `--fj-affinity` | `SERVER_FJ_AFFINITY` | false | FJ scheduler affinity |
66+
| `--server-cpuset` | `SERVER_CPUSET` | 2,3 | CPU pinning |
67+
| `--jvm-args` | `SERVER_JVM_ARGS` | | Additional JVM arguments |
5368

5469
### Mock Server
55-
| Variable | Default | Description |
56-
|----------|---------|-------------|
57-
| `MOCK_PORT` | 8080 | Mock server port |
58-
| `MOCK_THINK_TIME_MS` | 1 | Simulated processing delay (ms) |
59-
| `MOCK_THREADS` | auto | Number of Netty threads (empty = available processors) |
60-
| `MOCK_TASKSET` | 4,5,6,7 | CPU affinity (e.g., "0-1") |
61-
62-
### Handoff Server
63-
| Variable | Default | Description |
64-
|----------|---------|-------------|
65-
| `SERVER_PORT` | 8081 | Server port |
66-
| `SERVER_THREADS` | 2 | Number of event loop threads |
67-
| `SERVER_MODE` | NON_VIRTUAL_NETTY | Server mode: NON_VIRTUAL_NETTY, REACTIVE, VIRTUAL_NETTY, NETTY_SCHEDULER |
68-
| `SERVER_MOCKLESS` | false | Skip mock server; do Jackson work inline |
69-
| `SERVER_IO` | epoll | I/O type: epoll, nio, or io_uring |
70-
| `SERVER_TASKSET` | 2,3 | CPU affinity (e.g., "2-5") |
71-
| `SERVER_JVM_ARGS` | | Additional JVM arguments |
72-
| `SERVER_POLLER_MODE` | 3 | jdk.pollerMode value: 1, 2, or 3 |
73-
| `SERVER_FJ_PARALLELISM` | | ForkJoinPool parallelism (empty = JVM default) |
70+
| CLI flag | Env var | Default | Description |
71+
|----------|---------|---------|-------------|
72+
| `--mock-port` | `MOCK_PORT` | 8080 | Mock server port |
73+
| `--mock-think-time` | `MOCK_THINK_TIME_MS` | 1 | Simulated processing delay (ms) |
74+
| `--mock-threads` | `MOCK_THREADS` | 1 | Number of Netty threads |
75+
| `--mock-cpuset` | `MOCK_CPUSET` | 4,5 | CPU pinning |
7476

7577
### Load Generator
76-
| Variable | Default | Description |
77-
|----------|---------|-------------|
78-
| `LOAD_GEN_CONNECTIONS` | 100 | Number of connections |
79-
| `LOAD_GEN_THREADS` | 2 | Number of threads |
80-
| `LOAD_GEN_RATE` | | Target rate (empty = max throughput with wrk) |
81-
| `LOAD_GEN_TASKSET` | 0,1 | CPU affinity (e.g., "6-7") |
82-
| `LOAD_GEN_URL` | http://localhost:8081/fruits | Target URL |
78+
| CLI flag | Env var | Default | Description |
79+
|----------|---------|---------|-------------|
80+
| `--connections` | `LOAD_GEN_CONNECTIONS` | 100 | Number of connections |
81+
| `--load-threads` | `LOAD_GEN_THREADS` | 2 | Number of threads |
82+
| `--duration` | `LOAD_GEN_DURATION` | 30s | Test duration |
83+
| `--rate` | `LOAD_GEN_RATE` | | Target rate for wrk2 (omit for max throughput) |
84+
| `--load-cpuset` | `LOAD_GEN_CPUSET` | 0,1 | CPU pinning |
8385

8486
### Timing
85-
| Variable | Default | Description |
86-
|----------|---------|-------------|
87-
| `WARMUP_DURATION` | 10s | Warmup duration (no profiling) |
88-
| `TOTAL_DURATION` | 30s | Total test duration (steady-state must be >= 20s) |
89-
| `PROFILING_DELAY_SECONDS` | 5 | Delay before starting profiling/perf/JFR |
90-
| `PROFILING_DURATION_SECONDS` | 10 | Profiling/perf/JFR duration in seconds |
87+
| CLI flag | Env var | Default | Description |
88+
|----------|---------|---------|-------------|
89+
| `--warmup` | `WARMUP_DURATION` | 10s | Warmup duration |
90+
| `--total-duration` | `TOTAL_DURATION` | 30s | Total test duration (steady-state >= 20s) |
9191

9292
### Profiling
9393
| Variable | Default | Description |
@@ -156,77 +156,43 @@ perf stat uses `PROFILING_DELAY_SECONDS` and `PROFILING_DURATION_SECONDS`.
156156

157157
```bash
158158
# Custom scheduler mode
159-
JAVA_HOME=/path/to/jdk \
160-
SERVER_MODE=NETTY_SCHEDULER \
161-
./run-benchmark.sh
159+
./run-benchmark.sh --mode netty_scheduler
162160

163-
# Default split topology
164-
JAVA_HOME=/path/to/jdk \
165-
./run-benchmark.sh
161+
# Virtual Netty mode, mockless
162+
./run-benchmark.sh --mode virtual_netty --threads 2 --mockless
166163
```
167164

168165
### With CPU pinning
169166

170167
```bash
171-
JAVA_HOME=/path/to/jdk \
172-
MOCK_TASKSET="0" \
173-
SERVER_TASKSET="1-4" \
174-
LOAD_GEN_TASKSET="5-7" \
175-
SERVER_THREADS=4 \
176-
SERVER_MODE=NETTY_SCHEDULER \
177-
./run-benchmark.sh
168+
./run-benchmark.sh --mode netty_scheduler --threads 4 \
169+
--server-cpuset 1-4 --mock-cpuset 0 --load-cpuset 5-7
178170
```
179171

180172
### With profiling
181173

182174
```bash
183-
JAVA_HOME=/path/to/jdk \
184-
ENABLE_PROFILER=true \
185-
ASYNC_PROFILER_PATH=/path/to/async-profiler \
186-
PROFILER_EVENT=cpu \
187-
SERVER_MODE=NETTY_SCHEDULER \
188-
WARMUP_DURATION=15s \
189-
TOTAL_DURATION=45s \
190-
./run-benchmark.sh
175+
./run-benchmark.sh --mode netty_scheduler \
176+
--profiler --profiler-path /path/to/async-profiler \
177+
--warmup 15s --total-duration 45s
191178
```
192179

193180
### With JFR events enabled (subset)
194181

195182
```bash
196-
JAVA_HOME=/path/to/jdk \
197-
ENABLE_JFR=true \
198-
JFR_EVENTS=NettyRunIo,VirtualThreadTaskRuns \
199-
SERVER_MODE=NETTY_SCHEDULER \
200-
./run-benchmark.sh
183+
./run-benchmark.sh --mode netty_scheduler --jfr --jfr-events NettyRunIo,VirtualThreadTaskRuns
201184
```
202185

203186
### Rate-limited test with wrk2
204187

205188
```bash
206-
JAVA_HOME=/path/to/jdk \
207-
LOAD_GEN_RATE=10000 \
208-
LOAD_GEN_CONNECTIONS=200 \
209-
TOTAL_DURATION=60s \
210-
WARMUP_DURATION=15s \
211-
./run-benchmark.sh
212-
```
213-
214-
### Netty on ForkJoinPool mode
215-
216-
```bash
217-
JAVA_HOME=/path/to/jdk \
218-
SERVER_MODE=VIRTUAL_NETTY \
219-
SERVER_THREADS=2 \
220-
./run-benchmark.sh
189+
./run-benchmark.sh --rate 10000 --connections 200 --total-duration 60s --warmup 15s
221190
```
222191

223-
### With pidstat monitoring
192+
### Mixed: CLI flags + env vars
224193

225194
```bash
226-
JAVA_HOME=/path/to/jdk \
227-
ENABLE_PIDSTAT=true \
228-
PIDSTAT_INTERVAL=1 \
229-
./run-benchmark.sh
195+
SERVER_JVM_ARGS="-XX:+PrintGCDetails" ./run-benchmark.sh --mode virtual_netty --threads 2
230196
```
231197

232198
## Output

0 commit comments

Comments
 (0)