third_party/linux: build at 16 threads, request 16 CPUs

This makes sure we don't overwhelm build machines with a bunch of
parallel kernel builds. That should in turn deflake tests which are
resource-dependent (like E2E tests).

Change-Id: If2758f328d7b2c71c8f405246c6ac41091b4a350
Reviewed-on: https://review.monogon.dev/c/monogon/+/3433
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/third_party/linux/def.bzl b/third_party/linux/def.bzl
index 715d058..67727a6 100644
--- a/third_party/linux/def.bzl
+++ b/third_party/linux/def.bzl
@@ -60,6 +60,22 @@
     outputs = list(_new_settings.keys()),
 )
 
+def _linux_image_impl_resources(_os, _ninputs):
+    """
+    Configures linux build resources.
+
+    See `resource_set` documentation in builtins.actions Bazel docs.
+    """
+    # 16 threads seems about right - this fits well in both our build machines and
+    # development machines.
+    cpu = 16
+    # In MB. Picked based on observing build in htop.
+    mb_per_cpu = 256
+    return {
+        'cpu': cpu,
+        'memory': cpu * mb_per_cpu,
+        'local_test': 0,
+    }
 
 def _linux_image_impl(ctx):
     kernel_config = ctx.file.kernel_config
@@ -86,6 +102,7 @@
     ctx.actions.run_shell(
         outputs = [ image, modinfo, modules ],
         inputs = [ kernel_config ] + kernel_src,
+        resource_set = _linux_image_impl_resources,
         command = '''
             kconfig=$1
             target=$2
@@ -99,7 +116,7 @@
 
             mkdir ${root}/.bin
             cp ${kconfig} ${builddir}/.config
-            (cd ${root} && KBUILD_OUTPUT="${builddir}" make -j $(nproc) ${target} >/dev/null)
+            (cd ${root} && KBUILD_OUTPUT="${builddir}" make -j 16 ${target} >/dev/null)
             cp "${builddir}"/${image_source} ${image}
             cp "${builddir}"/modules.builtin.modinfo ${modinfo}
             # Not using modules_install as it tries to run depmod and friends