From c3dace84bd4606ff329189717e64b1ba9d220c70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Tue, 7 Sep 2021 23:21:49 +0200 Subject: [PATCH 1/2] QEMU: Enable xsaveopt cpu feature --- .github/workflows/test.yml | 4 ++-- .gitlab-ci.yml | 8 ++++---- README.md | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 159a056d6..ba9a5ed1a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,7 +57,7 @@ jobs: - name: Test dev profile run: | qemu-system-x86_64 -display none -smp 1 -m 128M -serial stdio \ - -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand \ + -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand \ -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader \ -initrd target/x86_64-unknown-hermit/debug/rusty_demo - name: Build release profile @@ -66,7 +66,7 @@ jobs: - name: Test release profile run: | qemu-system-x86_64 -display none -smp 1 -m 128M -serial stdio \ - -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand \ + -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand \ -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader \ -initrd target/x86_64-unknown-hermit/release/rusty_demo - name: Build httpd with DHCP support diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 81a003fb4..01b813474 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -87,10 +87,10 @@ test:qemu: script: - lscpu - kvm-ok - - qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm - - qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm - - qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm - - qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr,rdrand -enable-kvm + - qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand -enable-kvm + - qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/debug/rusty-loader -initrd target/x86_64-unknown-hermit/debug/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand -enable-kvm + - qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand -enable-kvm + - qemu-system-x86_64 -display none -smp 2 -m 64M -serial stdio -kernel loader/target/x86_64-unknown-hermit-loader/release/rusty-loader -initrd target/x86_64-unknown-hermit/release/rusty_demo -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr,rdrand -enable-kvm tags: - privileged diff --git a/README.md b/README.md index 4acd7c159..4e0cc80d7 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ Afterwards, the loader is stored in `target/x86_64-unknown-hermit-loader/debug/` As final step, the unikernel application `app` can be booted with following command: ```bash -qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel path_to_loader/rusty-loader -initrd path_to_app/app -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr +qemu-system-x86_64 -display none -smp 1 -m 64M -serial stdio -kernel path_to_loader/rusty-loader -initrd path_to_app/app -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr ``` It is important to enable the processor features _fsgsbase_ and _rdtscp_ because it is a prerequisite to boot RustyHermit. @@ -202,7 +202,7 @@ Currently, RustyHermit does only support network interfaces through [virtio](htt To use it, you have to start RustyHermit in Qemu with following command: ```bash -$ qemu-system-x86_64 -cpu qemu64,apic,fsgsbase,rdtscp,xsave,fxsr \ +$ qemu-system-x86_64 -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr \ -enable-kvm -display none -smp 1 -m 1G -serial stdio \ -kernel path_to_loader/rusty-loader \ -initrd path_to_app/app \ From e7fd9623dd3083237ec9beb53e11332a6b8035ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Tue, 7 Sep 2021 23:28:38 +0200 Subject: [PATCH 2/2] Upgrade to latest QEMU --- .github/workflows/test.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ba9a5ed1a..3ca02f9d1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,15 +39,11 @@ jobs: if: ${{ matrix.os == 'macos-latest' }} run: | brew update - brew tap-new --no-git hermitcore/homebrew - brew extract --version 6.0.0 qemu hermitcore/homebrew - brew install hermitcore/homebrew/qemu@6.0.0 - brew install nasm + brew install qemu nasm - name: Install QEMU, NASM, GNU make (windows) if: ${{ matrix.os == 'windows-latest' }} run: | - choco install nasm make - choco install qemu --version 2021.5.5 + choco install qemu nasm make echo "C:\Program Files\qemu" >> $GITHUB_PATH echo "C:\Program Files\NASM" >> $GITHUB_PATH - name: Build loader