Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/checkpoint-restore/criu.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKir Kolyshkin <kir@openvz.org>2017-03-17 00:27:36 +0300
committerPavel Emelyanov <xemul@virtuozzo.com>2017-04-02 18:09:34 +0300
commit7290de590251eb260b0e57056b34d70f5c7a7dae (patch)
tree8ea442ff03f6ecf775fd285bc76f33d637678cd3 /scripts/build/Dockerfile.alpine
parent5204a193e7ce23dd13726368419f68364db1a18f (diff)
travis: enable ccache for docker/qemu builds
As we compile-test non-x86_64 architectures under qemu emulation, it works pretty slow. Dmitry Safonov suggested, and Andrey Vagin initially implemented supporting ccache for such builds. This patch is based heavily on Andrey's work -- all the bugs added are purely mine though. Performance results: in an ideal environment (two builds of the same code, one with cold (empty) ccache, another with the hot one) I saw compile time improvements of 4x to 5x, and total test run time improvement up to 2x to 2.5x. In layman terms, the complete test run that was taking more than 50 minutes now takes about 25! Notes on handling .ccache directory: 1. Before running docker build, .ccache directory (saved in between runs by Travis) is moved to criu source code root, from where it is copied by docker together with criu sources. 2. In Dockerfile, .ccache gets moved to /tmp, and CCACHE_DIR is set accordingly. 3. After running docker build, .ccache is copied out from docker container back to the host (from where it is saved by Travis). Ccache envorinment notes: 1. CCACHE_NOCOMPRESS is needed because otherwise tons of time is spent on compression/decompression (big performance hit under qemu). 2. CCACHE_CPP2 is required with clang, see detailed explanation at http://petereisentraut.blogspot.com/2011/09/ccache-and-clang-part-2.html The logic of setting CCACHE_CPP2 in Dockerfile is somewhat fancy; unfortunately I was not able to come up with a simpler approach. Misc: 1. Travis runs "ccache -s" after the build is completed. A call to "ccache -s" is called to Dockerfile before make, so one can compare before/after numbers. 2. make invocations are surrounded by "date" calls so one can get the compilation times. Changes in v2: - consolidate Dockerfile statements (ENV, RUN) - single object make test is no longer commented out - simplify "make mrproper" test Signed-off-by: Kir Kolyshkin <kir@openvz.org> Reviewed-by: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
Diffstat (limited to 'scripts/build/Dockerfile.alpine')
-rw-r--r--scripts/build/Dockerfile.alpine16
1 files changed, 10 insertions, 6 deletions
diff --git a/scripts/build/Dockerfile.alpine b/scripts/build/Dockerfile.alpine
index 86738a748..26c39ac25 100644
--- a/scripts/build/Dockerfile.alpine
+++ b/scripts/build/Dockerfile.alpine
@@ -1,5 +1,7 @@
FROM alpine:3.5
ARG CC=gcc
+ARG ENV1=FOOBAR
+
RUN apk update && apk add \
build-base \
coreutils \
@@ -12,18 +14,20 @@ RUN apk update && apk add \
libnl3-dev \
pkgconfig \
libnet-dev \
+ ccache \
$CC
COPY . /criu
WORKDIR /criu
-RUN make mrproper && make -j $(nproc) CC=$CC
+ENV CC="ccache $CC" CCACHE_DIR=/tmp/.ccache CCACHE_NOCOMPRESS=1 $ENV1=yes
+RUN mv .ccache /tmp; make mrproper; ccache -s; \
+ date; make -j $(nproc) CC="$CC"; date
-# to run tests
+# Run a test
RUN apk add py-yaml \
py-pip \
ip6tables \
iptables \
- iproute2
-
-RUN pip install protobuf
-RUN make -C test/zdtm/static env00
+ iproute2 \
+ && pip install protobuf \
+ && make -C test/zdtm/static env00