Lossless Instruction-to-Object Memory Tracing in the Linux Kernel



The lack of visibility into Linux’s behavior makes it hard to refactor and maintain. To peer inside the box, we present Memorizer, a self-contained, low-level tracing framework that tracks (most) object allocations, data accesses, and function calls within the kernel. The core insight is a low-level object-centric representation that records detailed lifetime information while linking each operation (call/read/write) with its intended target. We evaluate Memorizer using extensive input programs and demonstrate its value by showing how Memorizer can...

  • Aid in refactoring
  • Extend code coverage with object coverage to improve testing and analysis
  • Identify leaky abstractions

We also release a large data set, visualization tools, and Memorizer’s source. This generic, object-centric approach is the first to provide lossless instruction-to-object tracing, adding an essential software engineering capability to the overly complex Linux kernel.

Use Memorizer
We provide two easy ways to work with Memorizer. If you want to get Memorizer running quickly, we reccomend using our Linuxkit tutorial. If you're interested in working with the source code directly, we have published a patch for the Linux kernel and how to run Memorizer with Linuxkit.

Learn more about working with Memorizer's source code at: Gitlab Repository
Explore Memorizer Data

A link to Memorizer's data exploration dashboard: Memorizer visualization dashboard

Download Phoronix and LTP benchmarking data: Memorizer data

Learn more

Read Memorizer here: Full Paper

Systor 2021 presentation: Video

Systor 2021 Presentation slide: Slide