ExpertSource

Trait ExpertSource 

Source
pub trait ExpertSource: Sync {
    // Required methods
    fn slot_layout(&self) -> SlotLayout;
    fn num_experts(&self) -> usize;
    fn read_expert(&self, layer: u32, expert: u32, dst: &mut [u8]) -> Result<()>;

    // Provided methods
    fn read_expert_range(
        &self,
        layer: u32,
        expert: u32,
        off: usize,
        dst: &mut [u8],
    ) -> Result<()> { ... }
    fn direct_segments(
        &self,
        layer: u32,
        expert: u32,
    ) -> Result<Option<Vec<DirectSeg>>> { ... }
    fn direct_file(&self, shard: usize) -> Option<&File> { ... }
}
Expand description

Anything the LRU can fill a slot from. The on-disk map implements it; the unit tests implement it in memory.

Required Methods§

Source

fn slot_layout(&self) -> SlotLayout

Source

fn num_experts(&self) -> usize

Source

fn read_expert(&self, layer: u32, expert: u32, dst: &mut [u8]) -> Result<()>

Fill dst (exactly slot_layout().bytes long) with expert expert of layer layer, in slot layout.

Provided Methods§

Source

fn read_expert_range( &self, layer: u32, expert: u32, off: usize, dst: &mut [u8], ) -> Result<()>

Fill dst with bytes off..off + dst.len() of the expert’s slot image, so one miss can be read by several threads at once. The default reads the whole expert into scratch; the on-disk map seeks.

Source

fn direct_segments( &self, layer: u32, expert: u32, ) -> Result<Option<Vec<DirectSeg>>>

The expert’s slot image as file ranges for O_DIRECT reads, or None when this source has no direct descriptor (the default): the staged miss path then reads through read_expert_range.

Source

fn direct_file(&self, shard: usize) -> Option<&File>

The O_DIRECT descriptor a DirectSeg names.

Implementors§