Skip to content

Commit 59ef8b2

Browse files
author
sam cheng
committed
Add device usage indicator
1 parent 9f14ac8 commit 59ef8b2

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

oxcache/src/device.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ impl Device for Zoned {
221221
}
222222

223223
fn evict(&self, locations: EvictTarget, cache: Arc<Cache>) -> io::Result<()> {
224+
println!("Current device usage is at: {}", self.get_use_percentage());
225+
224226
match locations {
225227
EvictTarget::Chunk(mut chunk_locations) => {
226228
// Check all zones are the same, this isn't a
@@ -304,6 +306,14 @@ impl Device for Zoned {
304306
fn get_block_size(&self) -> usize {
305307
self.nvme_config.logical_block_size as usize
306308
}
309+
310+
fn get_use_percentage(&self) -> f32 {
311+
let (zones, _) = &*self.zones;
312+
let zones = zones.lock().unwrap();
313+
let total_chunks = (self.config.chunks_per_zone * self.config.num_zones) as f32;
314+
let available_chunks = zones.get_num_available_chunks() as f32;
315+
(total_chunks - available_chunks) / total_chunks
316+
}
307317
}
308318

309319
impl BlockInterface {
@@ -445,4 +455,11 @@ impl Device for BlockInterface {
445455
fn get_block_size(&self) -> usize {
446456
self.nvme_config.logical_block_size as usize
447457
}
458+
459+
fn get_use_percentage(&self) -> f32 {
460+
let state = &*self.state.lock().unwrap();
461+
let total_chunks = (self.chunks_per_zone * self.num_zones) as f32;
462+
let available_chunks = state.active_zones.get_num_available_chunks() as f32;
463+
(total_chunks - available_chunks) / total_chunks
464+
}
448465
}

oxcache/src/eviction.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub enum EvictionPolicyWrapper {
1515
Chunk(ChunkEvictionPolicy),
1616
}
1717

18+
#[derive(Debug)]
1819
pub enum EvictTarget {
1920
Chunk(Vec<ChunkLocation>),
2021
Zone(Vec<usize>),

oxcache/src/zone_state/zone_list.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ impl ZoneList {
176176
chunks_available: remaining,
177177
});
178178
}
179+
180+
pub fn get_num_available_chunks(&self) -> usize {
181+
self.open_zones.iter().fold(0, |avail, zone| {
182+
avail + zone.chunks_available
183+
}) + self.free_zones.len() * self.chunks_per_zone
184+
}
179185
}
180186

181187
#[cfg(test)]

0 commit comments

Comments
 (0)