From a45e1c8a950fb593d7b14cc3b1901bacd76c8986 Mon Sep 17 00:00:00 2001 From: Tie Liu Date: Wed, 12 Jul 2023 15:39:41 +0800 Subject: [PATCH] refactoring process config --- bin/daemon.rs | 66 +++++++++++++++++++++++++++++------------ tests/test_sysboostd.rs | 7 +++++ 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/bin/daemon.rs b/bin/daemon.rs index 32d87af..29f829f 100644 --- a/bin/daemon.rs +++ b/bin/daemon.rs @@ -68,7 +68,7 @@ fn is_symlink(path: &PathBuf) -> bool { } fn db_add_link(path: &String) -> i32 { - // symlink app.link to app + // symlink app.link to app, different modes correspond to different directories let file_name = Path::new(path).file_name().unwrap().to_str().unwrap(); let link_path = format!("{}{}.link", SYSBOOST_DB_PATH, file_name); let ret_e = UnixFs::symlink(&path, &link_path); @@ -166,8 +166,11 @@ fn gen_app_rto(conf: &RtoConfig) -> i32 { fn bolt_optimize_so(conf: &RtoConfig) -> i32 { let mut args: Vec = Vec::new(); + // TODO: support profile let mut ret = 1; + // change layout of basic blocks in a function args.push("-reorder-blocks=ext-tsp".to_string()); + // Sorting functions by using hfsort+ a Hash-based function sorting algorithm args.push("-reorder-functions=hfsort+".to_string()); args.push("-split-functions=true".to_string()); args.push("-split-all-cold".to_string()); @@ -359,6 +362,46 @@ fn find_libs(conf: &RtoConfig, elf: &Elf) -> Vec { } } +//TODO: Supports hybrid mode, for example, use bolt to optimize dynamic library and then use static to merge them +fn sysboost_core_process(conf: &RtoConfig) -> i32 { + match conf.mode.as_str() { + "bolt" => { + let ret = bolt_optimize_so(&conf); + if ret != 0 { + log::error!("Error: bolt mode start fault."); + return ret; + } + }, + "static" | "static-nolibc" | "share" => { + let ret = gen_app_rto(&conf); + if ret != 0 { + log::error!("Error: generate rto start fault."); + return ret; + } + }, + _ => { + log::info!("Warning: read elf file fault, please check config."); + // handle other cases + } + } + + let ret = db_add_link(&conf.elf_path); + if ret != 0 { + log::error!("Error: db add link fault."); + return ret; + } + + let ret = set_app_aot_flag(&conf.elf_path, true); + if ret != 0 { + log::error!("Error: set app aot flag fault."); + return ret; + } + return ret; +} + +// TODO: exit() abnormal +// TODO: exit() normal + fn process_config(path: PathBuf) -> Option { let conf_e = read_config(&path); let mut conf = match conf_e { @@ -394,25 +437,9 @@ fn process_config(path: PathBuf) -> Option { let path_str = path.clone().into_os_string().into_string().unwrap(); conf.watch_paths.push(path_str); - if conf.mode == "bolt" { - let ret = bolt_optimize_so(&conf); - if ret != 0 { - return None; - } - } - - let ret = gen_app_rto(&conf); - if ret != 0 { - return None; - } - - let ret = db_add_link(&conf.elf_path); - if ret != 0 { - return None; - } - - let ret = set_app_aot_flag(&conf.elf_path, true); + let ret = sysboost_core_process(&conf); if ret != 0 { + log::error!("Error: db add link fault."); return None; } @@ -561,6 +588,7 @@ fn insmod_ko(path: &String) { pub fn daemon_loop() { insmod_ko(&KO_PATH.to_string()); + // TODO: clean env loop { start_service(); } diff --git a/tests/test_sysboostd.rs b/tests/test_sysboostd.rs index 26e4e8e..b96773a 100644 --- a/tests/test_sysboostd.rs +++ b/tests/test_sysboostd.rs @@ -9,6 +9,8 @@ // See the Mulan PSL v2 for more details. // Create: 2023-5-17 + +// test all sysboostd modes and features #[cfg(test)] mod tests { use std::fs; @@ -17,6 +19,8 @@ mod tests { use std::io::Write; use std::process::Command; + // Normal Scenarios + // 1. try to start sysboostd, if sysboostd fn is_sysboostd_running() -> bool { // Start sysboostd service if it's not running let output = Command::new("systemctl").args(&["is-active", "sysboost.service"]).output().expect("Failed to execute command"); @@ -143,4 +147,7 @@ mod tests { stderr.trim() ); } + + // Unnormal Scenarios + // 1、When sysboostd break } -- Gitee