mirror of
https://github.com/JakeHillion/scx.git
synced 2024-11-27 20:00:23 +00:00
c730e0558f
Instead of downloading a precompiled sched-ext enabled kernel from the Ubuntu ppa, fetch the latest kernel directly from the sched-ext git repository and recompile it on-the-fly using virtme-ng. This allows to get rid of the Ubuntu ppa dependency, take out from the equation potential Ubuntu-specific patches, and ensures testing all the schedulers with the most up-to-date sched-ext kernel (that should also help to detect potential kernel-related issues in advance). The downside is that the CI runs will take a bit longer now, because we are recompiling the kernel from scratch. However, the kernel built with virtme-ng is relatively quick to compile and includes all the sched-ext features required for testing. It's worth noting that this method aligns with the current sched-ext kernel CI, where we test only the in-kernel schedulers (as intended). This change allows to extend the test coverage, using the same kernel to test also the schedulers included in this repository. Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
70 lines
2.8 KiB
YAML
70 lines
2.8 KiB
YAML
name: build-scheds
|
|
run-name: ${{ github.actor }} PR run
|
|
on: [pull_request, push]
|
|
jobs:
|
|
build-schedulers:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
### OTHER REPOS ####
|
|
|
|
# Hard turn-off interactive mode
|
|
- run: echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
|
|
|
|
# Refresh packages list
|
|
- run: sudo apt update
|
|
|
|
### DOWNLOAD AND INSTALL DEPENDENCIES ###
|
|
|
|
# Download dependencies packaged by Ubuntu
|
|
- run: sudo apt -y install bison busybox-static cargo cmake coreutils cpio elfutils file flex gcc git iproute2 kbd kmod libcap-dev libelf-dev libunwind-dev libvirt-clients libzstd-dev linux-headers-generic linux-tools-common linux-tools-generic make ninja-build pahole python3-dev python3-pip python3-requests qemu-kvm rsync rustc udev zstd
|
|
|
|
# clang 17
|
|
# Use a custom llvm.sh script which includes the -y flag for
|
|
# add-apt-repository. Otherwise, the CI job will hang. If and when
|
|
# https://github.com/opencollab/llvm-jenkins.debian.net/pull/26 is
|
|
# merged, we can go back to using https://apt.llvm.org/llvm.sh.
|
|
- run: wget https://raw.githubusercontent.com/Decave/llvm-jenkins.debian.net/fix_llvmsh/llvm.sh
|
|
- run: chmod +x llvm.sh
|
|
- run: sudo ./llvm.sh all
|
|
- run: sudo ln -sf /usr/bin/clang-17 /usr/bin/clang
|
|
- run: sudo ln -sf /usr/bin/llvm-strip-17 /usr/bin/llvm-strip
|
|
|
|
# bpftool
|
|
- run: git clone --recurse-submodules --branch v7.3.0 https://github.com/libbpf/bpftool.git
|
|
- run: make -j -C bpftool/src
|
|
- run: sudo make -j -C bpftool/src install
|
|
|
|
- uses: actions/checkout@v4
|
|
|
|
# libbpf
|
|
- run: git clone --recurse-submodules --branch v1.3.0 https://github.com/libbpf/libbpf.git
|
|
- run: make -j -C libbpf/src
|
|
- run: sudo make -j -C libbpf/src install
|
|
|
|
# meson
|
|
- run: pip install meson
|
|
|
|
# Install virtme-ng
|
|
- run: pip install virtme-ng
|
|
|
|
# Get the latest sched-ext enabled kernel directly from the git
|
|
# repository (try the sched_ext-ci branch first, if it doesn't exist use
|
|
# sched_ext)
|
|
- run: git clone --single-branch -b sched_ext-ci --depth 1 https://github.com/sched-ext/sched_ext.git linux || git clone --single-branch -b sched_ext --depth 1 https://github.com/sched-ext/sched_ext.git linux
|
|
|
|
# Build a minimal kernel (with sched-ext enabled) using virtme-ng
|
|
- run: cd linux && vng -v --build --config .github/workflows/sched-ext.config
|
|
|
|
### END DEPENDENCIES ###
|
|
|
|
# The actual build:
|
|
- run: meson setup build -Dlibbpf_a=`pwd`/libbpf/src/libbpf.a -Dkernel=$(pwd)/linux
|
|
- run: meson compile -C build
|
|
|
|
# Print CPU model before running the tests (this can be useful for
|
|
# debugging purposes)
|
|
- run: grep 'model name' /proc/cpuinfo | head -1
|
|
|
|
# Test schedulers
|
|
- run: meson compile -C build test_sched
|