From cb441b7d8dee9893f4b76ebef0a5613d46679f59 Mon Sep 17 00:00:00 2001 From: helly25 <6420169+helly25@users.noreply.github.com> Date: Sun, 1 Nov 2026 22:09:39 +0000 Subject: [PATCH] Share collection name and root storage with owned paths --- CHANGELOG.md | 2 + TODO.md | 22 +- .../collection-text-sharing-20261101.json.gz | Bin 0 -> 135725 bytes .../collection-text-sharing-20261101.md | 67 +++++ docs/performance-analysis.md | 251 ++++++++++++++++++ release-site.json | 1 + xff/engine/collect.cc | 7 +- xff/engine/collect.h | 2 +- xff/engine/collect_test.cc | 21 +- 9 files changed, 365 insertions(+), 8 deletions(-) create mode 100644 docs/benchmarks/collection-text-sharing-20261101.json.gz create mode 100644 docs/benchmarks/collection-text-sharing-20261101.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b5b08650d0..3662bb86aa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ # 0.11.0 +- Share collection basename and root text with the owned path where possible, reducing retained memory without changing buffer limits. + - Use lazy fixed 1 MiB blocks for retained collection text to reduce allocation overhead. - Bound speculative sibling-directory listings while preserving worker policy and traversal order. diff --git a/TODO.md b/TODO.md index 5b9919e5ad5..869e0779939 100644 --- a/TODO.md +++ b/TODO.md @@ -144,8 +144,8 @@ scope or declaring new flags implemented. See useful task size, throughput, first output, memory and actual thread/child counts. Include serial command/concurrent-discovery, strict dependent expressions and parallel command controls. Do not accept a default or performance claim from hosted correctness checks alone. -- [ ] JC07: Separate directory-admission tuning from worker-budget tuning. PR #991's experimental - 64-sibling gate is not an optimum across storage types. Design explicit serial operation and +- [ ] JC07: Separate directory-admission tuning from worker-budget tuning. Closed PR #991's rejected timed/serial-probe policy and earlier + 64-sibling gate are not optima across storage types. Design explicit serial operation and minimum independent-work/cost controls in the jobs family, preserving semantic/safety barriers and command resource bounds. Distinguish cold start from warm dispatch, and qualify settings on small slow frontiers as well as broad memory-backed workloads before choosing defaults. @@ -361,6 +361,24 @@ Measured follow-ups (see the P07/P08 sections of `docs/performance-analysis.md`) ## Performance optimization follow-up +Current prioritized inventory and implementation/measurement boundaries: +[the reconciled cross-platform audit](docs/performance-analysis.md#reconciled-cross-platform-optimization-audit-after-1040). O01-O22 map to the existing +EP/JC/P work; candidates are not speedup claims until measured on both platforms. + +- [ ] O01: Adopt measured path-owned basename/root views with fallback copies, unchanged logical + budgets and ownership/growth/move coverage. Retain small regressions and Linux/macOS evidence + in [the collection-sharing report](docs/benchmarks/collection-text-sharing-20261101.md). +- [ ] O02-O06: Independently qualify native glob argument-copy removal, fuzzy scratch/self-score + reuse, lexical field views, heterogeneous capture/definition lookup, and remaining read-buffer + zeroing. Prefer existing values and interfaces before adding prepared wrappers. +- [ ] O07-O12: Profile and qualify caller-owned stream buffers, typed reusable directory task slots, + batch ownership, bounded result reuse, active-worker dispatch and direct production evaluation. + Preserve existing stage policy while isolating task storage and lifecycle costs. +- [ ] O13-O22: Reconcile remaining derived-value handoff, static catalogs, invariant operands, + paired streaming compare, reusable stage pools, byte-bounded overlap, archive indexing/admission, + optional bulk metadata, similarity representations and output churn with EP/JC/P acceptance. + Keep macrobenchmark, kernel and diagnostic contracts separate. + - [ ] Qualify executor admission after the clock correction with separate cold/warm controls and 16/32/63/64-entry matching boundaries; check Linux and macOS workload regressions before promoting shared executors, caller-inclusive budgets or bounded directory frontiers. diff --git a/docs/benchmarks/collection-text-sharing-20261101.json.gz b/docs/benchmarks/collection-text-sharing-20261101.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..e77f22a758d2e12f05a891fe5734a3e3ba49ac48 GIT binary patch literal 135725 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 D3ep2h literal 0 HcmV?d00001 diff --git a/docs/benchmarks/collection-text-sharing-20261101.md b/docs/benchmarks/collection-text-sharing-20261101.md new file mode 100644 index 00000000000..04420fff4fa --- /dev/null +++ b/docs/benchmarks/collection-text-sharing-20261101.md @@ -0,0 +1,67 @@ +# Share collection-owned path storage (2026-11-01) + +## Decision + +Retain the candidate for a follow-up PR: copy the full path once, then reuse exact matching suffix/prefix views for the basename/root. Copy either field independently when its value is not contained at that boundary. This avoids a new interner, root cache, wrapper, synchronization or reference-counted text object. Both time and memory improve on useful large cases across macOS and Linux; small costs remain explicit. + +The reference is merged main `16e70cb97de93c7ab4ae8c9e990e1842d50cc528`, including #1040 fixed 1 MiB blocks. This is an additional ownership optimization, not a remeasurement of arena block sizes. + +## Contract and correctness + +The collection arena owns the copied path and retains stable storage through append growth and moves. A reused view never borrows the walker or caller buffer. Prefix/suffix checks establish byte equality only; they do not interpret path ancestry or change filtering. Name and root fall back to owned copies for arbitrary nonmatching inputs. Logical row/byte budget accounting is unchanged even when fields share physical storage. + +Both variants pass release `collect_test` and `run_test` on both platforms. Existing cases cover caller destruction, empty/length-delimited values, budgets, moves, summaries and engine integration. Add an explicit distinct-name/root lifetime case. Extend the existing growth test from 150-byte to 600-byte paths so its two copies of 1,025 paths actually exceed the new 1 MiB block size; otherwise the historical arena-growth assertion no longer exercises a second block. + +## Measurement contract + +Mac: local Apple M5 Pro, warm APFS, no CPU affinity. Linux: drogon Ryzen 9950X KVM guest, tmpfs, affinity restricted per requested allowance. Both build `--config=clang_release` with LLVM 23 and ThinLTO. All builds/tests on a host finish before its timing begins. + +Native matrix: 26 cases, three sessions, discarded warmup per case/variant/session, nine interleaved measurements retaining the fastest seven. Cases include empty, 10/1,000/10,000/100,000 files, short/long paths, one/three workers, one/four named collections, and no-collection controls. Every native invocation verifies count/size output independently. Both matrices total 3,120 successful invocations including warmups. + +Kernel matrix: 12 cases, three per-case shuffled sessions, nine repetitions retaining seven real-time samples; 10/1,000/100,000 entries, root lengths 1/128, one/four independent collection threads. Fixture setup is outside timing; construction, insertion, enumeration and destruction are inside. Kernel checksums prevent dead-code removal but are not independent per-iteration output oracles. + +Percentages are median paired-session elapsed changes; negative is faster. Absolute times and RSS are summarized independently and need not yield the same percentage. RSS uses all 27 peak samples per variant/case, not only the fastest seven. + +## Complete-command results + +| Host | Paths / files / workers / collections | Main ms | Views ms | Change | Main MiB | Views MiB | +| ----- | ------------------------------------- | ------: | -------: | ------: | -------: | --------: | +| macos | short / 10 / 1 / 1 | 4.346 | 4.318 | -0.19% | 3.88 | 3.89 | +| macos | short / 100,000 / 3 / 1 | 109.151 | 109.872 | -1.66% | 40.03 | 34.34 | +| macos | long / 100,000 / 1 / 1 | 367.909 | 362.691 | -1.65% | 96.14 | 63.42 | +| macos | long / 100,000 / 3 / 1 | 147.050 | 145.101 | -1.79% | 100.25 | 66.39 | +| macos | short / 100,000 / 3 / 4 | 137.509 | 131.596 | -5.23% | 139.16 | 116.20 | +| macos | long / 100,000 / 3 / 4 | 195.058 | 179.718 | -8.08% | 364.36 | 230.77 | +| linux | short / 10 / 1 / 1 | 0.629 | 0.626 | -0.74% | 5.42 | 5.40 | +| linux | short / 100,000 / 3 / 1 | 43.489 | 42.167 | -3.02% | 38.53 | 33.05 | +| linux | long / 100,000 / 1 / 1 | 133.210 | 126.330 | -5.34% | 92.57 | 59.62 | +| linux | long / 100,000 / 3 / 1 | 58.487 | 53.165 | -9.10% | 97.55 | 64.36 | +| linux | short / 100,000 / 3 / 4 | 74.893 | 71.104 | -5.15% | 132.68 | 111.20 | +| linux | long / 100,000 / 3 / 4 | 131.486 | 95.863 | -26.57% | 357.05 | 225.41 | + +## Kernel and storage results + +| Host | Entries / root length / threads | Elapsed change | +| ----- | ------------------------------- | -------------: | +| macos | 10 / 1 / 1 | +2.29% | +| macos | 1,000 / 1 / 1 | -6.94% | +| macos | 100,000 / 1 / 1 | -6.57% | +| macos | 100,000 / 128 / 1 | -25.68% | +| macos | 100,000 / 128 / 4 | -25.64% | +| linux | 10 / 1 / 1 | -2.56% | +| linux | 1,000 / 1 / 1 | +4.08% | +| linux | 100,000 / 1 / 1 | -1.97% | +| linux | 100,000 / 128 / 1 | -17.22% | +| linux | 100,000 / 128 / 4 | -24.99% | + +Separate untimed accounting agrees on both platforms. For 100,000 long-root entries, used text falls from 28,677,780 to 14,388,890 bytes (49.8% less), arena blocks from 28 to 14, and reserved text from 28 to 14 MiB. Entry records and filesystem owners are still real objects. Empty collections remain allocation-free. RSS reductions depend on the other retained state and must not be advertised as a universal 50% process reduction. + +## Limits and counterexamples + +Worst native paired medians are +1.33% on Linux (1,000 short-path files/one worker) and +1.64% on macOS (ten long-path files/one worker). Kernel counterexamples include Linux 1,000 short-root entries/one thread at +4.08% and macOS ten long-root entries/four threads at +5.26%. Do not claim every small case improves or assign tiny unaffected-control changes to the ownership code. + +The four-thread kernel constructs four separate collections; it is not evidence of parallel insertion into one collection. Production collection is coordinator-owned. This change does not optimize all traversal, raw listing, regex, archive decoding or output paths. Both policies retain VFS and safety semantics. Additional real storage, cold-cache and unusual path distributions remain outside this contract. + +## Raw evidence + +[Complete JSON evidence](collection-text-sharing-20261101.json.gz): 135,725 bytes, SHA-256 `b45fc37ff76fc9d81006d8fafbeab53b2ea33c2d133616e85e0082130a368d88`. It retains raw samples, independent native oracles, source patches, scripts, binary hashes and separate accounting/exception-action summaries. diff --git a/docs/performance-analysis.md b/docs/performance-analysis.md index 19aa7836f64..e1d7ffd8fc4 100644 --- a/docs/performance-analysis.md +++ b/docs/performance-analysis.md @@ -2819,3 +2819,254 @@ alternative consistently dominates fixed blocks. Adopt the simpler fixed 1 MiB p the smaller cap, but do not qualify constrained-memory services or many simultaneous processes. The shipping collection text arena now uses the measured fixed 1 MiB policy and still allocates only on its first nonempty text copy. Growth-policy controls remain separate evidence populations. + +## Reconciled cross-platform optimization audit after #1040 + +Baseline: merged main `16e70cb97de93c7ab4ae8c9e990e1842d50cc528`. This is a code and evidence audit, +not a speedup claim for every candidate. Only the collection text-sharing experiment below has new +Linux/macOS timing evidence. Preserve the distinction between release timing, allocation accounting, +in-memory kernels, and correctness tests. + +### Existing work and decisions + +This audit reconciles the existing plans rather than replacing them: + +- [Performance analysis](performance-analysis.md): compiler/allocator trials, metadata, collection + storage, P01-P08, startup, expression qualification, clock correction, executor audit and arenas. +- [Expression plan](design-expression-program.md) and + [qualification inventory](expression-qualification-audit.md): preparation boundaries, effects, + operand/worker storage, dispatch and optimizer acceptance. +- [Concurrency design](design-parallel.md) and TODO JC01-JC08: role budgets, reusable workers, + admission, cancellation, bounded queues, and separate diagnostics. +- [Near-duplicate design](design-near-duplicates.md): reuse normalized shingles and exact verification; + candidate indexing is distinct from choosing clustering semantics. +- [Benchmark comparison](benchmark-comparisons.md), [history](benchmark-history.md), + [correctness audit](benchmark-correctness-audit.md), and [backfill](benchmark-backfill.md): preserve + comparable case contracts, platform/CPU series, raw samples and reference normalization. +- [Safety design](design-safety.md), [structured output](design-structured-output.md), + [rg design](design-rg.md), [field validation](design-field-validation.md), and + [summary scopes](design-summary-scopes.md): optimizations cannot change policy enforcement, parsing + modes, validation timing, output populations or formatting contracts. +- TODO's startup, toolchain, regex, P01-P08, performance follow-up, EP01-EP07, operand qualification, + directory read-ahead and interner-revisit sections remain part of the inventory. + +Already implemented work is not a new recommendation: lazy metadata, birth-time demand, removal of +whole-content stack-buffer zeroing, content snapshots/invalidation, streaming rg selection, compiled +field transforms, prepared expression dispatch, private regex worker state, PCRE2 scratch/JIT, +conditional timezone/framework startup, the Abseil clock correction, bounded directory read-ahead, +owned collection keys and fixed 1 MiB text blocks. Some historical paragraphs and unchecked TODOs +predate those implementations; qualify or narrow them instead of repeating completed work. + +The current rejected policies are also constraints on new experiments: + +- #991 is closed: the fixed admission/probe policy regressed slow Linux children by 27.8-59.0% + and macOS listings by 7.3-8.8%. +- #1001 is closed: the remaining-work planner regressed nested content by 54.8% Linux / 35.2% macOS. +- #1000 is closed as superseded by the diagnostics in #1035, not as a failed measurement technique. +- #992/#996/#997/#998 remain unqualified. Shared execution, caller participation, cancellation, + byte reservations and fairness are not categorically rejected, but their current integrations + cannot be promoted past the recorded workload regressions. +- The narrower read-ahead window, generic larger output batches, per-batch asynchronous overlap, + default allocator replacement and the previous recycling API have unfavorable or insufficient + evidence. Revisit only with a specific changed mechanism and new controls. + +### Exception and wrapper boundary + +`.bazelrc` selects `-fno-exceptions`. Inspecting actual full-release C++ actions on both platforms +with `//xff/cli:xff_full --config=clang_release --config=xff_full` found no later `-fexceptions`: +macOS had 131 XFF/extension and 191 dependency C++ actions; Linux had 262 and 382 respectively +(the action totals include configurations, not necessarily unique source files). No unguarded +`throw`, `try` or `catch` was found in XFF's own runtime C++ sources. + +This does not prove that system C++ libraries contain no exception machinery. Build-time execution +configuration, prebuilt system runtimes, and foreign ABI callbacks are separate boundaries. Keep +runtime status-based failures explicit. Do not add cleanup guards for impossible exception unwinding, +throwing adapters around status values, or speculative exception containment in hot loops. A future +exception-enabled dependency must be isolated and justified with effective compile/link evidence. + +`RunExecutor`, its lifecycle measurement support, iterative expression programs and qualification +factories are test-only. Do not count their wrappers or allocations as shipping costs. The shipping +expression adapter still has a polymorphic plan and worker state; inspect optimized code before +claiming that ThinLTO failed to remove an indirect call. A small value, enum, span, index or +worker-local buffer is the preferred initial representation. New type-erased tasks, shared ownership, +virtual layers and generic executor hierarchies need an actual lifetime or extensibility requirement. + +### Prioritized candidates + +| ID | Candidate | Current concrete cost / opportunity | Relation to existing work | First decision experiment | +| --- | ------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------ | +| O01 | Share collection-owned path text | Separate basename/root copies often duplicate bytes already in the owned path | Extends collection ownership and #1040 | Native/kernel timing, RSS, growth/move/fallback/budget tests | +| O02 | Avoid native glob argument copies | `evaluate.cc::Fnmatch` constructs pattern and input strings on each call | EP03 invariant preparation; name-txt cases | Owned-pattern reference first; simple glob plans separately | +| O03 | Reuse fuzzy scratch and self-scores | `Score` allocates two rows; `Percent` scores the fixed pattern against itself again | Existing fuzzy optimization TODO | Prepared ceiling plus worker scratch, exact ranking oracle | +| O04 | Render lexical path fields as views | Name/stem/ext/etc. repeatedly construct path and string temporaries | P04 field rendering | POSIX lexical slices, multi-field output and edge cases | +| O05 | Remove transparent-lookup temporaries | Definition/capture field maps require temporary `std::string(key)` | C01 precedent; optional dynamic interning | Transparent comparator plus borrowed lookup before interner | +| O06 | Avoid read-buffer zeroing | Range reads and host cursor reads allocate zero-filled strings before OS fills them | Extends the already-fixed content buffer | C++23 overwrite operation, short/EINTR/EOF/error boundaries | +| O07 | Reuse caller-owned stream buffers | Large comparisons and range assembly allocate intermediate strings per chunk | P04 incremental work; P05 cursors | Simple span read API, two persistent comparison buffers | +| O08 | Simplify directory task handoff | Shared packaged task, future state and erased queue callback per read/stat job | JC04 and executor diagnostics | Bounded typed reusable slots on the existing pool | +| O09 | Reduce batch input ownership | `OwnVisit` copies path, name and root into each pending/deferred record | C02 deferred pending stable gains | Batch-owned bytes/offsets; immutable source ownership | +| O10 | Retain bounded result capacities | Match/compare result clear/resize destroys reusable output string capacities | P08 output-byte admission | Reuse slots with a retained-byte ceiling and giant-tail test | +| O11 | Reduce idle worker participation | Warm pools wake all started workers even when the current useful batch is smaller | JC04/07, cold versus warm distinction | Active worker IDs/generations; no clocks in per-file paths | +| O12 | Simplify shipping evaluator adapter | Plan/state allocation and an indirect worker call may remain around prepared logic | EP07 and recorded virtual-entry overhead | Direct production value representation versus actual LTO | +| O13 | Carry derived values across stages | Worker-filtered entries may be reread for coordinator hashes/line counts/output | Explicit remaining P04 extension | Requested values only; no unbounded raw-content batch | +| O14 | Build immutable catalogs once | MIME/language core vocabularies and lookups have runtime construction paths | Startup TODO; EP-S01 | Generated flat tables plus lazy user overlays | +| O15 | Prepare remaining invariant operands | Hash specs, diff options and template families retain qualification gaps | EP03/EP07 operand inventory | Audit actual production binding before adding a record | +| O16 | Stream the two-tree comparison merge | Both trees accumulate in ordered maps before comparison and first status output | Original directory-at-a-time design; P05 | Paired completed frontiers, ordering and ignore equivalence | +| O17 | Reuse stage workers within a command | Traversal/matching/comparison have separate persistent pools and stage budgets | JC01-JC08; open #992/#996/#997/#998 | Persistent role queues versus pools; shared CPU accounting | +| O18 | Add byte-bounded pipeline overlap | Coordinator waits for matching batches; I/O and matching can have idle phases | JC03/04; rejected per-batch async pilot | Persistent workers, bounded completed output, backpressure | +| O19 | Amortize archive decoding/indexing | Reopening/replaying members is expensive, especially the recorded ZIP cases | P07 archive admission/indexing TODOs | Indexed or serial decode feeding admitted byte queues | +| O20 | Bulk metadata where supported | Metadata-heavy macOS directories could amortize per-entry syscalls | Existing bulk-stat investigation | Optional VFS capability with basic/followed-link fallback | +| O21 | Reuse similarity representations | Repeated shingle generation and pairwise verification dominate large document sets | Existing near-duplicate design | Cache reference shingles; exact verification after indexing | +| O22 | Reduce output construction churn | Numeric/cell/JSON strings, row insertion and aligned-table retention allocate | Existing output/scope contracts | Append into reusable row buffers; stream machine formats | + +All elapsed improvements in this table except O01 are hypotheses, not measured gains. Allocation +sites are inspected code facts; an allocation's wall-time significance still requires profiling. + +### Small changes first + +O02 has a particularly small first step: all inspected native helper call sites pass the owned +`expr.args.front()` pattern. Accept that existing string by const reference rather than copying it +through a string view. Do not introduce a new prepared wrapper just to recover its `c_str()`. +A larger literal/prefix/suffix strategy can later avoid the input materialization too, but must +preserve escapes, bracket classes, case mode, locale and POSIX glob behavior; retain the existing +fallback for unsupported patterns. The dedicated fnmatch regex backend already owns its pattern, +so do not mistakenly claim that it copies the pattern too; it still materializes the input. + +O03 can cache the pattern-only normalization score in a parsed fuzzy term and reuse two plain +worker-local rows. The first row does not need old data; later rows overwrite every result cell. +Preserve all scoring weights, byte/case semantics, term negation and ranking ties. Do not share +mutable scratch through the immutable query or add a lock. A global pool for two tiny vectors is +more complicated than explicit per-worker storage. + +O04 should exploit the existing string-or-view return type. A whole new general path object is +unnecessary. Test empty paths, `/`, repeated/trailing separators, `.`, `..`, leading dots, empty +extensions, compound suffixes and virtual member paths against current behavior. Cache only if +multiple fields justify it; a one-field render should not build an elaborate per-entry cache. + +O05 starts with heterogeneous lookup in the existing maps, including their owning declarations. +Only then measure IDs/interning for captures/definitions or destination detection. The MBO interner +remains an optional dependency experiment, not a reason to hash names that preparation can bind +once. Avoid a second catalog or lookup structure with the same spellings. + +O06/O07 must consume exactly bytes returned by the read operation. Keep errors distinct from EOF, +short reads and EINTR, preserve offsets and shared read-budget reservations, and retain VFS routing. +`ReadSourceRange` already reserves its final result; eliminating its intermediate read/copy matters +more than adding another reserve. A span-based read can reduce allocation and zeroing without a +new ownership hierarchy. Use already-known sizes when useful, but do not call a generic source +size method or perform another stat just to reserve: the default source size method scans content. Native compressed/archive readers need an honest fallback contract. + +### Worker and lifetime changes + +Current `ReadPool`, `ParallelMatch` and `ParallelCompare` retain threads after activation and join +at lifetime end. Comparison has one `std::async` coordinator per two-tree command; that is not a +fresh thread for every file or batch. Do not describe all existing threads as disposable. +The rejected overlap pilot did create per-batch asynchronous work; do not bring that design back. + +O08 should first preserve the existing worker policy and leaf-job restriction. A slot can hold a +job kind, owned input or borrowed stable input, result, generation and completion state. Bound it +by the active frontier. Do not recycle it until both producer and consumer are finished; cancellation +and destructor draining must remain safe. Replace shared/type-erased machinery only when native +allocation and clean dispatch measurements show the slot representation is cheaper. Do not export +a general-purpose executor API for this two-kind internal queue by default. + +O09 cannot simply replace strings with views into a movable `std::string`: short-string storage +and vector relocation would dangle those views. Use stable owned bytes or offsets resolved on use, +keep archive filesystem owners alive, and preserve all suspended/deferred lifetimes. Count known +sizes and reserve where possible, but do not perform an extra directory/stat pass to guess capacity. +The listing-to-walker conversion already reserves and moves strings; remove duplicate representations +rather than adding redundant move calls or disabling return-value optimization. + +O10/O11 need explicit reset and generation contracts. Avoid preserving a giant output allocation +forever after one outlier. Inactive workers must not decrement the current batch's completion count +or miss a later activation. Reused threads and useful participants are different quantities; record +both. Small tails, early quit, pool growth and heterogeneous batches are mandatory counterexamples. + +O16-O18 are larger changes with potentially larger wins. The current comparison stores both trees +before merging. A bounded paired directory frontier could reduce retained paths and first-output +latency; it must preserve sorted output, left/right selection, independent/union/explicit ignore +rules, summaries, symlinks/type changes, errors and effects. Global sorting may still require +retention. Likewise, overlapping stages require bounded input/output bytes and explicit backpressure, +not merely two vectors. Reserve CPU capacity for useful work while readers block, and forbid a worker +from waiting on nested work submitted to the same saturated pool. + +O17 must compare coordinated existing pools with a simpler shared pool. The earlier caller-inclusive +budget and obsolete matcher gate changed work placement and caused regressions. Keep their mechanisms +separate from task-storage improvements. No fixed millisecond admission delay, per-file timer, or +lifetime file counter should be inferred from the current tmpfs/APFS results. Local, slow and network +storage remain part of JC05/JC06 qualification. + +O19 retains serial archive admission until decoder memory and replay budgets are explicitly managed. +The historical parallel TAR gains do not license enabling workers for ZIP or every mounted source. +O20 is cross-platform by capability/fallback, not by pretending Linux and macOS expose the same bulk +metadata operation. Keep metadata-free scans on directory-entry types; no extra stat for tuning. + +### Compiler, context and ownership follow-ups + +There are further experiments once profiles identify their cost, rather than reasons to change +working defaults now: + +- Split truly immutable run options from resettable per-entry context if optimized code shows + significant context initialization or repeated copying. Keep a small reusable worker struct with + an explicit reset contract; captures, content invalidation, deferred state and effects must not + leak across entries. Most present fields are cheap observers, so inspect generated code before + inventing another context hierarchy. Make timezone construction explicit at the existing demand + boundary rather than accidentally reintroducing the already-fixed startup query. +- Evaluate Clang profile-guided layout/optimization using a separate training build and a + representative mix of listing, content, fuzzy, compare and output. Measure only clean optimized + release binaries; do not use ASan or instrumented-profile execution times as production results. + Account for build/release complexity, profile portability, size and small-command startup. +- Keep the measured `-O2` plus ThinLTO default. Prior allocator replacement and `-O3` trials are + not new wins. Revisit allocators only if new native profiles show allocator contention or a + materially different allocation regime; preserve small-process and binary-size controls. +- ISA specialization and SIMD require portable baselines and deployment compatibility. Existing + PCRE2 JIT/SIMD and RE2 work is recorded already; repeat native x86 qualification still listed in + TODO instead of declaring another backend automatically faster. No `-march=native` release. +- Do not substitute copy-on-write or an interner for every string. Share immutable compile-time + data and explicitly owned buffers where lifetime allows it. Archive filesystem owners and + asynchronous inputs still require real ownership. Atomic reference counting on every entry is + not a free alternative to copying; neither are dangling views. +- Return values benefit from copy elision; adding `std::move` to every return can make them worse. + Known-size vectors already reserve in many paths. Focus on duplicate representations and + initialization, not a repository-wide mechanical move/reserve patch. + +### Measurement and implementation order + +1. Finish O01's measured ownership change and regression coverage independently of scheduling. +2. Small independent experiments: O02, O03, O04, O05, O06, each against fresh merged main on both + platforms. Group only changes whose individual effect remains identifiable. +3. Measure O07/O08/O09/O10 with allocation diagnostics separate from clean timing; reject a new + lifetime/API layer if the expected reduction fails to appear. +4. Assess O12/O14/O15 using preparation versus hot-loop profiles and optimized call graphs. +5. Design O16-O20 using the existing JC/EP contracts before implementation. Keep O13/O21/O22 + attached to concrete consumers rather than introducing a universal per-entry cache. + +Use small/medium/large and broad/deep cases, 1/3/10 requested CPUs where feasible, and explicit +read-only, summary, match-output, collection, compare and archive populations. Preserve warmup, +interleaved participant order, nine rounds/fastest seven, multiple sessions, output oracles and +raw provenance. Measure first output, wall/CPU time, peak/retained memory, allocation counts and +actual worker creation separately. Reference-tool normalization is presentation-only and must not +mask within-host paired regressions. Do not add benchmark instrumentation to shipping hot paths. + +The existing macrobenchmark suite alone cannot identify a per-entry allocation or lock. Conversely, +a hot kernel alone cannot justify slowing small complete commands. Keep rejected controls and show +absolute costs alongside percentages. Safety/effect correctness, output identity and stable source +lifetimes remain acceptance requirements, not performance knobs. + +## Collection basename/root sharing on the fixed arena + +The [fresh ownership experiment](benchmarks/collection-text-sharing-20261101.md) compares merged +main `16e70cb97de93c7ab4ae8c9e990e1842d50cc528` with a plain owned-path/suffix/prefix implementation. +Copy noncontained fields independently, preserve logical budget accounting and stable text through +moves/growth, and add no new interner, synchronization or ownership wrapper. + +At 100k long-root entries, retained text decreases from 28,677,780 to 14,388,890 bytes and fixed +arena blocks from 28 to 14 on both platforms. One-thread collection kernels improve 17.22% on +Linux and 25.68% on macOS. At 100k long-path files/three workers/four collections, native elapsed +time improves 26.57% Linux and 8.08% macOS; median RSS falls 357.05 -> 225.41 MiB and +364.36 -> 230.77 MiB respectively. These are particular retained-collection populations, not +claims about ordinary non-collection listing or all filesystem workloads. + +Small native costs remain (up to +1.33% Linux and +1.64% macOS); kernel counterexamples reach ++4.08% Linux and +5.26% macOS. The report preserves all raw samples, independent native output +checks, source/binary identities and separate untimed accounting. Both source variants pass +collection and full-engine release tests on both platforms. This is qualified local evidence; +a subsequent published PR head still needs its normal hooks and CI. diff --git a/release-site.json b/release-site.json index c019086fcb4..62c17cdc26d 100644 --- a/release-site.json +++ b/release-site.json @@ -5,6 +5,7 @@ "CONTRIBUTING.md": "CONTRIBUTING.html", "docs/benchmarks/execution-resources.md": "docs/benchmarks/execution-resources.html", "docs/benchmarks/executor-copy-audit-20261101.md": "docs/benchmarks/executor-copy-audit-20261101.html", + "docs/benchmarks/collection-text-sharing-20261101.md": "docs/benchmarks/collection-text-sharing-20261101.html", "docs/benchmarks/collection-arena-20261101.md": "docs/benchmarks/collection-arena-20261101.html", "docs/benchmarks/bounded-read-ahead-20261101.md": "docs/benchmarks/bounded-read-ahead-20261101.html", "docs/benchmarks/executor-dispatch-probe.md": "docs/benchmarks/executor-dispatch-probe.html", diff --git a/xff/engine/collect.cc b/xff/engine/collect.cc index 0cd9c727d23..3a59e6f9896 100644 --- a/xff/engine/collect.cc +++ b/xff/engine/collect.cc @@ -67,11 +67,12 @@ bool Collections::Add(std::string_view name, const Visit& visit) { } rows_ += 1; bytes_ += entry_bytes; + const std::string_view path = CopyText(visit.path); by_name_.try_emplace(name).first->second.push_back( Entry{ - .path = CopyText(visit.path), - .name = CopyText(visit.name), - .root = CopyText(visit.root), + .path = path, + .name = path.ends_with(visit.name) ? path.substr(path.size() - visit.name.size()) : CopyText(visit.name), + .root = path.starts_with(visit.root) ? path.substr(0, visit.root.size()) : CopyText(visit.root), .depth = visit.depth, .metadata = visit.metadata, .fs = visit.fs, diff --git a/xff/engine/collect.h b/xff/engine/collect.h index 84d542049b0..d4ecbdeb8ed 100644 --- a/xff/engine/collect.h +++ b/xff/engine/collect.h @@ -81,7 +81,7 @@ class Collections { using EntriesType = mbo::container::SegmentedVector; // The row / byte ceiling a collection may occupy, from `--buffer` (0 = no limit, the default). - // Bytes count the stored path, name and root text, which is what a collection actually holds on to. + // Bytes count logical path, name and root lengths even when their owned text shares storage. struct Budget { std::size_t rows = 0; std::size_t bytes = 0; diff --git a/xff/engine/collect_test.cc b/xff/engine/collect_test.cc index 28f2474b5a2..2594fb36862 100644 --- a/xff/engine/collect_test.cc +++ b/xff/engine/collect_test.cc @@ -97,6 +97,22 @@ TEST_F(CollectTest, RepeatedLongNamesOwnTheirKeyBeyondCallerStorage) { EXPECT_THAT(collections.Entries(expected_name).back().path, EqualsText("./b")); } +TEST_F(CollectTest, DistinctNameAndRootRetainTheirOwnValues) { + const vfs::Metadata metadata{.type = vfs::FileType::kRegular}; + Collections collections; + { + const std::string path = "/root/leaf"; + const std::string name = "other-leaf"; + const std::string root = "/other-root"; + EXPECT_THAT(collections.Add("keep", MakeVisit(path, name, root, metadata)), IsTrue()); + } + ASSERT_THAT(collections.Entries("keep"), SizeIs(1)); + const auto& entry = collections.Entries("keep").front(); + EXPECT_THAT(entry.path, EqualsText("/root/leaf")); + EXPECT_THAT(entry.name, EqualsText("other-leaf")); + EXPECT_THAT(entry.root, EqualsText("/other-root")); +} + TEST_F(CollectTest, AsVisitRebuildsTheEntryForASink) { const vfs::Metadata md{.type = vfs::FileType::kRegular, .size = 7}; Collections collections; @@ -192,7 +208,8 @@ TEST_F(CollectTest, StoredVisitSurvivesSegmentAndArenaGrowthAndMove) { EXPECT_THAT(collections.Add("first", MakeVisit("first/path", "path", "first", metadata)), IsTrue()); const Visit retained = collections.Entries("first").front().AsVisit(); for (std::size_t index = 0; index < 1'025; ++index) { - const std::string path = std::string(150, 'p') + std::to_string(index); + // Two copies of each long path force text storage beyond one 1 MiB block. + const std::string path = std::string(600, 'p') + std::to_string(index); EXPECT_THAT(collections.Add("first", MakeVisit(path, "name", "root", metadata)), IsTrue()); EXPECT_THAT(collections.Add(std::to_string(index), MakeVisit(path, "name", "root", metadata)), IsTrue()); } @@ -202,7 +219,7 @@ TEST_F(CollectTest, StoredVisitSurvivesSegmentAndArenaGrowthAndMove) { EXPECT_THAT(retained.root, Eq("first")); EXPECT_THAT(retained.metadata.size, Eq(73)); EXPECT_THAT(moved.Entries("first"), SizeIs(1'026)); - EXPECT_THAT(moved.Entries("first").back().path, Eq(std::string(150, 'p') + "1024")); + EXPECT_THAT(moved.Entries("first").back().path, Eq(std::string(600, 'p') + "1024")); Collections assigned; EXPECT_THAT(assigned.Add("old", MakeVisit("old", "old", "", metadata)), IsTrue()); assigned = std::move(moved);