Repository navigation
feat: Ebb Phase 2 cache trimming and pressure (0.91.4) - #17
Merged
Merged
Conversation
Support decimal B/KB/MB/GB and binary KiB/MiB/GiB sizes with checked whole-byte arithmetic, variable and list lowering, and eval serialization. Document unit semantics and reject nonfinite, negative, fractional-byte and inexact-range results. Validation: 714 tests, fmt, strict all-feature Clippy, optimized build; private nested three-engine matrix with subscribers and real clients, including size eval checks.
Sample PSS, fds, system pressure and the shared perf texture estimate at bounded configurable intervals. Keep bounded in-memory history; report growth, away growth and retained dead-resource references through stats, logs, daily toasts and ebb-warning IPC. Add tidectl ebb stats and config diagnostics. Native idle maintenance may return already-free GNU heap pages, respecting off, grabs, animation and caps with hysteresis and blocked retries. Hidden-cache eviction and pressure passes remain later phases; NVIDIA profiling is staged only. Preserve exact whole-byte size lowering at the Lua integer boundary. Validation: 726 locked all-feature/all-target tests, fmt, strict Clippy with all and default features, release/debug builds. Private three-engine/subscriber matrix: 61 observations, zero differences; debug/release CLI, reload and cadence checks; copied personal config validation. Native and long-run validation pending.
Ship the native-tested TideWM-only OpenGL memory-reuse profile through Arch, Gentoo, source installs and the NixOS module, retaining normal config protection and an explicit NixOS opt-out. Standalone Nix packages supply data without activating it. Keep vendor handling in host diagnostics: inspect the selected compositor GL libraries, verify bundled profile data, and distinguish missing optional data from custom settings or explicit disabling. Bound file reads; document installation scope, activation, and rollback. No compositor or Ebb behavior changes. Validation: 730 tests, fmt, strict Clippy with all/default features, release/debug builds; native new doctor 11/11; private nested doctor with real clients; package installation staging and shell syntax. Full distro builds and Nix evaluation not run.
Ebb Phase 2: bounded light/deep passes over rebuildable render.gpu caches,
weak hidden clocks, per-mode delays, map shrinking, caps gating cache and
heap trimming, per-app rule { ebb }, generated ebb.wave + tidectl ebb init,
manual tidectl ebb run [--deep], and optional kernel PSI pressure.
Protected: every current render placement on every output, all mapped
layers, pinned/fullscreen windows; unknown placements protect everything.
Pass budgets are 1-10ms and defer on grabs, structural animation, camera
motion and live capture consumers.
Gates: 738 tests (706+23+9), fmt, both strict Clippy variants, debug and
release builds. Not natively exercised; Phase 3 ownership reports, shell
pressure event and long soak remain open. Evidence:
.hermes/worklogs/ebb-phase2-2026-10-28/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lands the local Ebb work stacked since
master(bce1b11): Wave memory sizes, Ebb Phase 1 monitoring, the packaged NVIDIA memory profile, the README showcase and Ebb Phase 2.Phase 2 (
0.91.4) adds bounded light/deep maintenance passes that free only TideWM-owned rebuildable caches out of view:render.gpucache trimming with weak hidden clocks, per-mode delays (low 30m / balanced 10m / aggressive 2m), deep-pass map shrinking and 1–10 ms pass budgets.MEMORY_PRESSURE_WATCH/ cgroupmemory.pressure//proc/pressure/memory) with a sampled-availability fallback. No thread, service or dependency.rule { ebb = ... }, generatedebb.wave+tidectl ebb init, andtidectl ebb run [--deep].Verification
cargo fmt --check, strict Clippy all-features/all-targets and default, debug + release builds.doctor11/11; light/deep manual passes executed in 779/962/913 µs with heap trim releasing free pages and zero warnings.tidectl ebb initchecked on a temp regular file and a symlinked config: backup, symlink/permissions preserved, include added once, idempotent.Not covered
tidectl ebb initon the maintainer's real config.No installed system files, services or master changed by this PR.
RAM budget
No new dependency, thread or service. Ebb retains one small record per cached surface plus weak clock entries; passes run from the existing maintenance tick under a 1–10 ms budget and allocate no per-frame state. The only transient allocation is the pass's candidate vector, which exists for the duration of one pass.