Add capability to get precise free size for userspace

This commit is contained in:
Hui, Chunyang 2023-08-15 03:56:48 +00:00 committed by volcano
parent 69cb68ced3
commit 1e8584af10
3 changed files with 11 additions and 2 deletions

@ -14,7 +14,7 @@ impl MemInfoINode {
impl ProcINode for MemInfoINode {
fn generate_data_in_bytes(&self) -> vfs::Result<Vec<u8>> {
let total_ram = USER_SPACE_VM_MANAGER.get_total_size();
let free_ram = current!().vm().get_free_size();
let free_ram = USER_SPACE_VM_MANAGER.get_precise_free_size();
Ok(format!(
"MemTotal: {} kB\n\
MemFree: {} kB\n\

@ -26,7 +26,7 @@ pub fn do_sysinfo() -> Result<sysinfo_t> {
let info = sysinfo_t {
uptime: time::up_time::get().unwrap().as_secs() as i64, // Duration can't be negative
totalram: USER_SPACE_VM_MANAGER.get_total_size() as u64,
freeram: current!().vm().get_free_size() as u64,
freeram: USER_SPACE_VM_MANAGER.get_precise_free_size() as u64,
procs: table::get_all_processes().len() as u16,
mem_unit: 1,
..Default::default()

@ -46,6 +46,15 @@ impl VMManager {
self.internal().free_manager.free_size()
}
pub fn get_precise_free_size(&self) -> usize {
let internal = self.internal();
internal.free_manager.free_size()
+ internal
.chunks
.iter()
.fold(0, |acc, chunks| acc + chunks.free_size())
}
pub fn verified_clean_when_exit(&self) -> bool {
let internal = self.internal();
internal.chunks.len() == 0 && internal.free_manager.free_size() == self.range.size()