Skip to content

[Feature Request]: Will DRAM-CXL-SSD tiered storage be supported in Mooncake #1670

@qiuweit7

Description

@qiuweit7

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 / rdmaStorageLevel::RAM
    • cxlStorageLevel::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::RAMallocateRAM() method
    • StorageLevel::CXLallocateCXL() 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...

  • Make sure you already searched for relevant issues and read the documentation

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions