diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6a458e26467033fb89fd191003fc7f1a3edfec63..46f5c7fa5197144bab75fce69943332bc02f284e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,13 +1,17 @@
 image: ralfjung/opam-ci:latest
 
+variables:
+  CPU_CORES: "9"
+
 iris-coq8.6:
   tags:
-  - coq
+  - 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'
   - 'if (( RANDOM % 10 == 0 )); then make validate; fi'
@@ -22,3 +26,4 @@ iris-coq8.6:
   artifacts:
     paths:
     - build-time.txt
+    - build-env.txt
diff --git a/build/opam-ci.sh b/build/opam-ci.sh
index c4189bab6cf3199a00526ea958918c909cfd23d5..324e5a8711b4ea19671f0016f027d7d9e5c70046 100755
--- a/build/opam-ci.sh
+++ b/build/opam-ci.sh
@@ -4,16 +4,19 @@ 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 1); then
+    # last update was more than a day ago
+    opam update
+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