A single Earth-Observation satellite captures one high-value image at a known moment and we measure how quickly that file reaches at least one ground station, under varying constellation sizes, file sizes, priorities and (for EDFS) replication factors. Compares the distributed file system EDFS against the legacy store-and-forward baseline TUS.
The run ends successfully the moment the file reaches any ground station.
One designated satellite acts as the producer: on activation its agent writes
a single image of size S MB with priority P and exits. Every other
satellite in the constellation is idle ("pure relay"). The seven ESTRACK
ground stations are fixed and act as receivers. The experiment ends as soon
as the first GS reports a RECEIVED event for that file (END_ON_ANY=true
on every GS agent).
The producing satellite is positioned far from any ground station at t=0 so
the file cannot be downlinked instantly — the time advantage of EDFS comes
from peer satellites that happen to be in LOS with both the producer (via
ISL) and a GS earlier than the producer itself would.
Each (engine, S, P, sat_count, RF) combination is one run with its own
Experiment.spec.runId so dashboards can multi-select across them.
Quantify how time-to-first-delivery scales for EDFS vs. TUS as a function of constellation size and file size. The hypothesis is:
sat_count grows
(more relay paths → more chances of an earlier hand-off).sat_count (the file
only exists on the producer until it meets a GS).KPI: time_to_first_GS_delivery — EDFS/TUS ratio < 0.50 at
sat_count ≥ 8 (EDFS delivers in at most half the TUS time at the same
sat_count and S). Defined on the median over repeated runs per cell;
single-run cells are point estimates (run ≥ 3 repeats before declaring
met/not-met).
| Parameter | Values | Notes |
|---|---|---|
engine |
tus, edfs |
TUS is the baseline. |
S (file size) |
128M, 256M |
Two regimes — a baseline file and a larger multi-pass transfer. Encoded in the run-id as s128m / s256m (= 134217728 / 268435456 bytes). |
priority |
low, default, high |
Set via the producer agent's FILE_PRIORITY env, written to .priority so fs_engine_wrapper attaches it to the file. |
sat_count |
1, 2, 8, 21, 100, 200 | Walker-like sweep; "1" is a degenerate single-satellite control. 100/200 add synthetic OneWeb-like relays on top of the 60 real roster sats. |
RF (replication factor) |
1, 3, 5 — EDFS only | TUS has no replication concept; for TUS runs RF is omitted. |
gs_count |
fixed at 7 (ESTRACK) | Constant across the sweep to keep the headline result a one-dimensional EDFS-vs-TUS comparison. |
max_duration |
10h |
Far longer than any plausible EDFS delivery; cuts off pathological TUS runs. |
TUS parameter coverage. TUS has no notion of file priority or
replication factor — priority and RF are ignored by the engine.
For TUS we therefore only sweep (S, sat_count), pin priority=default
and omit RF from the run-id. Each (S, sat_count) TUS run is then
compared against the full (priority, RF) matrix of EDFS runs at the
same (S, sat_count).
Each combination produces one overlay directory plus one
Experiment.spec.runId:
uc1-edfs-s<size>-p<priority>-n<NN>-rf<rf> (e.g. uc1-edfs-s128m-pdefault-n08-rf3)uc1-tus-s<size>-n<NN> (e.g. uc1-tus-s128m-n08)HardwareEvent (e.g. NetworkFailure or
NetworkBandwidthReduced) on one of the two stations.Beyond the headline yass_file_delivery_seconds_bucket histogram (filtered
by source = the producer):
yass_container_cpu_millicoresyass_container_memory_bytesyass_network_tx_bytes_total, yass_network_rx_bytes_totalbytes_transmitted / file_size. A pure TUS
bounce-and-forward should sit close to 1.0; high-RF EDFS will be > 1.sum(yass_network_tx_bytes_total) aggregated over
the whole constellation for the run. Plain bytes shipped — engine-
agnostic, no made-up coefficients. Used as the proxy for "how much did
this engine cost us in total" when comparing EDFS vs TUS.
| variant | engine | size | priority | sat | RF | firstGS(s) | state |
|---|---|---|---|---|---|---|---|
| uc1-edfs-s128m-pdefault-n01-rf3 | edfs | 128M | default | 1 | 3 | 791 | Success |
| uc1-edfs-s128m-pdefault-n02-rf3 | edfs | 128M | default | 2 | 3 | 792 | Success |
| uc1-edfs-s128m-pdefault-n08-rf1 | edfs | 128M | default | 8 | 1 | 799 | Success |
| uc1-edfs-s128m-pdefault-n08-rf3 | edfs | 128M | default | 8 | 3 | 794 | Success |
| uc1-edfs-s256m-pdefault-n08-rf3 | edfs | 256M | default | 8 | 3 | 845 | Success |
| uc1-edfs-s128m-pdefault-n08-rf5 | edfs | 128M | default | 8 | 5 | 794 | Success |
| uc1-edfs-s128m-phigh-n08-rf3 | edfs | 128M | high | 8 | 3 | 805 | Success |
| uc1-edfs-s128m-plow-n08-rf3 | edfs | 128M | low | 8 | 3 | 803 | Success |
| uc1-edfs-s128m-pdefault-n21-rf3 | edfs | 128M | default | 21 | 3 | 804 | Success |
| uc1-edfs-s128m-pdefault-n100-rf1 | edfs | 128M | default | 100 | 1 | 154 | Success |
| uc1-edfs-s128m-pdefault-n100-rf3 | edfs | 128M | default | 100 | 3 | 164 | Success |
| uc1-edfs-s256m-pdefault-n100-rf3 | edfs | 256M | default | 100 | 3 | 768 | Success |
| uc1-edfs-s128m-pdefault-n100-rf5 | edfs | 128M | default | 100 | 5 | 122 | Success |
| uc1-edfs-s128m-phigh-n100-rf3 | edfs | 128M | high | 100 | 3 | 200 | Success |
| uc1-edfs-s128m-plow-n100-rf3 | edfs | 128M | low | 100 | 3 | 838 | Success |
| uc1-edfs-s128m-pdefault-n200-rf3 | edfs | 128M | default | 200 | 3 | 207 | Success |
| uc1-tus-s128m-n01 | tus | 128M | - | 1 | — | 806 | Success |
| uc1-tus-s128m-n02 | tus | 128M | - | 2 | — | 807 | Success |
| uc1-tus-s128m-n08 | tus | 128M | - | 8 | — | 804 | Success |
| uc1-tus-s256m-n08 | tus | 256M | - | 8 | — | 870 | Success |
| uc1-tus-s128m-n21 | tus | 128M | - | 21 | — | 800 | Success |
| uc1-tus-s128m-n100 | tus | 128M | - | 100 | — | n/a | TimedOut |
| uc1-tus-s128m-n200 | tus | 128M | - | 200 | — | n/a | TimedOut |