finds.dev← search

// the find

fasterthanlime/mevi

★ 738 · Rust · Apache-2.0 · updated Oct 2024

A memory visualizer in Rust (ptrace + userfaultfd)

mevi is a Linux memory visualizer that uses ptrace + userfaultfd to track page faults in real time and render them in a browser-based frontend compiled to WASM. It was built as a companion to a YouTube video explaining memory internals — a working demo more than a production tool. The target audience is systems programmers who want to watch allocation patterns unfold visually.

The combination of ptrace and userfaultfd to catch both syscall-level and page-fault-level events without eBPF is genuinely interesting — it shows how far the older APIs can be pushed. The frontend is also Rust (Yew + Trunk to WASM), so the whole stack is one language. The README is unusually honest: it names known failure modes, explains the RSS discrepancy, and explicitly says this is a research project with no maintenance promise. The workspace structure is clean — common types, driver, and frontend are split into separate crates with no circular dependencies.

Multi-threaded programs are broken by design: userfaultfd events lack thread IDs and ptrace sees events out of order, so the visualization desyncs. This rules out most real-world targets. Requiring `vm.unprivileged_userfaultfd=1` is a sysctl change that weakens kernel security, and the README's advice to 'only do this in a VM or if you're reckless' is honest but also a blocker for anyone on a shared or production machine. The project only tracks private anonymous mappings, so mapped files and shared memory — a significant portion of what most programs actually do — are invisible. It was explicitly declared abandoned by the author in the README; last meaningful commit was 2024, and it was never published to crates.io.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →