Add a sanity check on the threshold
This commit is contained in:
parent
b28221d4c2
commit
1d4ca06c96
25
src/main.rs
25
src/main.rs
@ -18,6 +18,9 @@ use vga_buffer; // required for custom panic handler
|
|||||||
use vga_buffer::{print, println};
|
use vga_buffer::{print, println};
|
||||||
use x86_64;
|
use x86_64;
|
||||||
|
|
||||||
|
use core::cmp::Ord;
|
||||||
|
use core::ops::Sub;
|
||||||
|
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
use dendrobates_tinctoreus_azureus::hlt_loop;
|
use dendrobates_tinctoreus_azureus::hlt_loop;
|
||||||
|
|
||||||
@ -35,6 +38,14 @@ fn panic(info: &PanicInfo) -> ! {
|
|||||||
hlt_loop();
|
hlt_loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn distance<T: Sub<Output = T> + Ord>(a: T, b: T) -> T {
|
||||||
|
if a > b {
|
||||||
|
a - b
|
||||||
|
} else {
|
||||||
|
b - a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
entry_point!(kernel_main);
|
entry_point!(kernel_main);
|
||||||
|
|
||||||
// Kernel entry point
|
// Kernel entry point
|
||||||
@ -98,14 +109,20 @@ fn kernel_main(boot_info: &'static BootInfo) -> ! {
|
|||||||
}
|
}
|
||||||
println!();
|
println!();
|
||||||
|
|
||||||
cache_utils::calibration::calibrate_access();
|
let threshold_access_p = cache_utils::calibration::calibrate_access();
|
||||||
cache_utils::calibration::calibrate_flush();
|
let threshold_flush_p = cache_utils::calibration::calibrate_flush();
|
||||||
cache_utils::prefetcher::enable_prefetchers(false);
|
cache_utils::prefetcher::enable_prefetchers(false);
|
||||||
serial_println!("Prefetcher disabled");
|
serial_println!("Prefetcher disabled");
|
||||||
cache_utils::calibration::calibrate_access();
|
let threshold_access = cache_utils::calibration::calibrate_access();
|
||||||
cache_utils::calibration::calibrate_flush();
|
let threshold_flush = cache_utils::calibration::calibrate_flush();
|
||||||
serial_println!("Please compare histograms for sanity");
|
serial_println!("Please compare histograms for sanity");
|
||||||
|
|
||||||
|
if distance(threshold_access_p, threshold_access) > 10
|
||||||
|
|| distance(threshold_flush_p, threshold_flush) > 2
|
||||||
|
{
|
||||||
|
panic!("Inconsistent thresholds");
|
||||||
|
}
|
||||||
|
|
||||||
// Calibration
|
// Calibration
|
||||||
// disable pretechers
|
// disable pretechers
|
||||||
// Calibrate hit / miss rdtsc threshold
|
// Calibrate hit / miss rdtsc threshold
|
||||||
|
Loading…
Reference in New Issue
Block a user