Struct devicemapper::CacheDevPerformance
source · pub struct CacheDevPerformance {
pub read_hits: u64,
pub read_misses: u64,
pub write_hits: u64,
pub write_misses: u64,
pub demotions: u64,
pub promotions: u64,
pub dirty: u64,
}Expand description
Cache dev performance data
Fields§
§read_hits: u64Number of read hits
read_misses: u64Number of read misses
write_hits: u64Number of write hits
write_misses: u64Number of write misses
demotions: u64Number of demotions
promotions: u64Number of promotions
dirty: u64Number of dirty blocks
Implementations§
source§impl CacheDevPerformance
impl CacheDevPerformance
sourcepub fn new(
read_hits: u64,
read_misses: u64,
write_hits: u64,
write_misses: u64,
demotions: u64,
promotions: u64,
dirty: u64
) -> CacheDevPerformance
pub fn new(
read_hits: u64,
read_misses: u64,
write_hits: u64,
write_misses: u64,
demotions: u64,
promotions: u64,
dirty: u64
) -> CacheDevPerformance
Construct a new CacheDevPerformance struct
Examples found in repository?
src/cachedev.rs (lines 404-412)
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464
fn from_str(status_line: &str) -> DmResult<CacheDevStatus> {
if status_line.starts_with("Error") {
return Ok(CacheDevStatus::Error);
}
if status_line.starts_with("Fail") {
return Ok(CacheDevStatus::Fail);
}
let status_vals = get_status_line_fields(status_line, 17)?;
let usage = {
let meta_block_size = status_vals[0];
let meta_usage = status_vals[1].split('/').collect::<Vec<_>>();
let cache_block_size = status_vals[2];
let cache_usage = status_vals[3].split('/').collect::<Vec<_>>();
CacheDevUsage::new(
Sectors(parse_value(meta_block_size, "meta block size")?),
MetaBlocks(parse_value(meta_usage[0], "used meta")?),
MetaBlocks(parse_value(meta_usage[1], "total meta")?),
Sectors(parse_value(cache_block_size, "cache block size")?),
DataBlocks(parse_value(cache_usage[0], "used cache")?),
DataBlocks(parse_value(cache_usage[1], "total cache")?),
)
};
let performance = CacheDevPerformance::new(
parse_value(status_vals[4], "read hits")?,
parse_value(status_vals[5], "read misses")?,
parse_value(status_vals[6], "write hits")?,
parse_value(status_vals[7], "write misses")?,
parse_value(status_vals[8], "demotions")?,
parse_value(status_vals[9], "promotions")?,
parse_value(status_vals[10], "dirty")?,
);
let num_feature_args: usize = parse_value(status_vals[11], "number of feature args")?;
let core_args_start_index = 12usize + num_feature_args;
let feature_args: Vec<String> = status_vals[12..core_args_start_index]
.iter()
.map(|x| (*x).to_string())
.collect();
let (policy_start_index, core_args) =
CacheDev::parse_pairs(core_args_start_index, &status_vals)?;
let policy = status_vals[policy_start_index].to_string();
let (rest_start_index, policy_args) =
CacheDev::parse_pairs(policy_start_index + 1, &status_vals)?;
let cache_metadata_mode = match status_vals[rest_start_index] {
"rw" => CacheDevMetadataMode::Good,
"ro" => CacheDevMetadataMode::ReadOnly,
val => {
return Err(make_unexpected_value_error(
rest_start_index + 1,
val,
"cache metadata mode",
));
}
};
let needs_check = match status_vals[rest_start_index + 1] {
"-" => false,
"needs_check" => true,
val => {
return Err(make_unexpected_value_error(
rest_start_index + 1,
val,
"needs check",
));
}
};
Ok(CacheDevStatus::Working(Box::new(
CacheDevWorkingStatus::new(
usage,
performance,
feature_args,
core_args,
policy,
policy_args,
cache_metadata_mode,
needs_check,
),
)))
}