Fix: Only create large stack size if enough memory

Small boxes do not have enough memory to create a large stack

Conversely we want a large stack size for large boxes with a very highly
nested directory structure.

Version: New version
This commit is contained in:
andy.boot
2022-08-25 08:56:30 +01:00
parent c148cd9044
commit c363e5ff8b
3 changed files with 61 additions and 7 deletions
+19 -5
View File
@@ -12,6 +12,7 @@ mod utils;
use crate::cli::build_cli;
use std::collections::HashSet;
use std::process;
use sysinfo::{System, SystemExt};
use self::display::draw_it;
use clap::Values;
@@ -19,6 +20,7 @@ use config::get_config;
use dir_walker::{walk_it, WalkData};
use filter::get_biggest;
use filter_type::get_all_file_types;
use rayon::ThreadPoolBuildError;
use regex::Regex;
use std::cmp::max;
use std::path::PathBuf;
@@ -154,11 +156,7 @@ fn main() {
by_filecount,
ignore_hidden: config.get_ignore_hidden(&options),
};
// Larger stack size to handle cases with lots of nested directories
rayon::ThreadPoolBuilder::new()
.stack_size(usize::pow(1024, 3))
.build_global()
.unwrap();
let _rayon = init_rayon();
let iso = config.get_iso(&options);
let (top_level_nodes, has_errors) = walk_it(simplified_dirs, walk_data);
@@ -191,3 +189,19 @@ fn main() {
)
}
}
fn init_rayon() -> Result<(), ThreadPoolBuildError> {
let large_stack = usize::pow(1024, 3);
// Warning: Creating System is slow, takes ~ 100ms
let s = System::new();
let available = s.get_available_memory() * 1024;
if available > large_stack.try_into().unwrap() {
// Larger stack size to handle cases with lots of nested directories
rayon::ThreadPoolBuilder::new()
.stack_size(large_stack)
.build_global()
} else {
Ok(())
}
}