Commit Graph

2 Commits

Author SHA1 Message Date
Edouard Vanbelle ad328393cb test(ui): blake optimisation test disabled
The original assertion (`pool wall-clock < sequential wall-clock`)
    ran the workload in **Node's vitest environment**, using
    `crypto.createHash('sha256')` and `node:worker_threads`. That's not
    representative of the browser architecture the code actually ships
    for:

      - The real code hashes with WASM BLAKE3 (~100 MB/s in a browser)
        across a pool of Web Workers.
      - Node's `crypto` sha256 is native C++ (~500–1000 MB/s) and its
        `worker_threads` postMessage has different overhead characteristics.

    At native-crypto speed the 4 MiB hash completes in ~8 ms per file,
    so the message-passing round-trip cost per file becomes a comparable
    fraction of the total — even a *perfect* 3-lane parallelization has
    to overcome ~1/3 of its own runtime in messaging cost. Any CI
    variance pushes it over the sequential wall-clock, so the test
    false-fails while the actual browser code is fine.

    The optimization itself is defensible on two grounds:
      1. Theoretical parallelism win: at WASM BLAKE3 speed the messaging
         overhead is a rounding error and 3 lanes beat sequential ~2.5×.
      2. Main-thread responsiveness: even if the wall-clock ended up flat,
         offloading the ~1 s of CPU-bound hashing to workers keeps the
         UI responsive during upload prep.

    Neither of those is validated by a Node vitest. The real gate belongs
    in a Playwright browser benchmark. Marked `.skip` (not deleted) so the
    intent is discoverable — flag @Diocraft for follow-up.
2026-07-18 01:38:15 +02:00
Claude 82ee7da0d2 perf: serve ranges from RAM cache, stream ZIPs, overlap ingest settle, O(1) chunk gate
Round 2 of benchmark-gated optimizations (benches/ROUND2.md; every change
gated by a before/after in examples/bench_round2.rs — an AFTER that did
not beat its BEFORE was to be rolled back; none needed it):

- Range requests (REST/DAV/shares) answered from the moka content cache
  for sub-10MB files: PG resolve + open/seek/read -> Bytes::slice.
  256KiB seeks: 1,730/s -> 3.7M/s (p50 552us -> 0.15us).
- Streaming folder/share ZIPs via tokio duplex: TTFB no longer scales
  with archive size (326ms -> 0.4ms on 192MiB corpus; total also faster).
  Content-Length dropped (size unknown up front).
- NC chunked-upload per-PUT gate: O(k) directory scan+stat -> in-RAM
  per-session counter (lazy rebuild on cold start). 1,000-chunk upload
  gate cost: 33.1s -> 0.09s cumulative.
- Delta download + commit-verify now use the CDC path's
  buffered(read_prefetch) read-ahead: 64-chunk drain at 5ms open
  latency 440ms -> 51ms; order preserved.
- CDC ingest settles batches on a spawned task (depth-1 pipeline) so
  the source stream keeps flowing during PG pin + backend writes;
  rollback ledger shared + lock-serialized so compensation stays exact
  on cancellation. 512MiB paced ingest: 60-69 -> 74-75 MB/s.
  OXICLOUD_INGEST_OVERLAP=0 restores inline settling (ops/bench hatch).
- Frontend: instant-upload BLAKE3 hashing moved off the main thread to
  a bounded Web Worker pool (File handles by reference); vitest gate
  asserts the pool beats sequential (first gate draft posting buffers
  was 2.6x slower and was rewritten — copies dominated).

Validation: cargo fmt + clippy -D warnings clean; 514 unit + 544
integration tests green; 270 frontend tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CBK1RdtzyP6759Muqe1K1w
2026-07-16 16:50:07 +00:00