Chapter 30Lesson 03~225 minutes

Test Validity, Coordinated Omission, Warm-Up, Noise, and Experimental Design: Configuration, Design Patterns, and Trade-Offs

Experimental design is a trade-off among realism, safety, statistical stability, diagnostic clarity and cost. There is no universal “correct duration” or “always use open load” rule: choose the structure that matches the performance question and document what it cannot answer.

Warm-up durationDuration vs iterationsOpen vs closedRepetitionsA/B control

Learning objectives

  • Compare the principal configuration and design choices for Test Validity, Coordinated Omission, Warm-Up, Noise, and Experimental Design without changing the workload question unintentionally.
  • Identify which settings belong to the JMeter plan, JVM, OS/network, target, extensions, CI/container, or distributed-engine layers.
  • Explain the trade-offs among performance cost, reliability, reproducibility, security, portability, and operational complexity.
  • Choose an appropriate pattern from measured evidence and explicit constraints rather than from convenience or folklore.
  • Preserve measurement validity and a stable evidence baseline before moving into failure diagnosis.

1. Warm-up duration

Choice Good when Risk
Fixed request count You know a deterministic cold-state trigger (fixture's first 20 requests). May not map to time-based JIT/cache stabilization.
Fixed duration Service/background state stabilizes by wall clock and offered load is controlled. Too short/long if machine/load differs.
State-based rule Telemetry can prove cache/JIT/pool/state reached a declared steady condition. More instrumentation/logic; avoid adapting the rule after seeing A/B outcome.

The same warm-up rule must be applied to both conditions. Warm-up traffic still changes target state, so it belongs in authorization/load ceilings even though it is excluded from measurement.

2. Fixed duration versus fixed iterations

Fixed duration Fixed iterations
Good for steady-state RPS/resource windows and comparable wall-clock exposure. Good for bounded teaching and exact sample-count validation.
Sample count can differ if one variant is slower. Wall-clock duration differs if one variant is slower.
Useful for throughput/time-series analysis. Simple target-safety ceiling and deterministic cleanup.
Requires scheduler/duration handling and predeclared trim windows. Can interact with closed-model coordinated omission.

3. Open versus closed workload

Closed workload is appropriate for a fixed population of users that waits for responses. Arrival-oriented workload is appropriate when external arrivals should continue independently. Do not call one “more realistic” without naming the product behavior. JMeter's current Open Model Thread Group is experimental; a standard Thread Group remains the stable mandatory path, with the local Python scheduler available to demonstrate fixed arrivals.

4. One long run versus repetitions

A long run reveals slow leaks/thermal/cache cycles and yields many samples, but one long realization can still be confounded by a background event. Repetitions expose run-to-run variability and let you alternate/control A/B order. For expensive production-like tests, a hybrid often works: warm-up + stable measurement window repeated across multiple runs/builds.

5. Median/percentile comparison

Median p50 is robust for typical response; p95/p99 reveal tails but need more samples and stable estimator/window. Compare the same label, formula and measurement window. A “15 ms p95 improvement” is not meaningful if the run-to-run p95 SD is 30 ms.

6. Baseline control versus canary/current branch

A good A/B protocol defines:

  • exact build IDs/configuration/data;
  • same machine/runner class or randomized/alternating order;
  • fresh process/start state and identical warm-up for each condition;
  • same workload and measurement window;
  • multiple repetitions;
  • predeclared primary metric and practical effect size;
  • rollback and evidence retention.

“Baseline” is not automatically last week's result if environment/data changed.

7. Control, randomize or measure noise

Noise sources include CPU frequency/power mode, JVM/GC, antivirus, OS updates, CI neighbors, network/DNS, DB/cache background work, autoscaling and logs/telemetry. Do not disable security controls ad hoc. Prefer an isolated generator/fixture; record unavoidable state; alternate A/B order if drift over time is plausible.

8. Configuration-layer boundaries

Layer Examples Validity risk
JMeter core Thread Group/Open Model, timers, labels, save fields. Traffic model/window/scope mismatch.
JVM Java build, heap/GC/JIT. Warm-up/GC differences.
OS/network CPU scheduling, DNS, NIC, time sync. Background noise/clock skew.
SUT Build, cache, DB pool, feature flags, base latency. Confounded A/B state.
Plugin/tool Third-party thread groups/analyzers. Version/formula drift.
CI provider Runner image/resources/concurrency. Noisy/noncomparable executor.
Container/orchestrator Image digest, quota, Pod placement. Runtime/cgroup/network drift.

9. Worked scenario

Variant A p95 across three repeats = 82/86/84 ms; B=96/101/98 ms under identical warm-up/data/runtime. The effect (~14 ms) is larger than within-condition spread. This is stronger engineering evidence than one A=82/B=96 pair, but still not universal proof: n=3 is small, loopback is synthetic, and closed-load behavior may understate fixed-arrival stalls.

10. Decision table

Question Design Reason
Fast PR smoke? Fixed iterations + deterministic warm-up + isolated fixture. Bounded/reproducible.
Steady service SLO? Warm-up + fixed-duration steady window + repetitions. Comparable time exposure.
Fixed user population? Closed Thread Group. Users wait for response.
Independent external arrivals? Arrival-oriented schedule/Open Model optional. Avoid self-throttling arrival model.
Small expected A/B effect? More repetitions/stable runner before claiming regression. Separate effect from noise.
Long leak/soak risk? Long duration plus periodic telemetry. Repetitions alone may miss accumulation.
Mandatory local boundary: all executable examples remain at 127.0.0.1:8030 using Apache JMeter 5.6.3/Java 17. Preserve raw JTL and matching jmeter.log for every repetition; no real credentials, shared targets, or paid services are required.

11. Configured versus achieved load

Every experiment report must state configured concurrency/rate, achieved sample/arrival rate, measurement-window count, errors and generator headroom. In an arrival-oriented model, verify the injector actually kept the schedule; in a closed model, acknowledge that response time changes arrival rate.

Knowledge check

When is fixed iteration preferable?

Why alternate A/B order in some experiments?

Does a larger sample count automatically fix coordinated omission?

Why compare effect size to variation?

What must be identical in percentile comparisons?

Next lesson

Diagnose invalid experiments

Lesson 4 covers warm-up contamination, dataset/build drift, one-run claims, coordinated omission, clock skew, tuning-until-pass and outlier deletion.

Official references and version notes

Version and compatibility note

Version-sensitive statements were rechecked against current primary documentation on 2026-09-05. The mandatory runtime remains Apache JMeter 5.6.3 with Java 17 and no third-party plugin. JMeter 5.6.3 requires Java 8+; the current 5.6.x changes page recommends Java 17 or later. The Open Model Thread Group remains explicitly experimental; the mandatory course path therefore uses the stable standard Thread Group for closed-model measurements and a bounded Python-standard-library fixed-arrival probe to demonstrate coordinated omission. An optional Open Model schedule such as rate(10/sec) random_arrivals(6 sec) is shown only as a current 5.6.3 comparison. All important comparisons use raw CSV JTL plus a documented label/window filter; dashboards remain corroborating evidence. JMeter elapsed time begins immediately before sending the request and ends after the last response byte; latency ends at the first response, and connect time covers connection establishment including SSL handshake.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.