2. Major Hayden
Principal Software Engineer, Red Hat
major@redhat.com
🤖 Kernel testing automator (CKI Project)
😺 Maintainer of icanhazip.com
📻 Ham radio operator (W5WUT)
🤦♂ Hoarder of domain names
3. It all started with a hunt for
a new challenge.
Photo: NASA
8. ≈ 14,000 changesets per release
from over 1,700 different developers
≈ 150-300 are first time contributors
Source: LWN
9. kubernetes, a very active project,
has 45,264 changesets since 2014
(that’s equivalent to about three Linux kernel releases)
Source: Stackalytics Photo: CNCF
10. From 5.0 to 5.1:
545,000 lines added
289,000 lines removed
(net growth ≈ 256K lines)
Source: LWN
14. Lifecycle of a
kernel patch
2018-02-23: Submitted a patch for usb-serial
2018-02-26: Merged by subsystem maintainer
2018-02-28: Added to linux-next
2018-04-08: Released in stable 4.16.1 and 4.14.33
2018-06-03: Released in mainline 4.17
2018-10-21: Released in stable 3.16.60
9608e5c0f079 USB: serial: ftdi_sio: add RT Systems VX-8 cable
21. INITIAL GOALS:
1. Verify patchset merges cleanly
2. Ensure the kernel compiles
3. Boot the kernel and run LTP
4. Send a report to people who care
Photo: pxhereLTP = Linux Test Project
26. FIRST ITERATION:
Jenkins pipeline on a single server
Lots of CPU contention from kernel compiles (24 CPUs)
We used the same gcc/glibc toolchain for everything
Jenkins upgrades were often problematic
Constantly reverting plugin upgrades
27. SECOND ITERATION:
Jenkins pipeline with OpenShift
Much easier to scale kernel compiles (128 CPUs)
Each container had the right compiler toolchains for its compile job
Jenkins upgrades and plugin upgrades were still rough
Worker containers needed lots of extra Java components to talk to Jenkins
28. THIRD ITERATION:
Self-hosted GitLab with OpenShift
Tightly integrated repositories and CI with easy, controlled scaling
GitLab runner containers could be stripped down to basic components
We added integration testing for the pipeline code itself
Easy runner migration to other OpenShift/Kubernetes deployments
Access to 768 CPUs
31. PIPELINE TRIGGER KERNEL REPO
Baseline tests
Checkout the current HEAD of the kernel tree and
trigger GitLab pipelines to compile the kernel and run tests.
35. Native architecture testing
Kernels are booted on their native architecture using Beaker
Beaker manages the pool of machines, runs tests, and provides results
44 kernel subsystem tests are open source (more are coming!)
We test a few different architectures...
Photo: Jonathan Cutrer
40. CKI Statistics
Over 100K
individual tests per month
Over 11K
GitLab pipelines run
Under 6 minutes
to compile a kernel
for 4 architectures
Under 2 hours
between patch proposal
and feedback sent (stable)
41. The best part is that we are not
alone in this endeavor.