Introduction

Understand the what, why, and how of the Userspace Memory Management (USM) framework.

Welcome to the documentation for the Userspace Memory Management (USM) framework. This project introduces a revolutionary approach to memory management on Linux, designed for performance engineers, systems researchers, and developers who need to push the boundaries of what's possible.

The Problem: A "One-Size-Fits-All" Kernel

The standard Linux Memory Manager (LMM) is a marvel of engineering, designed to perform well for a massive range of applications. However, this general-purpose nature is its greatest strength and its most significant weakness. For specialized, high-performance workloads like in-memory databases, real-time analytics engines, or scientific computing, the LMM's generic assumptions about memory access patterns can become a major performance bottleneck.

Customizing the kernel's memory manager is a task reserved for a handful of experts worldwide. It's risky, time-consuming, and locks you into a specific, patched kernel version.

The Solution: Policy in Userspace, Mechanism in Kernel

USM solves this problem by adopting a microkernel philosophy. It separates the decision-making (the "policy") from the execution (the "mechanism").

  • Mechanism (in the Kernel): A tiny, hardened kernel module (usm_lkmRM.ko) acts as a simple mechanism executor. Its only jobs are to intercept memory events for tagged processes and safely execute mapping commands.
  • Policy (in Userspace): Your custom logic lives in a userspace daemon. This is where you write C code to decide which page to allocate, which page to evict, and what to do when memory runs out.

Safety First!:

A bug in your custom policy will crash the userspace daemon, not the kernel. This makes development and experimentation dramatically safer and faster than traditional kernel development.

What You Can Build with USM

USM empowers you to create holistic memory strategies that are impossible with the standard kernel.

Strategy TypeExample Use Case
AllocationA slab allocator for a database to eliminate memory fragmentation.
Eviction/SwappingAn application-aware eviction policy that knows which data is critical to keep in RAM.
OOM ManagementA graceful OOM handler that clears caches or kills worker threads instead of the main process.
Flexible Huge PagesCreate huge pages of any size (e.g., 64KB) independent of hardware TLB limits to reduce fault frequency by up to 88%.
Asynchronous ZeroingDeport the costly zeroing of pages to background threads at free time, removing it from the critical path of the next page fault.

Ready to get started? Let's dive into the Core Concepts that make USM work.