You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The `depth` parameter sets the driver's pipeline depth — the maximum number of
226
+
outstanding (in-flight) requests per driver connection. The driver's total
227
+
offered concurrency is `driver_threads × connections × depth`, so with the
228
+
default `depth=1` the driver can cap the achievable load below what the server
229
+
can actually handle.
230
+
231
+
**Increase `depth` beyond 1 when the final benchmarking phase saturates neither
232
+
CPU nor latency** — i.e. the final achieved p95 latency is well below the SLA
233
+
limit (`sla_p95_ms`, default 700 ms) *and* the CPU utilization during the final
234
+
5-minute benchmarking phase is less than ~90%. In that situation the reported QPS
235
+
is limited by driver concurrency rather than by the server, so it understates the
236
+
hardware's true capacity. Raising `depth` (start with `2`) lets the driver offer
237
+
more concurrent load until the server becomes the bottleneck — either CPU-bound
238
+
(~100% utilization) or latency-bound (p95 ≈ SLA). **This is likely necessary on
239
+
high-performance ARM cores** (e.g. NVIDIA Grace), which can otherwise sit at
240
+
80–90% CPU with p95 far below the SLA at `depth=1`.
241
+
242
+
```
243
+
# Force driver depth 2
244
+
./benchpress_cli.py run feedsim_dlrm -i '{"depth": 2}'
245
+
```
246
+
247
+
There is also an **adaptive depth** mechanism (on by default) that raises the
248
+
depth automatically during the peak-finding stage until the server saturates
249
+
(system CPU ≥ 95% or p95 ≥ SLA). It catches *severe* under-utilization early, but
250
+
because it evaluates saturation on the high-load peak/search probes rather than
251
+
on the final SLA-converged operating point, it **may not catch all
252
+
under-utilization cases**. If you still observe under-utilization in the final
253
+
result (low CPU + p95 well under SLA), increase `depth` manually as above. When
254
+
adaptive depth is on, a manually-set `depth` acts as the starting floor the
255
+
adaptive search raises from; to pin an exact fixed depth, also set the
256
+
`FEEDSIM_ADAPTIVE_DEPTH_MAX=0` environment variable to disable adaptive search.
257
+
223
258
### Other parameters
224
259
225
260
This section lists additional parameters in `feedsim_dlrm` benchmark. These parameters
@@ -233,6 +268,7 @@ Job-level parameters (can be passed via `-i` flag in Benchpress CLI):
233
268
|---|---|---|
234
269
|`num_instances`| Number of FeedSim instances to run in parallel. Defaults to 1 in `feedsim_dlrm`; set to -1 to autoscale for `feedsim_autoscale_dlrm`. |`1`|
235
270
|`sla_p95_ms`| SLA target in ms. The runner searches for the highest QPS keeping p95 ≤ this. |`700`|
271
+
|`depth`| Driver pipeline depth (max outstanding requests per connection; total in-flight = `driver_threads × connections × depth`). Raise (e.g. `2`) when the final phase saturates neither CPU nor latency — often needed on high-perf ARM. See [Driver depth](#driver-depth-fixing-cpulatency-under-utilization). |`1`|
236
272
|`io_dist`| I/O latency distribution: `fixed`, `exponential`, or `lognormal`. |`fixed`|
237
273
|`io_mean`| Mean I/O latency in ms. |`200`|
238
274
|`workload`| Ranking workload: `pagerank` or `dlrm`. `dlrm` is v2. |`dlrm`|
--depth Driver pipeline depth: max outstanding requests per driver connection (max in-flight = driver_threads * connections * depth). Default: 1 (or \$FEEDSIM_DRIVER_DEPTH). Raise (e.g. 2) when the final phase saturates neither CPU nor SLA latency; with adaptive depth on, this is the starting floor the peak search raises from.
123
124
EOF
124
125
}
125
126
@@ -316,6 +317,12 @@ main() {
316
317
local sla_p95_ms
317
318
sla_p95_ms="700"
318
319
320
+
# Driver pipeline depth (max outstanding requests per driver connection).
321
+
# Env var FEEDSIM_DRIVER_DEPTH is the fallback default; the --depth CLI flag
322
+
# (forwarded from the benchpress `depth` job parameter) overrides it.
323
+
local driver_depth
324
+
driver_depth="${FEEDSIM_DRIVER_DEPTH:-1}"
325
+
319
326
if [ -z"$IS_AUTOSCALE_RUN" ];then
320
327
echo>$BREPS_LFILE
321
328
fi
@@ -644,6 +651,13 @@ main() {
644
651
--sla-p95-ms=*)
645
652
sla_p95_ms="${1#*=}"
646
653
;;
654
+
--depth)
655
+
driver_depth="$2"
656
+
shift
657
+
;;
658
+
--depth=*)
659
+
driver_depth="${1#*=}"
660
+
;;
647
661
-h|--help)
648
662
show_help >&2
649
663
exit 1
@@ -1002,7 +1016,9 @@ main() {
1002
1016
# to reach a real bound instead of capping on driver concurrency (the t19
1003
1017
# anti-pattern where big boxes sat at ~80% CPU with p95 far below SLA).
1004
1018
# Enabled by default up to depth 8; set FEEDSIM_ADAPTIVE_DEPTH_MAX=0 to
1005
-
# disable and fall back to the fixed FEEDSIM_DRIVER_DEPTH (default 1).
1019
+
# disable and use the fixed driver_depth (--depth flag / FEEDSIM_DRIVER_DEPTH,
1020
+
# default 1). When adaptive is on, driver_depth is the STARTING floor the peak
1021
+
# search raises from (search_qps reads the --depth we pass below).
0 commit comments