Add some warm up and fix some output related issues + make the cpuid leaf 4 availale as an util
This commit is contained in:
parent
f599b74ef3
commit
5c6c607c8f
@ -0,0 +1,5 @@
|
|||||||
|
use cache_utils::cache_info::get_cache_info;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
println!("{:#?}", get_cache_info());
|
||||||
|
}
|
@ -36,7 +36,7 @@ pub struct CacheInfo {
|
|||||||
pub level: u8,
|
pub level: u8,
|
||||||
pub self_init: bool,
|
pub self_init: bool,
|
||||||
pub fully_assoc: bool,
|
pub fully_assoc: bool,
|
||||||
pub core_for_cache: u16,
|
pub maxID_for_cache: u16,
|
||||||
pub core_in_package: u16,
|
pub core_in_package: u16,
|
||||||
pub cache_line_size: u16,
|
pub cache_line_size: u16,
|
||||||
pub physical_line_partition: u16,
|
pub physical_line_partition: u16,
|
||||||
@ -64,7 +64,7 @@ impl CacheInfo {
|
|||||||
let level: u8 = (cr.eax >> 5 & 0x7) as u8;
|
let level: u8 = (cr.eax >> 5 & 0x7) as u8;
|
||||||
let self_init = (cr.eax >> 8 & 0x1) != 0;
|
let self_init = (cr.eax >> 8 & 0x1) != 0;
|
||||||
let fully_assoc = (cr.eax >> 9 & 0x1) != 0;
|
let fully_assoc = (cr.eax >> 9 & 0x1) != 0;
|
||||||
let core_for_cache = (cr.eax >> 14 & 0xfff) as u16 + 1;
|
let maxID_for_cache = (cr.eax >> 14 & 0xfff) as u16 + 1;
|
||||||
let core_in_package = (cr.eax >> 26 & 0x3f) as u16 + 1;
|
let core_in_package = (cr.eax >> 26 & 0x3f) as u16 + 1;
|
||||||
let cache_line_size = (cr.ebx & 0xfff) as u16 + 1;
|
let cache_line_size = (cr.ebx & 0xfff) as u16 + 1;
|
||||||
let physical_line_partition = (cr.ebx >> 12 & 0x3ff) as u16 + 1;
|
let physical_line_partition = (cr.ebx >> 12 & 0x3ff) as u16 + 1;
|
||||||
@ -79,7 +79,7 @@ impl CacheInfo {
|
|||||||
level,
|
level,
|
||||||
self_init,
|
self_init,
|
||||||
fully_assoc,
|
fully_assoc,
|
||||||
core_for_cache,
|
maxID_for_cache,
|
||||||
core_in_package,
|
core_in_package,
|
||||||
cache_line_size,
|
cache_line_size,
|
||||||
physical_line_partition,
|
physical_line_partition,
|
||||||
|
@ -12,7 +12,7 @@ pub enum Verbosity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
use crate::calibration::Verbosity::{Debug, RawResult, Thresholds};
|
use crate::calibration::Verbosity::{Debug, NoOutput, RawResult, Thresholds};
|
||||||
use alloc::vec;
|
use alloc::vec;
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
use core::cmp::min;
|
use core::cmp::min;
|
||||||
@ -157,8 +157,9 @@ pub fn calibrate_flush(
|
|||||||
cache_line_size: usize,
|
cache_line_size: usize,
|
||||||
verbose_level: Verbosity,
|
verbose_level: Verbosity,
|
||||||
) -> Vec<(usize, Vec<(usize, usize)>, usize)> {
|
) -> Vec<(usize, Vec<(usize, usize)>, usize)> {
|
||||||
println!("Calibrating cflush...");
|
if verbose_level > NoOutput {
|
||||||
|
println!("Calibrating cflush...");
|
||||||
|
}
|
||||||
let mut ret = Vec::new();
|
let mut ret = Vec::new();
|
||||||
// Allocate a target array
|
// Allocate a target array
|
||||||
// TBD why size, why the position in the array, why the type (usize)
|
// TBD why size, why the position in the array, why the type (usize)
|
||||||
@ -284,9 +285,10 @@ pub fn calibrate_flush(
|
|||||||
threshold = (i, hit_histogram[i] + miss_histogram[i]);
|
threshold = (i, hit_histogram[i] + miss_histogram[i]);
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
if verbose_level > NoOutput {
|
||||||
println!("Threshold {}", threshold.0 * CFLUSH_BUCKET_SIZE);
|
println!("Threshold {}", threshold.0 * CFLUSH_BUCKET_SIZE);
|
||||||
println!("Calibration done.");
|
println!("Calibration done.");
|
||||||
|
}
|
||||||
|
|
||||||
ret.push((
|
ret.push((
|
||||||
i as usize,
|
i as usize,
|
||||||
|
@ -71,9 +71,11 @@ pub fn main() {
|
|||||||
|
|
||||||
match sched_setaffinity(Pid::from_raw(0), &core) {
|
match sched_setaffinity(Pid::from_raw(0), &core) {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
|
calibrate_flush(m, 64, Verbosity::NoOutput);
|
||||||
calibrate_flush(m, 64, Verbosity::Thresholds);
|
calibrate_flush(m, 64, Verbosity::Thresholds);
|
||||||
sched_setaffinity(Pid::from_raw(0), &old).unwrap();
|
sched_setaffinity(Pid::from_raw(0), &old).unwrap();
|
||||||
println!("Iteration {}...ok ", i);
|
println!("Iteration {}...ok ", i);
|
||||||
|
eprintln!("Iteration {}...ok ", i);
|
||||||
}
|
}
|
||||||
Err(Sys(Errno::EINVAL)) => {
|
Err(Sys(Errno::EINVAL)) => {
|
||||||
println!("skipping");
|
println!("skipping");
|
||||||
|
Loading…
Reference in New Issue
Block a user