yykv-allocator 0.0.1

Memory and storage allocator for yykv
Documentation

yykv-allocator (Media-Aware Page Allocator)

yykv-allocator is the physical space manager of the YYKV storage engine, responsible for efficient page allocation and management on bare-metal devices. It perceives the characteristics of the underlying physical media and optimizes the storage layout accordingly.

Core Features

🧠 Media-Aware Allocation

Automatically adjusts the logical page size based on the device's MediumType to match the hardware's optimal IO unit:

  • NVM / NVMe SSD: Default 4KB pages, matching the high-concurrency small IO characteristics of modern controllers.
  • SATA SSD: Default 8KB pages, balancing write amplification and addressing efficiency.
  • HDD: Default 256KB pages, significantly reducing mechanical arm seek times.

🛡️ Physical Alignment Guarantee

Ensures that the physical offset corresponding to each allocated PageId strictly complies with physical sector alignment requirements, supporting lossless transmission in Direct IO mode.

🔄 Page Reclamation & Reuse

Maintains a free page bitmap or list, supporting efficient allocation and lazy reclamation of logical pages.

Core Design

  • PageId: Globally unique logical page identifier.
  • Physical Offset: PageId * PageSize.
  • Device Alignment: Mandatory alignment with the physical drive's sector size.

Usage Example

use yykv_allocator::PageAllocator;
use yykv_hal::DeviceInfo;
use yykv_types::MediumType;

// Simulate NVMe device info
let info = DeviceInfo {
    medium_type: MediumType::NvmeSSD,
    sector_size: 512,
    total_capacity: 1024 * 1024 * 1024, // 1GB
};

let mut allocator = PageAllocator::new(&info);

// Allocate a new page
let page_id = allocator.allocate();
let size = allocator.page_size(); // 4096

println!("Allocated PageId: {}, Size: {}", page_id, size);

Performance Considerations

  • Zero IO Allocation: Allocator metadata is cached in memory as much as possible to avoid extra disk IO in the critical path.
  • Defragmentation: Background support for automatic fragmentation and merging of free pages.