Skip to content

[Benchmark] 2x RTX 3090 on PCIe 3.0 x16, dual Xeon E5-2620 v3 (Dell T630), Strata 0.2.7 - #4468

Closed
coryjett wants to merge 8 commits into
Niko1221:mainfrom
coryjett:community-t630-2x3090
Closed

coryjett wants to merge 8 commits into
Niko1221:mainfrom
coryjett:community-t630-2x3090

Conversation

@coryjett

@coryjett coryjett commented Oct 28, 2026 •

Copy link
Copy Markdown

Problem and result

A results-only report for a setup the community reports don't cover yet: two RTX 3090s on PCIe 3.0 x16, one per CPU
socket, in a dual Haswell-EP server (AVX2 only), running original Flash-Next IQ3_S with a layer split. Tuned over 26
one-change-at-a-time rounds for a coding-agent workload, plus one draft-protocol standard run on the final
configuration (custom track): prompt 1,127 / 1,610 tok/s at 4K / 16K, decode 114-129 tok/s, sanity checks 12 of 12.

Two findings that may matter beyond this box:

  • STRATA_PREFILL_CPU_SHARE=auto is off by default under a layer split. Set explicitly (max 4096), it cut the small
    incremental prompt reads that coding agents mostly send (300-4,000 new tokens on a cached ~66K context) by 8-13%
    (about -0.6 s at 1K and -0.9 s at 1.5K), with the 32K read, decode and greedy output unchanged within production's
    own spread. OLDER_GPUS.md reports no gain from it on a P40, so this looks specific to a PCIe 3.0 split with ~78% of
    the experts resident, not a general default change.
  • strata bench run --url on a server using two identical cards records one card and none of the engine options
    (bench_facts.hardware keeps cards[:1] when there is no run config and the server names one GPU type). The same
    run with --profile <run config> --no-start records both cards and the options. The report keeps the
    --profile run and notes the discarded --url run.
  • The same runner's secret filter (key|token|secret|password|auth) also redacts --conversation-cache-min-tokens
    because its name contains "token". The value is 20000 (the README says so; the runner's files are left as written).

The standard run used the server's learned expert profile (expert_profile_save), which the runner records but does
not count as a declared custom profile; the sweep rounds used the shipped one. Round 20 found no difference between
the two. The README says so.

Related discussion

None. Results only; no engine or default change proposed. The NUMA worker-pool on/off pair (one socket against both)
is in the findings list, for anyone following the closed #3708.

Approach

Adds bench/results/2026-10-28-community-t630-2x3090-pcie3/ (report, raw per-run output from rounds 21 and 24-26,
redacted configs, engine logs, the measurement scripts), the standard run's folder as the runner wrote it, and one
entry in docs/COMMUNITY_BENCHMARKS.md. Home paths, LAN addresses, host names and a private repository's file names are
replaced with placeholders.

Validation

Passed:

  • strata bench run --profile <production run config> --no-start --track custom, Strata 0.2.7 official Linux
    release (engine 0.1.52), 2026-10-28 13:43 UTC: status complete, 21 of 21 required requests, sanity 12 of 12. The
    engine log shows exactly the run's 22 requests and nothing else during it.
  • The production, agent-turn and incremental-read numbers come from the raw files in the folder (sweep.jsonl,
    speed-*.txt, rounds 21 and 24-26).

Failed:

  • None observed.

Not run:

  • The optional concurrency stage (the server has one slot).
  • No builds: results and docs only.

Limits

  • Apart from the standard run, the measurements use our own scripts at the server's temperature 0.6, not greedy.
    The scripts read from a private repository (the long-prompt and agent-turn contexts are its source files), so they
    document the method rather than run as is.
  • The trim, NUMA, long-prompt and opt-in-switch findings are summarized from earlier rounds (2026-10-24 to 10-28)
    whose raw files are not included; they can be added on request.
  • The standard run reused a production server that had answered other requests before it, not a fresh load.
  • One machine; the CPU-share result needs confirming on other PCIe 3.0 splits before anyone changes a default.

🤖 Generated with Claude Code

coryjett and others added 5 commits October 28, 2026 13:54
…, 0.2.7 (draft)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…utput

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lue, and which expert profile each run used

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… value) in its README; corrected

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Oct 28, 2026
…t (--kv-grow, --adapt-async)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…hour (raw/r33-stock)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@Niko1221

Copy link
Copy Markdown
Owner

Thank you for measuring this and writing it up. We are building a Strata website with a page for community benchmarks, and results like these will be added there when it launches, so we are closing this pull request here; the numbers are not lost. If your numbers change with a new version, you are welcome to send them again.

@Niko1221 Niko1221 closed this Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NUMA pool split on a two-socket Xeon (2x 6226R, 2x R9700): on/off numbers, and the "arena path" limitation

2 participants