# MinIO MemKV RELEASE.2026-06-07T15-11-42Z

Released: 2026-06-07

Hardens the RDMA and NIXL data path under sustained, highly concurrent load and lifts a batched-write throughput ceiling. No protocol changes.

---

## Downloads

### Server Binary

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [memkv](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv) |
| Linux    | arm64        | [memkv](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv) |

### NIXL Plugin (for Dynamo / KVBM integrations)

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [libplugin_MEMKV.so](https://dl.min.io/aistor/memkv/release/linux-amd64/libplugin_MEMKV.so) |
| Linux    | arm64        | [libplugin_MEMKV.so](https://dl.min.io/aistor/memkv/release/linux-arm64/libplugin_MEMKV.so) |

### LD_PRELOAD Shim (for MLPerf-Storage kvcache workloads)

| Platform | Architecture | Download |
| -------- | ------------ | -------- |
| Linux    | amd64        | [libmemkv_preload.so](https://dl.min.io/aistor/memkv/release/linux-amd64/libmemkv_preload.so) |
| Linux    | arm64        | [libmemkv_preload.so](https://dl.min.io/aistor/memkv/release/linux-arm64/libmemkv_preload.so) |

### Packages

`.deb`, `.rpm`, and `.apk` packages bundle the server + both `.so` sidecars + the LMCache and sglang Python wheels into a single per-arch install.

| Format | Architecture | Download |
| ------ | ------------ | -------- |
| DEB    | amd64        | [memkv\_20260607151142.0.0_amd64.deb](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260607151142.0.0_amd64.deb) |
| DEB    | arm64        | [memkv\_20260607151142.0.0_arm64.deb](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260607151142.0.0_arm64.deb) |
| RPM    | amd64        | [memkv-20260607151142.0.0-1.x86_64.rpm](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv-20260607151142.0.0-1.x86_64.rpm) |
| RPM    | arm64        | [memkv-20260607151142.0.0-1.aarch64.rpm](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv-20260607151142.0.0-1.aarch64.rpm) |
| APK    | amd64        | [memkv\_20260607151142.0.0_x86_64.apk](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260607151142.0.0_x86_64.apk) |
| APK    | arm64        | [memkv\_20260607151142.0.0_aarch64.apk](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260607151142.0.0_aarch64.apk) |

After installing the deb/rpm, the Python plugin wheels land at `/usr/share/memkv/wheels/`:

```bash
pip install /usr/share/memkv/wheels/memkv_lmcache-*.whl
pip install /usr/share/memkv/wheels/memkv_sglang-*.whl
```

The NIXL plugin is auto-symlinked to `/opt/nvidia/nvda_nixl/lib/plugins/` when that directory exists (postinstall hook).

### Container Image

```bash
docker pull quay.io/minio/memkv:RELEASE.2026-06-07T15-11-42Z
docker pull quay.io/minio/memkv:latest
```

Container ships the server + the NIXL plugin (under `/usr/local/lib/plugins/`). The LD_PRELOAD shim and Python wheels are not included in the container image — use the deb/rpm for those.

### Verification

Each binary is signed with both minisign (preferred) and GPG; sha256sums are published alongside.

```bash
# minisign
minisign -Vm memkv -P RWTx5Zr1tiHQLwG9keckT0c45M3AGeHD6IvimQHpyRywVWGbP1aVSGav

# sha256
sha256sum -c memkv.sha256sum
```

---

## Changes since RELEASE.2026-06-04T21-53-48Z

### Performance Improvements

- Multi-entry batched writes now reach line rate. The persist pool was sized to one worker per drive (queue depth 1), capping large-block batched writes near 55% of line rate (~210 of ~389 Gbps on a single 400G rail); sizing it to a real per-drive queue depth lifts single-rail batched writes to ~384 Gbps and dual-rail to ~760 Gbps (~97% of 2×400G). The batching protocol is unchanged.

### Bug Fixes

- Fixed a DC Address-Handle leak that stalled all transfers under sustained load: handles were created per attach but never freed on a clean control-socket close, until the device refused to create more (`TcpAttach: failed to create AH`) and every DC transfer dropped, DRAM and GPU alike. Address Handles are now shared per client GID, bounding the live count by distinct clients.
- Fixed dropped writes once a NIXL batch fanned out past a single buffer: the plugin reused one memory key for every entry, so the server's read of an entry outside that region was rejected (`REM_ACCESS_ERR`). Each entry's key is now resolved from its own address and size.
- Fixed read failures from a first-touch registration race: concurrent threads touching the same client buffer could re-register a region and revoke a key already sent to the server, failing in-flight reads ("DC READ failed: status=10"). First-touch registration is now serialized per region; the steady-state path stays lock-free.

### Hardware / Compatibility

- GPUDirect RDMA requires PCIe ACS disabled. With ACS Request/Completion Redirect enabled, RDMA reads from GPU (VRAM) buffers fail (`REM_OP_ERR`) while writes still succeed — a one-sided failure easily mistaken for a software bug. The README now documents the `nvidia_peermem` and ACS-disable prerequisites; host-DRAM client buffers are unaffected.

---

## Documentation

- Hosted docs: <https://docs.min.io/memkv/>
- Embedded docs (in the binary): `memkv doc` serves the same site locally.

## Support

- Security disclosures: security@min.io
