From 30aabef29a8bb9f3bf3aae88a4997b4fbaea95bc Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Mon, 28 Sep 2026 19:19:23 +0000 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=A0=87=E5=87=86=E9=A2=84=E8=AE=BE=20?= =?UTF-8?q?min=5Fpool=5Fsize=20=E9=99=8D=E6=A1=A3=E8=87=B3=201=20=E6=B6=88?= =?UTF-8?q?=E9=99=A4=E5=8D=95=20VM=20CLI=20=E5=90=AF=E5=8A=A8=E5=9B=9E?= =?UTF-8?q?=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_cli/src/bench/leak_detect.rs | 11 ++++++----- crates/oxide_kernel/src/kernel/config.rs | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/crates/oxide_cli/src/bench/leak_detect.rs b/crates/oxide_cli/src/bench/leak_detect.rs index dcdf2fd1..9b8423b3 100644 --- a/crates/oxide_cli/src/bench/leak_detect.rs +++ b/crates/oxide_cli/src/bench/leak_detect.rs @@ -744,14 +744,15 @@ pub fn run_mem_kernel_lifetime() -> ExitCode { /// 进程级启动五段分解度量:专用 kernel(`KernelConfig::minimal()`,同 /// `kernel_lifetime` 口径,不污染 bench 共享 kernel),每轮重建 kernel 与池 /// 模拟新进程,连测五段——① `KernelCore::new`(kernel 初始化)② -/// `VmPool::new`(池构造)③ 首次 `pool.spawn()`(首个 Vm 构造)④ 固定微源 +/// `VmPool::new`(池构造,含同步预热 min_size 个 Vm)③ 首次 `pool.spawn()` +///(首次 spawn,命中预热池近零成本)④ 固定微源 /// `oxide_parser::parse` 加 `Compiler::new().compile`(parse 加 compile)⑤ /// 首次 `vm.run`(执行),打印各段毫秒加合计,三轮取中位。 /// /// # 边界与前提 /// - 启动是单次事件非序列,不进 `report_series` 泄漏判据; -/// - “首个 Vm 构造”段可与 `builtin_world_build` 用例的每 Vm 构造成本锚对照 -/// (同 debug 口径);偏差大先查 harness 污染再疑用例。 +/// - 池构造段含 min_size 个 Vm 的预热成本,可与 `builtin_world_build` 用例 +/// 的每 Vm 构造成本锚对照(同 debug 口径);偏差大先查 harness 污染再疑用例。 /// /// # 副作用 /// - 不改引擎执行路径;每轮 kernel 与池在轮末 drop,无跨轮状态。 @@ -767,11 +768,11 @@ pub fn run_mem_startup_breakdown() -> ExitCode { let kernel = KernelCore::new(config.clone()); let t1 = Instant::now(); - // 池构造:空池,min_size 参数当前仅作预留不预热。 + // 池构造:同步预热 min_size 个 Vm,预热成本计入本段。 let pool = VmPool::new(Arc::clone(&kernel), config.min_pool_size, config.max_pool_size); let t2 = Instant::now(); - // 首个 Vm 构造:池空,spawn 走 grow 分支全量构造。 + // 首次 spawn:命中预热池,近零成本。 let mut guard = pool.spawn(); let t3 = Instant::now(); diff --git a/crates/oxide_kernel/src/kernel/config.rs b/crates/oxide_kernel/src/kernel/config.rs index 5a9572bb..c6889a42 100644 --- a/crates/oxide_kernel/src/kernel/config.rs +++ b/crates/oxide_kernel/src/kernel/config.rs @@ -44,10 +44,10 @@ impl KernelConfig { } } - /// 标准配置:默认 VM 池大小。 + /// 标准配置:默认 VM 池大小,池构造时同步预热 min_pool_size 个 Vm。 pub fn standard() -> Self { Self { - min_pool_size: 8, + min_pool_size: 1, max_pool_size: Some(32), perm_interner_max_entries: None, max_steps: None,