FastOpen Local Rig
This directory contains a local rig for the FastOpen Phase 1 performance plan in:
docs/fastopen-local-performance-test-plan.md
It is intentionally separate from testing/singletrip-hdd/, which is the older
remote/HDD-oriented rig.
Files
rig.sh- builds
/private/tmp/buckit-fastopen - creates
/private/tmp/buckit-fastopen-{1..16} - starts or stops a local 16-path server with
BUCKIT_FAST_GET=0|1 - exposes metrics publicly by default via
MINIO_PROMETHEUS_AUTH_TYPE=public - sets
MINIO_CI_CD=1by default so local/private/tmppaths are accepted on macOS - forces
MINIO_STORAGE_CLASS_STANDARD=EC:4
- builds
fastopen_local.py- seeds deterministic object names such as
obj-000001 - runs controlled GET plans with exact cache/reuse profiles
- records per-request CSV and summary JSON
- snapshots FastOpen metrics before and after each run
- seeds deterministic object names such as
First-Pass Workflow
Build and reset the local rig:
testing/fastopen-local/rig.sh build
testing/fastopen-local/rig.sh wipe
testing/fastopen-local/rig.sh init-dirs
Start the OFF arm:
testing/fastopen-local/rig.sh start-off
Seed deterministic 640KiB objects:
python3 testing/fastopen-local/fastopen_local.py seed \
--host 127.0.0.1:9000 \
--object-size 640KiB \
--object-count 200 \
--keys-output /private/tmp/fastopen-640k.keys
Run the first 1x all pass at concurrency 1:
python3 testing/fastopen-local/fastopen_local.py run \
--host 127.0.0.1:9000 \
--keys-file /private/tmp/fastopen-640k.keys \
--path-arm OFF \
--object-size-label 640KiB \
--cache-profile 1x-all \
--ordering key-order \
--concurrency 1 \
--output-csv /private/tmp/fastopen-off-640k-1x.csv \
--summary-json /private/tmp/fastopen-off-640k-1x.json \
--metrics-before /private/tmp/fastopen-off-640k-1x.metrics.before.json \
--metrics-after /private/tmp/fastopen-off-640k-1x.metrics.after.json
Restart the same data set with the ON arm:
testing/fastopen-local/rig.sh start-on
Replay the same request plan:
python3 testing/fastopen-local/fastopen_local.py run \
--host 127.0.0.1:9000 \
--keys-file /private/tmp/fastopen-640k.keys \
--path-arm ON \
--object-size-label 640KiB \
--cache-profile 1x-all \
--ordering key-order \
--concurrency 1 \
--output-csv /private/tmp/fastopen-on-640k-1x.csv \
--summary-json /private/tmp/fastopen-on-640k-1x.json \
--metrics-before /private/tmp/fastopen-on-640k-1x.metrics.before.json \
--metrics-after /private/tmp/fastopen-on-640k-1x.metrics.after.json
Do not wipe the directories between OFF and ON if you want a true A/B replay on the same object set.
Topology
The local rig is configured as:
1pool1erasure set16local drives:/private/tmp/buckit-fastopen-{1..16}- standard storage class parity forced to
EC:4
That gives a 12 data + 4 parity layout for STANDARD-class objects.
Cache Profiles
Supported --cache-profile values:
1x-all2x-all10pct-hot20pct-hot50pct-hothotset-5xhotset-10x
Supported --ordering values:
key-orderimmediate-repeatpass-repeatshuffled
For hotset-* profiles, the script uses the first 10% of keys by default as
the hot set. Override with --hot-fraction.
Output Shape
Per-request CSV columns:
run_idpath_armobject_sizecache_profileorderingconcurrencyrequest_indexkeyaccess_numberaccess_classttfb_mstotal_msbytesstatuserror
Summary JSON includes:
- grouped stats for
all_requests,first_access, andrepeated_access count,min,max,mean,p50,p90,p99for bothttfb_msandtotal_ms- bytes read and error counts
- FastOpen metrics snapshots and deltas
Notes
- The rig listens on
127.0.0.1:9000by default, with the console on127.0.0.1:9001. - The metrics endpoint defaults to
http://127.0.0.1:9000/minio/metrics/v3/api/requests. - The rig assumes local credentials
buckitadmin/buckitadmin. - The seeder and runner use direct SigV4 requests from Python stdlib; no
mc,aws, or extra Python packages are required.