Describe your feature request
DRAM-CXL-SSD Tiered Storage Implementation
Feature Description
This submission aims to implement the DRAM-CXL-SSD tiered storage core capability for Mooncake Store: the design retains hot data in ultra-low-latency DRAM, places warm data in a shareable CXL memory pool, and writes cold data to high-capacity SSD.
We are currently planning to merge this functionality into the community codebase. This Issue is submitted to synchronize the changes and solicit community feedback.
Core Changes Overview
1. Client Initialization with Multi-Protocol Support
Files:
mooncake-store/src/real_client.cpp
mooncake-store/src/client_service.cpp
Changes:
- Added
DispatchProtocols logic during client creation to implement protocol-to-storage level mapping:
tcp / rdma → StorageLevel::RAM
cxl → StorageLevel::CXL
- Mount RAM Segment and CXL Segment separately according to storage levels.
2. Mount Implementation
Files:
mooncake-store/src/client_service.cpp
mooncake-transfer-engine/src/transfer_engine_impl.cpp
Changes:
- Adjusted
transfer_engine memory registration logic (registerLocalMemory) to perform memory registration with the appropriate transport layer based on protocol selection.
3. Level Allocation Strategy
File: mooncake-store/include/allocation_strategy.h
Changes:
- Added
LevelAllocationStrategy class for tiered storage scenarios
- Route allocation requests based on
ReplicateConfig.preferred_storage_level:
StorageLevel::RAM → allocateRAM() method
StorageLevel::CXL → allocateCXL() method
// Select allocation method based on specified storage level
ReplicateConfig config;
config.preferred_storage_level = StorageLevel::CXL; // or StorageLevel::RAM
if (config.preferred_storage_level == StorageLevel::RAM) {
return allocateRAM(...);
} else if (config.preferred_storage_level == StorageLevel::CXL) {
return allocateCXL(...);
}
4. Protocol-Matched Data Transfer
Files:
mooncake-store/src/transfer_task.cpp
mooncake-transfer-engine/src/multi_transport.cpp
Changes:
-
Added protocol handling logic to the submitTransfer interface
-
Select protocol based on replica's storage level:
// Select protocol based on replica storage level
std::string proto = level_protocols_[replica.get_storage_level()];
submitTransfer(requests, proto);
-
Modified selectTransport to check whether the target segment's protocol list contains the requested proto, thereby obtaining the corresponding transport.
Before submitting a new issue...
Describe your feature request
DRAM-CXL-SSD Tiered Storage Implementation
Feature Description
This submission aims to implement the DRAM-CXL-SSD tiered storage core capability for Mooncake Store: the design retains hot data in ultra-low-latency DRAM, places warm data in a shareable CXL memory pool, and writes cold data to high-capacity SSD.
We are currently planning to merge this functionality into the community codebase. This Issue is submitted to synchronize the changes and solicit community feedback.
Core Changes Overview
1. Client Initialization with Multi-Protocol Support
Files:
mooncake-store/src/real_client.cppmooncake-store/src/client_service.cppChanges:
DispatchProtocolslogic duringclientcreation to implement protocol-to-storage level mapping:tcp/rdma→StorageLevel::RAMcxl→StorageLevel::CXL2. Mount Implementation
Files:
mooncake-store/src/client_service.cppmooncake-transfer-engine/src/transfer_engine_impl.cppChanges:
transfer_enginememory registration logic (registerLocalMemory) to perform memory registration with the appropriate transport layer based on protocol selection.3. Level Allocation Strategy
File:
mooncake-store/include/allocation_strategy.hChanges:
LevelAllocationStrategyclass for tiered storage scenariosReplicateConfig.preferred_storage_level:StorageLevel::RAM→allocateRAM()methodStorageLevel::CXL→allocateCXL()method4. Protocol-Matched Data Transfer
Files:
mooncake-store/src/transfer_task.cppmooncake-transfer-engine/src/multi_transport.cppChanges:
Added protocol handling logic to the
submitTransferinterfaceSelect protocol based on replica's storage level:
Modified
selectTransportto check whether the target segment's protocol list contains the requestedproto, thereby obtaining the correspondingtransport.Before submitting a new issue...