Commit Graph

37 Commits

Author SHA1 Message Date
Cruz Zhao 0cd30bc602
[Store] Introduce buffer pool for zero copy interfaces (#2095)
* [Store] Add native registered buffer pool

Add a native Python registered buffer pool for reusable zero-copy scratch buffers, with lease lifetime checks and docs/tests for the public API.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-09 01:29:45 +08:00
Ruoyu Qin 4719229d88
[TENT] feat: add per-request transport_hint for fine-grained transport selection in tent (#2339) 2026-06-08 21:15:05 +08:00
Hubert Zhang 42f74b407c
[TE] feat(engine): add attributes in python package for representing compile flags (#2342) 2026-06-07 23:31:17 +08:00
Copilot bc17c9b60a
Fix P2PHANDSHAKE in dual-NIC container setups via MC_RDMA_BIND_ADDRESS (#2280)
* Initial plan

* Add MC_RDMA_BIND_ADDRESS support for dual-NIC P2PHANDSHAKE setups

In dual-NIC environments where TCP and RDMA use separate interfaces,
P2PHANDSHAKE mode previously required using a single IP for both
TCP handshake and RDMA NIC paths, causing conflicts.

This change adds MC_RDMA_BIND_ADDRESS env var support:
- When set, RDMA NIC paths use the RDMA-reachable IP
- TCP P2P routing continues using the local_server_name IP
- Segment descriptors carry rdma_server_name for consistent NIC
  path construction on both sides
- P2P metadata exchange caches RDMA->TCP address mapping so
  subsequent handshakes resolve to TCP-routable addresses

* Changes before error encountered

Agent-Logs-Url: https://github.com/kvcache-ai/Mooncake/sessions/fc2826eb-a0ae-450f-b1f4-4ab94269d97a

* Apply dual-NIC (MC_RDMA_BIND_ADDRESS) support to TENT transport and update Chinese docs

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-01 16:49:58 +08:00
CAICAII 06ae8dd018
[Store] Add opt-in grouped object routing semantics (#2180) 2026-05-27 13:15:57 +08:00
Aoi 0fceaee292
[Docs]: fix docs config, remove autodoc2, archive zh docs (#2218) 2026-05-26 15:29:37 +08:00
Cruz Zhao d1312dce24
[Store] Add structured object store helper (#2140)
* [Python] Add structured object store helper

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-22 17:58:25 +08:00
LZW be93707047
[Store] feat: add graceful segment unmount APIs (#2065) 2026-05-16 18:21:22 +08:00
Kevin Flansburg 6ab98c7aca
[TE] Expose sendProbe via Python binding (#2088)
Exposes the existing TransferMetadata::sendProbe C++ method through the
TransferEngine pybind module as engine.send_probe(peer_server_name).
This enables SGLang's MooncakeKVManager to issue lightweight JSON-RPC
probes against peers, used to test whether a previously-blacklisted
mooncake_session_id has become reachable again so it can be removed
from the failed_sessions set.

Returns 0 on success, non-zero on failure (matching the C++ contract).
No behavior change for existing engine.* methods.

Tested:
- New Python unit tests in transfer_engine_initiator_test.py covering
  both the reachable-peer and unknown-peer cases.
- Manually validated end-to-end against SGLang's MooncakeKVManager.
2026-05-16 18:19:29 +08:00
LZW bd7ed21017
[Store] feat(store): add allocate-backed segment mount and unmount APIs (#2006) 2026-05-08 16:02:29 +08:00
LZW cced76c1e7
[Store] Add standalone HTTP mount_shm/unmount_shm API with reconfiguration support (#1928) 2026-04-28 19:40:43 +08:00
Cruz Zhao 02d1975ffd
[Store] Unified parallel tensor IO (#1389)
* [Store] add tensor object metadata and TP upsert APIs

Introduce explicit tensor object metadata for tensor read/write paths, add TP-aware tensor upsert wrappers, and update tests/docs for the new serialized layout.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-27 23:39:40 +08:00
Han Zhenyu 韩振宇 d3ace8fb20
[Store] Fix `with_hard_pin` failure in python API (#1873)
---------

Signed-off-by: 0oshowero0 <o0shower0o@outlook.com>
2026-04-12 23:22:23 +08:00
Cruz Zhao c3d428b902
[store] Add get_into_ranges to support Grouped Scatter RDMA Reads (#1717)
* [Store] add get_into_range and src_offset plumbing

Add single-key range read support to Mooncake Store:
- get_into_range: read [src_offset, src_offset+size) from an object
  into (buffer + dst_offset)
- submitRangeRead in TransferSubmitter with src_offset support
- Get() overload and TransferReadRange in Client
- DummyClient RPC path via get_into_range_dummy_helper
- PyClient virtual interface for get_into_range

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 18:31:09 +08:00
fatSheep 7d0978b9ca
[Store] Add Upsert API for in-place object updates (#1662)
Co-authored-by: fatSheep <tzh2005t@gmail.com>
2026-04-03 10:24:37 +08:00
Cruz Zhao 9351a54014
fix: correct TP zero-copy put semantics (#1685)
* fix: correct TP zero-copy put semantics

* fix: apply clang-format to store binding

* fix: default batch TP-from results to errors

* fix: return success for batch TP put-from

Ensure batch_put_tensor_with_tp_impl reports zero on fully successful shard writes so TP zero-copy Python tests don't fail with false INVALID_PARAMS results.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* tests: align TP zero-copy benchmark with get API signature

Keep the TP zero-copy benchmark focused on put-from semantics by removing an unsupported split_dim argument from batch_get_tensor_with_tp_into.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* trigger ci

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Xuchun Shang <xuchun.shang@linux.alibaba.com>
2026-04-01 09:45:53 +08:00
lujh 6105f9cda8
[Store] fix gmock bug and add batch remove API (#1756) 2026-03-31 16:55:41 +08:00
Cruz Zhao 0c310237d7
[Store] put tensor zero copy (#1480)
---------

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>
2026-03-13 22:59:43 +08:00
tang c724318217
[Store][Feature] copy and move client support (#1364)
* [Store]: add task executor feature with unit and executor test

Signed-off-by: Vincent Gao <vincentbo@linux.alibaba.com>

* [Store]: add some optimizations to task executor

Refactor the task_executor into the client_service and add a
task structure on the client side. Additionally, remove the
existence check in the execute function;
only retrying should be performed if replica allocation fails.

Signed-off-by: Vincent Gao <vincentbo@linux.alibaba.com>

* [Store]: get source replica from copyStart or moveStart api

* [Store]: call move or copy end if the target replica already exist to complete the replication task

* [Store]: use the max_retry_attempts in master side

* [Store]: add client integration test and set default max_retry_attempts to 10

* [Doc] update task api introduction

Signed-off-by: Vincent Gao <vincentbo@linux.alibaba.com>

* [Store] Set copy and move as private methods

Signed-off-by: Vincent Gao <vincentbo@linux.alibaba.com>

* [Doc]: change the default task max_retry_attempts to 10

* [Doc]: fix some description error

* [Store]: allocate the buffer size to be a multiple of 16MB

* [Store]: validate the replica is in local and directly construct slices from replica buffer address instead of copy the data to local buffer

* [Store]: change the validate logic to directly use transfer engine endpoint or local_hostname_.

* [Store] add e2e ci test for copy and move api

* [Store] refactor the client move and copy function

* [Store] fix the e2e test

* [Store] remove unused code

* [Store] add source field when build replica copy payload in the task_manager_test

* [Store] rename back to snake case for split_into_slices function and also remove hard code for client poll count

* [Store] revert mis deleted field when resolve conflicts

* [Store] change test to validate the real behaviour

* [Store] change the default task fetch size to 16

* [Doc]: change the replica copy/move sequence diagram

* [Store] add new split_into_slice method

* [Store] change the real client to use split_to_slice with buffer handle parameters

---------

Signed-off-by: Vincent Gao <vincentbo@linux.alibaba.com>
Co-authored-by: Vincent Gao <vincentbo@linux.alibaba.com>
2026-02-06 19:02:02 +08:00
uncharted-G 56241b8482
[TE] Support transfer in cuda stream via cudaLaunchHostFunc (#1448)
* feat(transfer-engine): support transfer on cuda

* rename async func

* only batch_transfer_on_cuda

* modify transfer_engine_py.cpp

* remove async pylib

* rename batch_transfer_write_on_cuda

* add log

* fix

* fix

* comment

* fix

* add ut

* fix

* update docs

* fix format

* fix comment

* add goto exit

* check length

---------

Co-authored-by: guohaiqing <guohaiqing02@moonshot.cn>
2026-01-28 17:15:20 +08:00
Ruoyu Qin b064a662e4
[Wheel] Remove the default buffer pre-allocation in initialize() (#1415)
* remove pre-allocate

* fix
2026-01-21 23:14:41 +08:00
Ruoyu Qin 914ed1d414
[DOC] Add batch API docs and examples for transfer engine (#1395) 2026-01-18 12:49:32 +08:00
ympcMark 971c99ddca
Split Mooncake PG out of Mooncake EP (#1387) 2026-01-16 13:39:37 +08:00
Stary 69663d117b
[TE] Add Task Completion Latency Tracking and Detailed Metrics Reporting (#1310)
* feat(metrics): add task completion latency tracking and detailed metrics reporting

- Add histogram metric for tracking transfer task completion latency with
configurable buckets
- Record task start time in submitTransfer and calculate latency upon completion
- Enhance metrics reporting thread to include latency distribution statistics
- Add skip_metrics parameter to getBatchTransferStatus to avoid double counting
- Update task structure to include start_time field for latency calculation

Signed-off-by: staryxchen <staryxchen@tencent.com>

* feat: add metrics support for submitTransferWithNotify

Signed-off-by: staryxchen <staryxchen@tencent.com>

* refactor(metrics): improve metrics recording logic with early returns

- Replace nested if statements with early returns using goto for cleaner flow
- Add boundary checks for task_id and validate start_time before recording
- Only record metrics for COMPLETED status and reset start_time to prevent
duplicates

Signed-off-by: staryxchen <staryxchen@tencent.com>

* refactor(metrics): simplify bucket count tracking logic

- Remove conditional checks for vector bounds by ensuring prev_bucket_counts_
size matches bucket_counts
- Consolidate previous snapshot update into a single assignment

Signed-off-by: staryxchen <staryxchen@tencent.com>

* fix(metrics): conditionally enable metrics collection

- Add metrics_enabled_ flag check before collecting metrics
- Wrap metrics collection logic with flag condition to avoid unnecessary
operations
- Ensure metrics are only recorded when explicitly enabled

Signed-off-by: staryxchen <staryxchen@tencent.com>

* docs: clarify Transfer Engine metrics limitation with TENT

- Add note about MC_TE_METRIC not being supported when using Transfer Engine
TENT in deployment guide
- Add same note to Python API reference for MC_TE_METRIC environment variable

Signed-off-by: staryxchen <staryxchen@tencent.com>

---------

Signed-off-by: staryxchen <staryxchen@tencent.com>
2025-12-31 15:47:11 +08:00
Cruz Zhao 0b149e6c13
[store] support batch pub and tp aware for pub_tensor (#1288)
* [store] support batch and tp aware for pub_tensor

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

* add test cases for pub tensor

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

* add docs for pub tensor

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

* fix description

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

* fix typo

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

* fix typo

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>

---------

Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>
2025-12-29 11:07:26 +08:00
Teng Ma 47025faf9c
[Doc] add more mooncake store APIs doc (#1237) 2025-12-23 01:20:09 +08:00
Xun Sun 832ae19492
[EP] Implement elastic scaling up (#1173) 2025-12-22 14:10:40 +08:00
Cruz Zhao 1a5983e756
[store] zero copy for get_tensor() and batch_get_tensor() (#1192) 2025-12-19 08:38:17 +08:00
Jianxin 38138f9136
[Doc] Hotfix: Remove duplicate docs (#1211) 2025-12-15 14:17:09 +08:00
Xuchun Shang fa8dc059c2
[Store] add tp awareness for get_tensor (#1127)
* add tp awareness for get_tensor
2025-12-11 11:12:44 +08:00
yejj 1840577d68
[Store] add pybind for get_replica_desc (#1121)
* add pybind for get_replica

* rename pybinb funcs name & update api doc

* fix spell problem
2025-12-04 15:45:52 +08:00
Chao Lei 2d3d02a0a8
[Store] Add APIs: batch_put_from_multi_buffers and batch_get_into_multi_buffers (#929)
Co-authored-by: youxiao <youxiao@huawei.com>
2025-10-16 11:17:23 +08:00
ykwd 8992a2ebba
fix(store): Check if Connecting Master Fails (#886) 2025-09-25 11:19:50 +08:00
JinYan Su 6d8aab2ef6
feat(store): disable auto discovery by default, require devices for RDMA (#877)
* feat(store): disable auto discovery by default, require rdma_devices for RDMA

* feat(client): support optional auto-discovery with default for RDMA

* update comment

* update doc

* update hello world
2025-09-23 20:44:22 +08:00
JinYan Su af4fb4d5d4
feat(store): support transfer engine p2phandshake (#852)
* feat(allocator): Add transport endpoint support for segment transfers

* refactor(Client): Replace segment_name with transport_endpoint in buffer descriptors and tests

* refactor(test): switch to in-proc master and remove external service management

* style: format code and adjust transfer task timeout

* feat(Client::MountSegment): set te_endpoint conditionally based on metadata_connstring for P2P mode

* Allow configuring default KV lease TTL via environment variable

Read DEFAULT_KV_LEASE_TTL environment variable at server startup and
parse as uint64_t value. This enables CI tests to override default
configuration without code changes.

Signed-off-by: xiaguan <751080330@qq.com>

* style: format CI config and add [[nodiscard]] to methods

Signed-off-by: xiaguan <751080330@qq.com>

* refactor(tests): remove local_hostname parameter and improve test helpers

The commit removes the unused local_hostname parameter from TransferSubmitter constructor, updates the associated initialization logic, and simplifies test code by introducing helper functions for segment creation. The changes improve code maintainability while preserving functionality.

* refactor(TransferSubmitter): Remove unused local_hostname_ member and validation check

* docs(store): update setup examples for p2p

---------

Signed-off-by: xiaguan <751080330@qq.com>
2025-09-22 16:30:15 +08:00
JinYan Su 51687e916e
docs(deployment): Add Mooncake Store deployment guide with configuration and metrics (#825) 2025-09-16 10:02:55 +08:00
Ruoyu Qin dedfbde5da
[Doc] Update docs for a better quick start (#814)
* add transfer engine python api

* add quick start

* add lmcache v1 integration

* update trace

* fix

* modify segment size
2025-09-06 11:16:42 +08:00