Inspect memory.
Don't change it.
A read-only debugger can alter the process it observes. We benchmarked two Linux remote-memory readers to quantify performance, copy-on-write effects and access semantics.
COW pages split by proc
Tracked COW pages split by vmread
Faster cold read with proc at 256 KiB, contiguous
Faster warm read with vmread at 256 KiB, contiguous
Two readers. Different costs.
Switch between memory layouts and cold or warm reads. Bars show median MiB/s; white ticks mark the 25th–75th percentile interval across ten repeats.
/proc/<pid>/memprocess_vm_readv()Higher is better ↑Exact medians and interquartile intervals
| Block | Method | P25 | Median | P75 |
|---|
Read-only doesn't mean side-effect-free.
Fraction of tracked private pages physically unshared after reading a forked child's memory.
vmread case on this kernel caused 100% tracked-PFN divergence before an application write; every proc case preserved sharing. Do not assume identical behavior on other kernels.What counts as readable?
In an explicit 4 KiB probe crossing PROT_NONE regions and unmapped holes, the readers returned different byte counts. These are not equal-workload performance tests.
/proc/<pid>/mem read additional PROT_NONE pages on this tested kernel; process_vm_readv() did not. Both failed on holes. Access to another process still requires appropriate inspection permissions; this is not a privilege-escalation claim.Measured, not assumed.
Direct syscall-level microbenchmarks, separate from RuntimeXRay's end-to-end tracing and scanning paths.
01 · Forked fixture
Each case uses a fresh fork. A 32 MiB contiguous arena or 25.62/25.50 MiB of readable mappings spread across 410/102 VMAs. Reads use 4, 64 or 256 KiB blocks.
02 · Ten repetitions
Every reader × block × layout was measured ten times. Charts show median and interpolated P25–P75. Contiguous runs alternate reader order; VMA runs have fixed order.
03 · Five warm passes
Five subsequent reads follow each cold pass. Physical-page sharing is counted outside the timed loop. Opening and closing /proc/pid/mem is also excluded.
Environment
ARM Neoverse-N1 · Oracle VM with 1 vCPU · Linux 6.17.0-1018-oracle on AArch64 · Ubuntu 24.04-based kernel · 4096-byte pages · measured 22 Oct 2026 UTC · 180 primary data rows and a separate single-run probe.
Reproduction
Limitations: one kernel and single-vCPU VM; host scheduling may vary. The compared fixtures keep work equivalent in maps-aware mode. Probe intentionally does not. Results describe read-loop throughput, not total scanning cost. The proc backend requires additional open/close calls outside the timing region.