- your fleet serves many models or tenants and prompt reuse spans nodes
- you want warm-hit latency close to L1 without provisioning a large shared L2
- your cluster has high-bandwidth interconnect (InfiniBand, RoCE, or fast TCP)
Prerequisites
P2P requires the following minimum versions:| Component | Minimum version |
|---|---|
| Tensormesh Operator helm chart | 0.5.0 |
LMCache Operator (lmcache/lmcache-operator) | v0.5.0 |
LMCache vLLM (lmcache/vllm-openai) | v0.5.0 |
Configuration
Enable P2P by settingengine.p2p.enabled: true in your values file. The chart handles the rest
— no manual CLI flags needed.
Networking options
Option 1: Host networking (easiest to get started)
The simplest approach ishostNetwork: true. The engine pod binds directly to the host’s network
namespace, so peers can reach each other without any CNI overlay or NAT.
Because the pod shares the host’s port space, move the default server ports to high values to
avoid conflicts with other services on the node:
my-values.yaml
When
hostNetwork is true, the operator automatically sets dnsPolicy: ClusterFirstWithHostNet
so cluster DNS still works inside the engine pod.Option 2: HCA passthrough (coming soon)
Coming soon — recommended for InfiniBand environments.
Option 3: SR-IOV (coming soon)
Coming soon — recommended for RoCE environments.
NetworkAttachmentDefinition.
Option 4: Macvlan (coming soon)
Coming soon — recommended for RoCE environments.
Option 5: TCP (non-RDMA environments)
If your cluster does not have InfiniBand or RoCE hardware, P2P still works over TCP. Performance is lower than RDMA but still faster than recomputing prefills from scratch. Use the same host-networking configuration from Option 1 and setUCX_TLS to TCP-only transports:
- development and testing clusters
- cloud environments without RDMA-capable instances
- clusters where the CNI overlay provides sufficient bandwidth
Helm values reference
| Value | Type | Default | Description |
|---|---|---|---|
engine.p2p.enabled | bool | false | Enable P2P KV transfer between engine pods. |
engine.p2p.port | int | 8500 | Port the transfer channel advertises to peers. |
engine.p2p.l1AlignBytesOverwrite | int | 65536 | L1 buffer alignment in bytes. 64 KiB recommended for P2P. |
engine.spec.hostNetwork | bool | false | Run the pod in the host’s network namespace. |
engine.spec.server.port | int | 5555 | gRPC server port. Move to a high port when using hostNetwork. |
engine.spec.server.httpPort | int | 8080 | HTTP health/admin port. Move to a high port when using hostNetwork. |
Verification
After deploying with P2P enabled, verify that the engine pods started correctly and the P2P transfer channel is active.Check the engine pod is running
Query the engine’s L2 backends
Curl the engine’s HTTP endpoint to list the active L2 backends. When P2P is enabled, a P2P backend should appear alongside any configured L2 (Redis, filesystem, etc.):The L2 backends endpoint and its response format may change in future releases. This section
will be updated as the API stabilizes.
Common mistakes
- Forgetting to move
server.portandserver.httpPortto high ports when usinghostNetwork, causing bind failures on ports already in use by the host - Not setting
engine.p2p.enabled: true—hostNetworkalone does not turn on P2P - Using the default P2P port (
8500) onhostNetworkwhen another service already binds to it - Setting
UCX_TLSto an RDMA transport (e.g.rc_verbs) without the corresponding device passthrough — UCX will fail to open the transport and the engine will not start

