Skip to main content

trueno_ublk/
lib.rs

1//! trueno-ublk - GPU-accelerated ZRAM replacement using ublk
2//!
3//! This crate provides a ublk-based block device with SIMD and GPU-accelerated
4//! compression. It can be used as a drop-in replacement for Linux kernel ZRAM.
5//!
6//! # Features
7//!
8//! - **SIMD acceleration**: AVX2, AVX-512, and NEON support via trueno-zram-core
9//! - **GPU offload**: CUDA-based batch compression for large workloads
10//! - **Entropy routing**: Automatic algorithm selection based on data entropy
11//! - **Zero-page deduplication**: Efficient handling of all-zero pages
12//! - **zram-compatible stats**: Statistics format compatible with kernel zram
13//!
14//! # Example
15//!
16//! ```no_run
17//! use trueno_ublk::BlockDevice;
18//! use trueno_zram_core::{Algorithm, CompressorBuilder, PAGE_SIZE};
19//!
20//! // Create a compressor
21//! let compressor = CompressorBuilder::new()
22//!     .algorithm(Algorithm::Lz4)
23//!     .build()
24//!     .unwrap();
25//!
26//! // Create a 1GB block device
27//! let mut device = BlockDevice::new(1 << 30, compressor);
28//!
29//! // Write data
30//! let data = vec![0xAB; PAGE_SIZE];
31//! device.write(0, &data).unwrap();
32//!
33//! // Read back
34//! let mut buf = vec![0u8; PAGE_SIZE];
35//! device.read(0, &mut buf).unwrap();
36//! assert_eq!(data, buf);
37//!
38//! // Check stats
39//! let stats = device.stats();
40//! println!("Compression ratio: {:.2}x", stats.compression_ratio());
41//! ```
42
43#![allow(dead_code, unused_imports)] // Daemon has helper functions and re-exports for future use
44
45pub mod backend; // KERN-001: Kernel-cooperative tiered storage
46pub mod cleanup;
47pub mod daemon;
48pub mod device;
49pub mod duende_lifecycle; // DT-008: Duende daemon lifecycle management
50pub mod perf;
51pub mod stats;
52pub mod ublk;
53pub mod visualize; // VIZ-001: Renacer integration
54
55// Re-export commonly used types
56pub use backend::{BackendType, EntropyThresholds, StorageBackend, TieredStorageManager};
57pub use device::{BlockDevice, BlockDeviceStats, DeviceConfig, DeviceStats, UblkDevice};
58pub use ublk::{DaemonError, UblkCtrl, UblkDaemon};
59
60// Re-export duende-mlock for swap deadlock prevention (DT-007)
61pub use duende_mlock::{
62    is_locked as is_memory_locked, lock_all as lock_daemon_memory, MlockStatus,
63};
64
65// Re-export duende-core lifecycle management (DT-008)
66pub use duende_lifecycle::{create_daemon, setup_duende_signals, TruenoUblkDaemon};
67#[cfg(not(test))]
68pub use ublk::{run_daemon, run_daemon_batched, BatchedDaemonConfig};
69
70// Re-export batched page store for direct use
71pub use daemon::{spawn_flush_thread, BatchConfig, BatchedPageStore, BatchedPageStoreStats};
72
73// Re-export performance optimization module (PERF-001)
74// Note: Additional types (BatchCoalescer, NumaAllocator, etc.) are available
75// in perf submodules for future PERF-001 integration
76pub use perf::{HiPerfContext, PerfConfig, PollResult, PollingConfig, TenXConfig, TenXContext};
77
78// Re-export visualization module (VIZ-001)
79pub use visualize::TruenoCollector;