@@ -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