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 flowey::node::prelude::*;
9
10flowey_request! {
11    pub struct Params {
12        pub target: CommonTriple,
13        pub profile: CommonProfile,
14        pub root_dir: PathBuf,
15        pub profiles: Vec<String>,
16        pub vm_sizes_json: Option<String>,
17        pub parameters_json: Option<String>,
18        pub runtime_archive: Option<PathBuf>,
19        pub build_only: bool,
20        pub done: WriteVar<SideEffect>,
21    }
22}
23
24new_simple_flow_node!(struct Node);
25
26impl SimpleFlowNode for Node {
27    type Request = Params;
28
29    fn imports(ctx: &mut ImportCtx<'_>) {
30        ctx.import::<crate::build_openvmm::Node>();
31        ctx.import::<crate::build_vmm_perf::Node>();
32        ctx.import::<crate::_jobs::setup_and_run_vmm_perf::Node>();
33    }
34
35    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
36        let Params {
37            target,
38            profile,
39            root_dir,
40            profiles,
41            vm_sizes_json,
42            parameters_json,
43            runtime_archive,
44            build_only,
45            done,
46        } = request;
47
48        let openvmm = ctx.reqv(|v| crate::build_openvmm::Request {
49            params: crate::build_openvmm::OpenvmmBuildParams {
50                target: target.clone(),
51                profile,
52                features: [crate::build_openvmm::OpenvmmFeature::Tpm].into(),
53            },
54            openvmm: v,
55        });
56        let runner = ctx.reqv(|v| crate::build_vmm_perf::Request {
57            target: target.clone(),
58            profile,
59            vmm_perf: v,
60        });
61
62        if build_only {
63            ctx.emit_side_effect_step(
64                [openvmm.into_side_effect(), runner.into_side_effect()],
65                [done],
66            );
67        } else {
68            ctx.req(crate::_jobs::setup_and_run_vmm_perf::Params {
69                label: "vmm-perf".into(),
70                target,
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}