Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KVM not supported in GitHub Action Runner testing infrastructure. This should be fixed. #787

Open
BobbyRBruce opened this issue Jan 19, 2024 · 0 comments
Labels
cpu-kvm gem5's KVM CPU enhancement github gem5 files necessary for GitHub integration. Found in ".github" tests gem5's Testing Infrastructure

Comments

@BobbyRBruce
Copy link
Member

The GitHub Action Runners run inside VMs hosted on servers owned by UC Davis and UW Madison. The GitHub Action Runners are services which run jobs inside the VM, typically inside Docker containers. Ergo, a gem5 compilation and run is executed within a Docker container, created by a GitHub Action Runner, in a VM, on a host machine. Right now this works but the gem5 instances running inside this Docker containers cannot utilized KVM. This means we can't test using KVM with gem5 and KVM-based tests cannot be run on our testing infrastructure.

In this Issue I outline what I attempted to fix this issue and thoughts on moving forward.


Note: all this was done X86 hosts with KVM enabled. I cannot state whether or not ARM KVM would work differently based on these instrucitons.

I attempted to implement KVM by updating the GitHub Action runners with commit 3783aff. It does two simple steps:

Uses the cpu-checker utility's kvm-ok command to see if the VM allows for kvm.
If kvm-ok states that KVM is permitted then it is enabled by the APT installation of virt-manager, libvirt-daemon-system, virtinst, libvirt-clients, and bridge-utils; the enabling and starting of the libvirtd service, and adding the vagrant user to the kvm and vagrant groups.
docker run --device /dev/kvm -v$(pwd):/work -w /work --rm ubuntu:22.04 bash -c "apt update -y && apt install -y cpu-checker && kvm-ok" is run to see if a Docker container running in the VM can use KVM. If this is the case then the GitHub Action Runner is created with the kvm label.

The limitation with this approach is it requires any docker command run in the VM (via the GitHub Action Runner) to create docker containers with the --device /dev/kvm argument. Fortunately it is possible to soecify this in the GitHub Action Workflow file.

PR #473 tested doing this.

From here I can't remember the exact backs-and-forths i did here but based on the current contents of PR #473, and the status of its tests, I found that the kvm-ok command suggests KVM is enabled inside the docker container, but we cannot directly run gem5 KVM scripts. The following error is returned when trying to run ./build/ALL/gem5.opt configs/example/gem5_library/x86-ubuntu-run-with-kvm-no-perf.py:

info: Standard input is not a terminal, disabling listeners.
info: Using default config
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x48) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc1) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc2) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x186) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x187) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010200) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010202) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010204) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010206) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010208) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc001020a) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010201) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010203) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010205) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010207) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010209) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc001020b) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x12) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x11) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d01) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d00) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000000) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000001) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000020) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000021) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000022) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000023) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000100) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000101) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000102) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000103) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000104) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000105) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000003) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000002) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000010) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000080) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000b0) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000073) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000106) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000107) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000108) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000ff) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f1) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f2) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f3) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f4) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f5) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d02) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d03) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d04) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d06) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d07) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x3b) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x6e0) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x10a) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x345) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x1a0) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x9e) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x34) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xce) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x140) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc001011f) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x1fc) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x8b) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010015) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d05) unsupported by gem5. Skipping.
src/dev/x86/pc.cc:117: warn: Don't know what interrupt to clear for console.
src/arch/x86/kvm/x86_cpu.cc:563: warn: cs limit (0xffffffff) and g (0) combination is illegal.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x48) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc1) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc2) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x186) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x187) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010200) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010202) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010204) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010206) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010208) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc001020a) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010201) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010203) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010205) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010207) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc0010209) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0xc001020b) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x12) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x11) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d01) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d00) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000000) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000001) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000020) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000021) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000022) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000023) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000100) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000101) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000102) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000103) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000104) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000105) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000003) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000002) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000010) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000080) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000b0) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000073) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000106) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000107) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x40000108) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000ff) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f1) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f2) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f3) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f4) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x400000f5) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d02) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d03) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d04) unsupported by gem5. Skipping.
src/arch/x86/kvm/x86_cpu.cc:1653: warn: kvm-x86: MSR (0x4b564d06) unsupported by gem5. Skipping.

My current guess is we may need to install the KVM dependencies, and perhaps user groups, inside the docker (like in step [2.] above for the VM), though I don't know for sure and no longer have the bandwidth to continue looking into this.

Right now we still have several kvm tagged Github Action Runners via the 3783aff commit so #473 can still be used/extended to test stragegies on getting this working

@BobbyRBruce BobbyRBruce added enhancement tests gem5's Testing Infrastructure cpu-kvm gem5's KVM CPU github gem5 files necessary for GitHub integration. Found in ".github" labels Jan 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cpu-kvm gem5's KVM CPU enhancement github gem5 files necessary for GitHub integration. Found in ".github" tests gem5's Testing Infrastructure
Projects
None yet
Development

No branches or pull requests

1 participant