docs: describe continuous-mode memory bounds #125

Merged
Lochnair merged 1 commits from docs/continuous-mode-memory into main 2026-08-20 06:44:34 +00:00
+33
View File
@@ -72,6 +72,39 @@ irtt-client netperf-eu.bufferbloat.net:2112 --duration 0
chatgpt-codex-connector[bot] commented 2026-08-20 06:37:13 +00:00 (Migrated from github.com)
Review

P2 Badge Document pending-capacity exhaustion as terminal

For the CLI/TUI managed path, when a high-rate continuous target accumulates 4,096 still-pending probes before the first timeout, PendingMap::preflight_insert returns PendingLimitExceeded, and ManagedClientTask::poll_one_send routes that error to begin_open_session_failure rather than retrying after space is freed. The target is therefore drained and terminated as resource-exhausted (and a single-target run fails), so this sentence incorrectly describes the limit as transient backpressure; document the terminal behavior instead.

AGENTS.md reference: AGENTS.md:L78-L78

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Document pending-capacity exhaustion as terminal** For the CLI/TUI managed path, when a high-rate continuous target accumulates 4,096 still-pending probes before the first timeout, `PendingMap::preflight_insert` returns `PendingLimitExceeded`, and `ManagedClientTask::poll_one_send` routes that error to `begin_open_session_failure` rather than retrying after space is freed. The target is therefore drained and terminated as resource-exhausted (and a single-target run fails), so this sentence incorrectly describes the limit as transient backpressure; document the terminal behavior instead. AGENTS.md reference: [AGENTS.md:L78-L78](https://github.com/Lochnair/irtt-rs/blob/e5f83ff5925c652ea996f65dfa6d5238d497f1f5/AGENTS.md#L78-L78) Useful? React with 👍 / 👎.
chatgpt-codex-connector[bot] commented 2026-08-20 06:37:13 +00:00 (Migrated from github.com)
Review

P2 Badge Qualify continuous memory growth as bounded

Continuous-mode retained state does grow with probes until its bounds are reached: successful replies populate the IPDV tracker up to 4,096 sequences, classification stores fill up to their limits, and the TUI graph grows to 100,000 samples per target. The later paragraphs acknowledge these limits, so saying the state “does not grow” is contradictory and can understate warm-up memory consumption; state that it does not grow without bound instead.

AGENTS.md reference: AGENTS.md:L78-L78

Useful? React with 👍 / 👎.

**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub> Qualify continuous memory growth as bounded** Continuous-mode retained state does grow with probes until its bounds are reached: successful replies populate the IPDV tracker up to 4,096 sequences, classification stores fill up to their limits, and the TUI graph grows to 100,000 samples per target. The later paragraphs acknowledge these limits, so saying the state “does not grow” is contradictory and can understate warm-up memory consumption; state that it does not grow *without bound* instead. AGENTS.md reference: [AGENTS.md:L78-L78](https://github.com/Lochnair/irtt-rs/blob/e5f83ff5925c652ea996f65dfa6d5238d497f1f5/AGENTS.md#L78-L78) Useful? React with 👍 / 👎.
Use `Ctrl-C` to stop gracefully. Use `Ctrl-C` to stop gracefully.
### Continuous-mode memory
`--duration 0` uses continuous statistics. Its retained application state does
not grow without bound with elapsed run time or the number of probes: timing
metrics keep running count/min/max/mean/variance values, not a complete
timing-sample history. Consequently, exact medians are unavailable. The
default continuous statistics configuration also enables no rolling
event/history window; it keeps bounded adjacent-sequence IPDV state (4,096
sequences) so nearby replies can still form IPDV pairs.
Reply classification is bounded per target session. By default, each of the
pending, timed-out, and completed/duplicate sequence stores has its own
4,096-entry limit; this is not one shared 4,096-probe total. A full pending
store makes the managed CLI/TUI fail and drain that target as resource
exhausted; it does not wait for capacity to free. Timed-out and completed state
evict their oldest entries, so a sufficiently old late reply can still be seen
and counted but no longer has retained send state for measurements such as RTT
or applicable one-way delay.
The retained state scales with the number of configured targets and these
fixed per-target limits, rather than total probes. CLI output is written as
events arrive rather than accumulated. Its managed presentation stream is
bounded and lossy (the applets configure 16,384 events), so a slow consumer can
miss events and the CLI/TUI reports that resulting output/statistics may be
incomplete. The TUI additionally keeps up to 100,000 graph samples per target
and 80 recent messages. These are retained-application-state bounds, not a
claim of a fixed process RSS ceiling: allocator behavior, output consumers,
and operating-system resources remain outside them.
For finite runs, the tradeoff is different: exact timing samples (and
adjacent-sequence IPDV state) are retained to calculate exact medians, so
statistics memory grows with probe count.
## Multiple targets ## Multiple targets
Probe several targets concurrently: Probe several targets concurrently: