diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bbdfe9747e6f355a86a3fc9880fec45fa0b2360d..48e98f8ae782123a8b545ba514ff44fba118c501 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,11 +1,17 @@
 image: ralfjung/opam-ci:latest
 
+variables:
+  CPU_CORES: "9"
+
 lrust-coq8.6:
+  tags:
+  - fp-timing
   script:
   # prepare
   - . build/opam-ci.sh coq 8.6 coq-mathcomp-ssreflect 1.6.1
+  - env | egrep '^(CI_BUILD_REF|CI_RUNNER)' > build-env.txt
   # build
-  - 'time make -j8 TIMED=y 2>&1 | tee build-log.txt'
+  - 'time make -j$CPU_CORES TIMED=y 2>&1 | tee build-log.txt'
   - 'if fgrep Axiom build-log.txt >/dev/null; then exit 1; fi'
   - 'cat build-log.txt | egrep "[a-zA-Z0-9_/-]+ \(user: [0-9]" | tee build-time.txt'
   cache:
@@ -18,3 +24,4 @@ lrust-coq8.6:
   artifacts:
     paths:
     - build-time.txt
+    - build-env.txt
diff --git a/build/opam-ci.sh b/build/opam-ci.sh
index c4189bab6cf3199a00526ea958918c909cfd23d5..20d87f9d4da508096531227791ccce63da17bd6f 100755
--- a/build/opam-ci.sh
+++ b/build/opam-ci.sh
@@ -4,16 +4,21 @@ set -e
 
 # Prepare OPAM configuration
 export OPAMROOT="$(pwd)/opamroot"
-export OPAMJOBS=16
+export OPAMJOBS="$((2*$CPU_CORES))"
 export OPAM_EDITOR="$(which false)"
 
 # Make sure we got a good OPAM
 test -d "$OPAMROOT" || (mkdir "$OPAMROOT" && opam init --no-setup -y)
 eval `opam conf env`
+if test $(find "$OPAMROOT/repo/package-index" -mtime +0); then
+    # last update was more than a day ago
+    opam update
+else
+    echo "[opam-ci] Not updating opam."
+fi
 test -d "$OPAMROOT/repo/coq-extra-dev" || opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev -p 5
 test -d "$OPAMROOT/repo/coq-core-dev" || opam repo add coq-core-dev https://coq.inria.fr/opam/core-dev -p 5
 test -d "$OPAMROOT/repo/coq-released" || opam repo add coq-released https://coq.inria.fr/opam/released -p 10
-opam update
 
 # Install fixed versions of some dependencies
 echo