From 6ffa241c9418e448ac28a6c078982d87e11e76f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Fri, 1 Dec 2023 15:49:45 +0100 Subject: [PATCH 1/2] ci: specify amount of vCPUs via `--smp [CORES]` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Kröning --- xtask/src/cargo_build.rs | 2 +- xtask/src/ci/qemu.rs | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/xtask/src/cargo_build.rs b/xtask/src/cargo_build.rs index 0570a51458..585b8294f5 100644 --- a/xtask/src/cargo_build.rs +++ b/xtask/src/cargo_build.rs @@ -16,7 +16,7 @@ pub struct CargoBuild { /// Space or comma separated list of features to activate. #[arg(long)] - features: Vec, + pub features: Vec, } pub trait CmdExt { diff --git a/xtask/src/ci/qemu.rs b/xtask/src/ci/qemu.rs index 9b7cbd558a..e51497c4fe 100644 --- a/xtask/src/ci/qemu.rs +++ b/xtask/src/ci/qemu.rs @@ -28,8 +28,8 @@ pub struct Qemu { netdev: Option, /// Create multiple vCPUs. - #[arg(long)] - smp: bool, + #[arg(long, default_value_t = 1)] + smp: usize, /// Enable the `virtiofsd` virtio-fs vhost-user device daemon. #[arg(long)] @@ -46,7 +46,14 @@ pub enum NetworkDevice { } impl Qemu { - pub fn run(self) -> Result<()> { + pub fn run(mut self) -> Result<()> { + if self.smp > 1 { + self.build + .cargo_build + .features + .push("hermit/smp".to_string()); + } + self.build.run()?; let sh = crate::sh()?; @@ -63,7 +70,7 @@ impl Qemu { .args(&["-kernel", format!("../hermit-loader-{arch}").as_ref()]) .args(self.machine_args()) .args(self.cpu_args()) - .args(self.smp_args()) + .args(&["-smp", &self.smp.to_string()]) .args(self.memory_args()) .args(self.netdev_args()) .args(self.virtiofsd_args()); @@ -171,14 +178,6 @@ impl Qemu { } } - fn smp_args(&self) -> &'static [&'static str] { - if self.smp { - &["-smp", "4"] - } else { - &["-smp", "1"] - } - } - fn memory(&self) -> usize { let mut memory = 32usize; if self.build.cargo_build.artifact.arch == Arch::Riscv64 { @@ -190,9 +189,7 @@ impl Qemu { if self.netdev.is_some() { memory *= 4; } - if self.smp { - memory *= 4; - } + memory *= self.smp; if self.build.cargo_build.artifact.arch == Arch::Aarch64 { memory = memory.max(256); } From 6ebd36d6159d7e24f496256d34e4196f0a7fb06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Fri, 1 Dec 2023 15:55:08 +0100 Subject: [PATCH 2/2] ci: test everything with SMP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Kröning --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba67377bc6..44a224314f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -131,6 +131,7 @@ jobs: package: [rusty_demo, httpd, testudp, hello_world] netdev: [none, virtio-net-pci, rtl8139] profile: [dev, release] + smp: [1, 4] exclude: - arch: riscv64 package: httpd @@ -141,6 +142,12 @@ jobs: arch: aarch64 - package: hello_world arch: riscv64 + # https://github.com/hermit-os/kernel/issues/995 + - package: hello_world + smp: 4 + # https://github.com/hermit-os/kernel/issues/737 + - arch: aarch64 + smp: 4 # rtl8139 support does not build on aarch64 - arch: aarch64 netdev: rtl8139 @@ -224,6 +231,7 @@ jobs: cargo xtask ci qemu --arch ${{ matrix.arch }} --package ${{ matrix.package }} + --smp ${{ matrix.smp }} ${{ matrix.flags }} ${{ matrix.netdev == 'rtl8139' && '--features rtl8139' || '' }} ${{ matrix.netdev != 'none' && format('--netdev {0}', matrix.netdev) || '' }}