Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

LMCache Rust Raw Block I/O

This crate provides the low-level raw device I/O layer for LMCache via Rust + PyO3. It is used by both:

  • the legacy non-MP RustRawBlockBackend
  • the MP raw_block L2 adapter (RawBlockL2Adapter) via RawBlockCore

The Rust crate intentionally stays narrow: it owns the raw device handle and exposes blocking pwrite_from_buffer / pread_into primitives. Slotting, checkpointing, recovery, and MP task orchestration all live in Python.

I/O Engines

RawBlockDevice accepts io_engine:

  • posix (default): synchronous Linux pread / pwrite.
  • io_uring: direct Rust io_uring syscall path using the existing worker, batch, and wait_iouring machinery.

use_iouring=True remains accepted for backward compatibility. If io_engine is explicitly set, it wins over the legacy flag.

io_uring_cmd (NVMe Passthrough)

When io_engine="io_uring", you can optionally enable use_uring_cmd=True to use NVMe passthrough via the io_uring command interface for direct device access.

io_uring_cmd notes:

  • Requires NVMe character device node (/dev/ngXnY) instead of the block device node (/dev/nvmeXnY) for direct NVMe passthrough command.
  • Requires io_engine="io_uring" to be set.
  • Supports max_data_transfer_size parameter to split large transfers into smaller chunks that fit within device limits.
  • Requires alignment to be a multiple of the NVMe namespace LBA size. An incompatible value is rejected when the device opens.
  • When use_uring_cmd=True, use_odirect is ignored for NVMe namespace character devices.
  • wait_iouring returns a success bitmap and a sparse (operation_index, error_message) list after the worker releases the request's global and per-batch in-flight accounting.

MP Mode Integration

In MP mode, the stack looks like this:

StoreController / PrefetchController
                |
                v
        RawBlockL2Adapter
                |
                v
           RawBlockCore
                |
                v
         lmcache_rust_raw_block_io
                |
                v
         raw device / file

This split lets LMCache reuse the same on-device metadata and recovery model in both non-MP and MP mode without duplicating the raw-block implementation. During restart recovery, the shared RawBlockCore validates POSIX per-slot headers with an internal pool of 8 reader threads. Both regular io_uring and io_uring_cmd batch header reads up to iouring_queue_depth.

Zero-Copy Data Path

LMCache LocalCPUBackend (aligned pinned CPU tensor)
                 |
                 |  Python buffer / memoryview (no payload memcpy)
                 v
RustRawBlockBackend (PyO3 boundary)
                 |
                 |  direct pointer path when O_DIRECT constraints are met
                 |  fallback: bounce only for unaligned tail/block
                 v
RawBlockDevice::pwrite_from_buffer / pread_into
                 |
                 v
Block device or file

How To Compare Performance

To compare local_disk vs rust_raw_block on a real NVMe device:

  • Run local_disk on an ext4 mount of the device.
  • Unmount it.
  • Run rust_raw_block directly on the raw block device.

Use the benchmark commands in:

  • benchmarks/inprocess/storage_backend_io/README.md

No fixed numbers are included here because results are host/device/workload dependent.

Limitations

  • Linux only (pread / pwrite, O_DIRECT semantics).
  • alignment and block_align must be powers of two, such as 4096.
  • O_DIRECT requires aligned offsets and I/O lengths. batched_write rejects requests whose offset or total_len is not a multiple of the configured alignment; misaligned write buffers are copied through an aligned bounce buffer.
  • write_uring and batched_write take a logical payload length alongside the physical transfer length (write_uring's total_len defaults to payload_len; batched_write's payload_lens defaults to total_lens). They read only within the source buffer bounds, never modify it, and always write the padding region as zeroes. A bounce buffer is used when the source is shorter than the transfer length or its padding tail is not already zero, so a caller buffer whose tail is zero keeps the fixed-buffer zero-copy path.

Build

cd rust/raw_block
pip install maturin
maturin develop --release

Minimal Usage

from lmcache_rust_raw_block_io import RawBlockDevice

dev = RawBlockDevice("/dev/nvme0n1", True, use_odirect=True, alignment=4096)
dev.pwrite_from_buffer(offset=0, data=b"hello", total_len=4096)

buf = bytearray(4096)
dev.pread_into(offset=0, out=buf, payload_len=5, total_len=4096)

io_uring:

dev = RawBlockDevice(
    "/dev/nvme0n1",
    True,
    use_odirect=True,
    alignment=4096,
    io_engine="io_uring",
    iouring_queue_depth=256,
)

io_uring with io_uring_cmd (NVMe passthrough):

dev = RawBlockDevice(
    "/dev/ng0n1",  # Note: NVMe character device node
    True,
    use_odirect=False,
    alignment=4096,
    io_engine="io_uring",
    use_uring_cmd=True,
    iouring_queue_depth=256,
    max_data_transfer_size=131072,  # Optional: split large transfers
)

FDP Notes

FDP status can be queried from Python when use_uring_cmd=True:

