Skip to main content

flowey_lib_hvlite/_jobs/
local_build_and_run_vmm_perf.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Build and run VMM.Perf locally.
5
6use crate::common::CommonProfile;
7use crate::common::CommonTriple;
8use crate::run_vmm_perf::VmmPerfProfile;
9use flowey::node::prelude::*;
10
11flowey_request! {
12    pub struct Params {
13        pub target: CommonTriple,
14        pub profile: CommonProfile,
15        pub root_dir: PathBuf,
16        pub profiles: Vec<VmmPerfProfile>,
17        pub vm_sizes_json: Option<String>,
18        pub parameters_json: Option<String>,
19        pub runtime_archive: Option<PathBuf>,
20        pub build_only: bool,
21        pub done: WriteVar<SideEffect>,
22    }
23}
24
25new_simple_flow_node!(struct Node);
26
27impl SimpleFlowNode for Node {
28    type Request = Params;
29
30    fn imports(ctx: &mut ImportCtx<'_>) {
31        ctx.import::<crate::build_openvmm::Node>();
32        ctx.import::<crate::build_vmm_perf::Node>();
33        ctx.import::<crate::_jobs::setup_and_run_vmm_perf::Node>();
34    }
35
36    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
37        let Params {
38            target,
39            profile,
40            root_dir,
41            profiles,
42            vm_sizes_json,
43            parameters_json,
44            runtime_archive,
45            build_only,
46            done,
47        } = request;
48
49        let openvmm = ctx.reqv(|v| crate::build_openvmm::Request {
50            params: crate::build_openvmm::OpenvmmBuildParams {
51                target: target.clone(),
52                profile,
53                features: [crate::build_openvmm::OpenvmmFeature::Tpm].into(),
54            },
55            openvmm: v,
56        });
57        let runner = ctx.reqv(|v| crate::build_vmm_perf::Request {
58            target,
59            profile,
60            vmm_perf: v,
61        });
62
63        if build_only {
64            ctx.emit_side_effect_step(
65                [openvmm.into_side_effect(), runner.into_side_effect()],
66                [done],
67            );
68        } else {
69            ctx.req(crate::_jobs::setup_and_run_vmm_perf::Params {
70                label: "vmm-perf".into(),
71                runner,
72                openvmm,
73                profiles,
74                vm_sizes_json,
75                parameters_json,
76                runtime_archive: runtime_archive.map(ReadVar::from_static),
77                root_dir: Some(ReadVar::from_static(root_dir)),
78                hugetlb_2mb_overcommit_pages: None,
79                done,
80            });
81        }
82
83        Ok(())
84    }
85}