-
Notifications
You must be signed in to change notification settings - Fork 604
Description
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.cpp
Changes:
- Added
DispatchProtocolslogic duringclientcreation to implement protocol-to-storage level mapping:tcp/rdma→StorageLevel::RAMcxl→StorageLevel::CXL
- Mount RAM Segment and CXL Segment separately according to storage levels.
2. Mount Implementation
Files:
mooncake-store/src/client_service.cppmooncake-transfer-engine/src/transfer_engine_impl.cpp
Changes:
- Adjusted
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.h
Changes:
- Added
LevelAllocationStrategyclass for tiered storage scenarios - Route allocation requests based on
ReplicateConfig.preferred_storage_level:StorageLevel::RAM→allocateRAM()methodStorageLevel::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.cppmooncake-transfer-engine/src/multi_transport.cpp
Changes:
-
Added protocol handling logic to the
submitTransferinterface -
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
selectTransportto check whether the target segment's protocol list contains the requestedproto, thereby obtaining the correspondingtransport.
Before submitting a new issue...
- Make sure you already searched for relevant issues and read the documentation