]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
run-make-check.sh: Adding ccache tuning for the CI
authorErwan Velu <erwan@redhat.com>
Wed, 4 Jul 2018 07:47:56 +0000 (09:47 +0200)
committerVictor Denisov <denisovenator@gmail.com>
Sun, 21 Oct 2018 21:20:04 +0000 (14:20 -0700)
When run-make-check is run by the CI, some tuning can be performed to
speedup the build.

This commit :
- Detect jenkins by searching JENKINS_HOME env variable
- Defines the SOURCE_DATE_EPOCH to enforce a stable date across builds
- Ask cmake not to use the git versioning which adds useless entropy for a temporary build (ENABLE_GIT_VERSION=OFF)
- Define the ccache slopiness to increase efficiency
- Increase the ccache size to save multiple builds to maximise cache hit between PRs
- Print ccache statistics to evaluate ccache efficiency

Conflicts:
run-make-check.sh

Signed-off-by: Erwan Velu <erwan@redhat.com>
(cherry picked from commit 4cb5a590537a9caaf61db42ce8ea123d2ab961f3)

run-make-check.sh

index 078345422763426fd479e85cde219d242de3242f..4b559f70e6ce77609e842fa6de9a3c7f00bf8a10 100755 (executable)
@@ -69,11 +69,42 @@ function run() {
     BUILD_MAKEOPTS=${BUILD_MAKEOPTS:-$DEFAULT_MAKEOPTS}
     CHECK_MAKEOPTS=${CHECK_MAKEOPTS:-$DEFAULT_MAKEOPTS}
 
-    $DRY_RUN ./do_cmake.sh $@ || return 1
+    CMAKE_PYTHON_OPTS=
+    if ! type python2 > /dev/null 2>&1 ; then
+        CMAKE_PYTHON_OPTS="-DWITH_PYTHON2=OFF -DWITH_PYTHON3=ON -DMGR_PYTHON_VERSION=3"
+    fi
+
+   CMAKE_BUILD_OPTS="-DWITH_FIO=ON -DWITH_GTEST_PARALLEL=ON"
+
+    # Are we in the CI ?
+    if [ -n "$JENKINS_HOME" ]; then
+      echo "Jenkins got detected, let's tune the build"
+      # The following settings are made for improving ccache efficiency
+      # by removing the entropy generated by the date/time embedded in the build
+      CMAKE_BUILD_OPTS="$CMAKE_BUILD_OPTS -D ENABLE_GIT_VERSION=OFF"
+      export SOURCE_DATE_EPOCH=$(date +%D |date -f- +%s)
+      ccache -o sloppiness=time_macros
+      ccache -o run_second_cpp=true
+
+      # Build host has plenty of space available, let's use it to keep
+      # various versions of the built objects. This could increase the cache hit
+      # if the same or similar PRs are running several times
+      ccache -o max_size=100G
+      ccache -z # Reset the ccache statistics
+    fi
+    $DRY_RUN ./do_cmake.sh $CMAKE_BUILD_OPTS $CMAKE_PYTHON_OPTS $@ || return 1
     $DRY_RUN cd build
     $DRY_RUN make $BUILD_MAKEOPTS tests || return 1
-    # prevent OSD EMFILE death on tests
-    $DRY_RUN sudo ulimit -n 32768
+    if [ -n "$JENKINS_HOME" ]; then
+      ccache -s # print the ccache statistics to evaluate the efficiency
+    fi
+    # prevent OSD EMFILE death on tests, make sure large than 1024
+    $DRY_RUN ulimit -n $(ulimit -Hn)
+    if [ $(ulimit -n) -lt 1024 ];then
+        echo "***ulimit -n too small, better bigger than 1024 for test***"
+        return 1
+    fi
+
     if ! $DRY_RUN ctest $CHECK_MAKEOPTS --output-on-failure; then
         rm -f ${TMPDIR:-/tmp}/ceph-asok.*
         return 1
@@ -97,7 +128,7 @@ function main() {
         rm -fr ${CEPH_BUILD_VIRTUALENV:-/tmp}/*virtualenv*
         echo "cmake check: successful run on $(git rev-parse HEAD)"
         return 0
-    else
+   else
         rm -fr ${CEPH_BUILD_VIRTUALENV:-/tmp}/*virtualenv*
         return 1
     fi