# MinIO MemKV RELEASE.2026-06-12T15-56-28Z

Released: 2026-06-19

Stops the RDMA path from silently falling back to TCP on standard
1500-byte Ethernet RoCE fabrics. The client previously hardcoded a
4096-byte path MTU; on a fabric that negotiates a 1024 active MTU those
oversized packets were dropped and the connection quietly downgraded.
The MTU is now validated against the port's active MTU and refused with
an actionable error on mismatch. 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\_20260612155628.0.0_amd64.deb](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260612155628.0.0_amd64.deb) |
| DEB    | arm64        | [memkv\_20260612155628.0.0_arm64.deb](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260612155628.0.0_arm64.deb) |
| RPM    | amd64        | [memkv-20260612155628.0.0-1.x86_64.rpm](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv-20260612155628.0.0-1.x86_64.rpm) |
| RPM    | arm64        | [memkv-20260612155628.0.0-1.aarch64.rpm](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv-20260612155628.0.0-1.aarch64.rpm) |
| APK    | amd64        | [memkv\_20260612155628.0.0_x86_64.apk](https://dl.min.io/aistor/memkv/release/linux-amd64/memkv_20260612155628.0.0_x86_64.apk) |
| APK    | arm64        | [memkv\_20260612155628.0.0_aarch64.apk](https://dl.min.io/aistor/memkv/release/linux-arm64/memkv_20260612155628.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-12T15-56-28Z
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-12T05-44-50Z

### Bug Fixes

- Fixed a silent TCP downgrade on standard 1500-byte Ethernet RoCE fabrics. The client hardcoded the DC path MTU to 4096 and the server trusted `config.rdma.mtu` unbounded, so on a port that negotiates a 1024 active MTU the oversized data packets were dropped, the requester exhausted its retries (`IBV_WC_RETRY_EXC_ERR`), and the client fell back to TCP. The fault only surfaced cross-node — single-node loopback never put a packet on the wire. The configured MTU is now resolved and validated against the port's active MTU, refusing any value that exceeds it with an actionable error that points at the RoCEv2 runbook instead of silently clamping or stalling.

### Hardware / Compatibility

- Added a matching `rdma.mtu` knob on the client (`MEMKV_RDMA_MTU`, default 4096) so the client, server, and fabric agree on a single path MTU and the DC queue pairs use the validated value. Configure the fabric for the MTU you want rather than relying on the code to adapt.
- Added a RoCEv2 deployment runbook covering end-to-end fabric setup — switch PFC/ECN/DSCP, host DCB, jumbo-frame MTU, MemKV configuration, and verification. See the **Operate → RoCEv2** docs.

---

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