status = dev.fetch_fdp_status()  # [(placement_id, ruh_id), ...]

For writes, omitting placement_id leaves the NVMe directive unset (dtype=0, dspec=0). NVMe default writes use the RUH mapping associated with Placement Identifier 0, so LMCache rejects explicit placement_id=0 at the RawBlockCore layer. The low-level status query reads the controller-reported 16-bit NRUHSD count.

MP Adapter Example

To use the MP adapter from lmcache server, pass a raw_block L2 adapter config:

lmcache server \
  --l1-size-gb 10 \
  --eviction-policy LRU \
  --l1-align-bytes 4096 \
  --l2-adapter '{
    "type": "raw_block",
    "device_path": "/dev/nvme0n1",
    "slot_bytes": 1048576,
    "block_align": 4096,
    "header_bytes": 4096,
    "meta_total_bytes": 268435456,
    "use_odirect": true,
    "io_engine": "io_uring",
    "num_store_workers": 2,
    "num_lookup_workers": 1,
    "num_load_workers": 4
  }'

Notes:

  • device_path should point to an unmounted raw block device or a dedicated file used only by LMCache.
  • For use_uring_cmd=true, device_path must use the NVMe character device node (e.g., /dev/ng0n1) instead of the block device node.
  • block_align must be a power of two. slot_bytes, header_bytes, and meta_total_bytes must be multiples of block_align.
  • With use_odirect=true, LMCache MP L1 alignment must be at least block_align.
  • Restart recovery uses the metadata checkpoint region on the same device.
  • Raw-block slot reclamation is driven by the shared/global L2 eviction controller or explicit delete() calls.
  • raw_block remains the adapter type for all supported engines.

Metadata

Release files for lmcache-rust-raw-block-io 0.5.7rc4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for lmcache-rust-raw-block-io 0.5.7rc4
File Actions
lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_x86_64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_aarch64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_x86_64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_aarch64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_x86_64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_aarch64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_x86_64.whl
lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details for lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_aarch64.whl

Total release size: 3.1 MB

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_x86_64.whl
Size 387.4 kB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9585fa4ba3bbb61123cbb639e2ccf2b2cdf25a5e67921d8126ec0ecf28e9a670
BLAKE2b-256 checksum
How to use checksums
5a48f1e5ea6144b4073e73aa7f67f0b8cc8037ecd376ad4f35e23de0a0c6b3cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_aarch64.whl
Size 384.8 kB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
45a387168e9b15c51bf6853569e4dc6203a5bd7e640ba5aefc85afadc5cec830
BLAKE2b-256 checksum
How to use checksums
6140ac317860edaf132aea2c406b85d515abfda04353dc500237a057a346d15a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_x86_64.whl
Size 388.2 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
eef000a476b5c5272532863d1b7c793e59b95c949d2cb81b45c001ac8006cdcd
BLAKE2b-256 checksum
How to use checksums
f1bc9a61678fe40cd88576125af7b299dcd8d479a0ad31035a423b3e14d7d30c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp312-cp312-manylinux_2_28_aarch64.whl
Size 386.0 kB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
af11f9add5947f0ce1dd69dcb5283b4b603d76c2a9423d96e4ab3ba3bfe86d3d
BLAKE2b-256 checksum
How to use checksums
f83954debefbfa2bb7fb46f90f0f8ac0168900e48500e075ecd91781435c460c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_x86_64.whl
Size 388.5 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8b53341469a3c9fc37dfd495a2122516b3e4d9ffb442439ae8bcc24dd923f883
BLAKE2b-256 checksum
How to use checksums
cc18fb0762a4f6aa3255226d6514f29c58db28120e7427fa3acdd7541b13cb04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp311-cp311-manylinux_2_28_aarch64.whl
Size 385.2 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
110ba2489ddc7f1ef9a9d58e349b98e1bd532aab1fe4477a70de49fbf2bafff2
BLAKE2b-256 checksum
How to use checksums
e2a583aa778920f71e514494ca6af9a4aacdf472051b504058fd08d442797a79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_x86_64.whl
Size 388.2 kB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7186742874b3d91360e51ffbdd6ea27c2ef49d4d924bbdb91f9e6ea5b2ed88f8
BLAKE2b-256 checksum
How to use checksums
8727c7b2b759cc5dbca26685e36a1d315f59db4139173d4e17e6a7e12a5d2531
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL lmcache_rust_raw_block_io-0.5.7rc4-cp310-cp310-manylinux_2_28_aarch64.whl
Size 385.4 kB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e5a41d40452341ff1f895245305b7c23a7a277c7a7ffc477d4c61128d2ad26ad
BLAKE2b-256 checksum
How to use checksums
dc202dbe462d4b5efbccaa2c4551cbe15347f5865ef0b78ca5c1e9f41962c577
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for lmcache-rust-raw-block-io 0.5.7rc4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for lmcache_rust_raw_block_io-0.5.7rc4-cp313-cp313-manylinux_2_28_x86_64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page