# MinIO MemKV RELEASE.2026-06-04T21-53-48Z

Released: 2026-06-05

Makes the TCP data path a true fast path with a per-server connection pool and pipelined batching, and makes RDMA over Converged Ethernet (RoCEv2) genuinely lossless on DSCP-trust fabrics. Also includes storage and connection-stability fixes. 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\_20260604215348.0.0_amd64.deb](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260604215348.0.0_amd64.deb) |
| DEB    | arm64        | [memkv\_20260604215348.0.0_arm64.deb](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260604215348.0.0_arm64.deb) |
| RPM    | amd64        | [memkv-20260604215348.0.0-1.x86_64.rpm](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv-20260604215348.0.0-1.x86_64.rpm) |
| RPM    | arm64        | [memkv-20260604215348.0.0-1.aarch64.rpm](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv-20260604215348.0.0-1.aarch64.rpm) |
| APK    | amd64        | [memkv\_20260604215348.0.0_x86_64.apk](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260604215348.0.0_x86_64.apk) |
| APK    | arm64        | [memkv\_20260604215348.0.0_aarch64.apk](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260604215348.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-04T21-53-48Z
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-05-29T07-28-46Z

### New Features

- TCP is now a first-class fast path: the client opens a per-server pool of sockets, round-robins data across them, and pipelines batch reads/writes as one continuous window. Sized via the new `num_connections` knob (default 8).
- Lossless RoCEv2: MemKV auto-detects the routable RoCEv2 GID, derives the traffic class (DSCP) from the kernel DCB configuration, and sets the address-handle service level to the lossless PFC priority, so RDMA rides the lossless queue instead of best-effort.
- New `rdma.traffic_class` and `rdma.service_level` config fields, with `MEMKV_RDMA_TRAFFIC_CLASS` and `MEMKV_RDMA_SERVICE_LEVEL` overrides; `0` means auto-detect.
- jemalloc is now an optional build feature (default on); `--no-default-features` falls back to the system allocator for ASan/heaptrack diagnostic builds.

### Performance Improvements

- TCP write throughput on a 2×400G rig went from ~3.5 Gbps (single socket) to ~128 Gbps with an 8–16 socket pool; 1 MiB reads reach ~182 Gbps.
- TCP batch reads now deliver hits directly into the caller's buffer instead of fetching and discarding.
- The write saturation guard is now O(1) (cached capacity counters) instead of walking the entire slot index on every put, and is skipped on idempotent re-puts.

### Bug Fixes

- TCP sessions are re-attached after a primary-socket reconnect; previously a stale session caused every batch read/write to that server to fail silently, which KV-cache callers saw as misses (full recompute) and dropped writes.
- Slot allocation is now atomic per key, stopping storage chain leaks under concurrent same-key writes that drained the slot pool to a false "no free slots" exhaustion and could crash the server on a torn chain.
- Fixed a Helm chart templating issue in the deployment chart.

### Hardware / Compatibility

- NIXL is pinned to v1.2.0 (runtime, nixlbench, and plugin headers from one tagged ref). The plugin-discovery filename `libplugin_MEMKV.so` is unchanged; Dynamo / KVBM users should redownload the plugin (or reinstall the deb/rpm).
- Lossless RoCEv2 auto-detection requires a DSCP-trust fabric with a lossless PFC priority and matching host DCB configuration. Without it, traffic stays best-effort (functional, not lossless); pin the class explicitly via the config/env knobs if auto-detection cannot read the fabric settings.

---

## 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
