Repository navigation
v0.1.11
Highlight
🚀 New Features
- SSD Offload for SimpleStorage: Add optional node-local SSD offloading to
SimpleStorageto reduce long-lived host-memory pressure for workloads with large training samples. Each(field, global index)payload is placed independently according to its serialized size: samples at or above 1 MiB are stored on SSD, while smaller samples remain in host memory. The hybrid store preserves existing PUT, GET, CLEAR, overwrite, capacity, and checkpoint semantics without changing the public API. SSD files are isolated by run and storage unit and cleaned up on clear or graceful shutdown. The feature is disabled by default and can be enabled throughbackend.SimpleStorage.ssd_offload.enabledwith the offload directory configured bybackend.SimpleStorage.ssd_offload.path. In the reported two-node NVMe benchmark, SSD-backed E2E throughput remained within approximately 3.7–8.0% of the in-memory path for 1–4 MiB per-field samples. (#162)
🐛 Fixes & Improvements
-
Pooled and Reusable ZMQ Request Sockets: Replace the create-connect-send-receive-close cycle used for every RPC with reusable
ZMQSocketPoolinstances, avoiding repeated TCP/ZMTP handshakes and bounding socket growth under concurrency. Leases are exclusive so replies cannot be consumed by the wrong request, and any socket involved in a timeout, cancellation, or other failed request is discarded rather than returned to the pool. Pools are isolated by role, event loop or thread, and peer address, preventing unsafe socket reuse across execution contexts or after peer relocation.TQ_SOCKET_POOL_SIZEcontrols the per-peer concurrency and idle-socket cap, with a default of4. In the reported local 300-way concurrency test, peak sockets decreased from 300 to 4 while elapsed time decreased from 71 ms to 48 ms. (#167) -
Resilient Storage-Unit Requests and Accept-Queue Hardening: Recover automatically when a storage-unit request is lost in transit instead of failing the entire job after a receive timeout. Timed-out GETs and idempotent PUTs are retried over a fresh connection up to
TQ_SIMPLE_STORAGE_MAX_ATTEMPTStimes, defaulting to3; PUTs carrying a userdata_parserare intentionally not replayed because the parser may have side effects. The storage ROUTER backlog is also increased from ZMQ's default100to4096throughTQ_STORAGE_ZMQ_BACKLOG, reducing silent request loss when the TCP accept queue is saturated. New arrival counters and an optionalTQ_ACCEPT_PROBE_INTERVALkernel-level accept-queue probe improve diagnosis by distinguishing requests lost before arrival from requests that arrived but did not complete. (#171, #172) -
Storage Proxy Peer Filtering and Worker Resilience: Prevent arbitrary TCP/ZMQ traffic from reaching and terminating the storage-unit request worker. The storage proxy now forwards only peers using recognized TransferQueue storage-manager or metrics-collector identities. Undecodable frames from an otherwise valid peer are handled inside the worker's error boundary and receive an explicit error response instead of terminating the request loop and leaving future clients blocked until timeout. (#168)
-
Explicit Concurrent-Clear Key-Miss Handling: Introduce
StorageKeyNotFoundError, exported fromtransfer_queue, so callers can distinguish the expected race wherekv_clearremoves data after metadata has been resolved but before it is fetched. The error type is preserved across the ZMQ request path instead of being flattened into a genericRuntimeError, and this expected concurrent condition is logged at DEBUG rather than ERROR. Other failures, such as requesting an unknown field, continue to surface as errors. Large routing-table dumps in failure logs are also replaced with a compact storage-unit count. (#160) -
Updated Mooncake CI Coverage and Documentation: Refresh the Mooncake version used by CI and update the project README with the latest project information. (#161, #170, #174)
What's Changed
- [chore] Bump version from 0.1.10 to 0.1.11.dev0 by @0oshowero0 in #159
- [fix] Do not log an expected concurrent-clear key miss as an error by @huniu20 in #160
- [CI] Update Mooncake version in CI by @0oshowero0 in #161
- [fix] Reject foreign ZMQ peers at the storage proxy by @huniu20 in #168
- [doc] Update
READMEby @0oshowero0 in #170 - [perf, fix] Pool and reuse ZMQ request sockets by @OutstanderWang in #167
- [fix] Retry a lost storage-unit request instead of failing the job by @adoda in #171
- [chore] Update README by @0oshowero0 in #174
- [fix] Fix to avoid request dropping in the accept queue by @OutstanderWang in #172
- [feat] simple storage support ssd offload by @xupinjie in #162
- [chore] Bump version from 0.1.11.dev0 to 0.1.11 by @0oshowero0 in #177
New Contributors
Full Changelog: v0.1.10...v0.1.11