From: Justin Pryzby Date: Sun, 3 Apr 2022 00:10:20 -0500 Subject: [PATCH 03/23] cirrus/ccache: disable compression and show stats Since v4.0, ccache enables zstd compression by default, saving roughly 2x-3x. But, cirrus caches are compressed as tar.gz, so we could disable ccache compression, allowing cirrus to gzip the uncompressed data (better than ccache's default of zstd-1). With default compression enabled (https://cirrus-ci.com/task/6692342840164352): linux/debian/bullseye has 4.2; 99MB cirrus cache; cache_size_kibibyte 109616 macos has 4.5.1: 47MB cirrus cache; cache_size_kibibyte 52500 freebsd has 3.7.12: 42MB cirrus cache; cache_size_kibibyte 134064 windows has 4.6.1; 180MB cirrus cache; cache_size_kibibyte 51179 todo: compiler warnings With compression disabled (https://cirrus-ci.com/task/4614182514458624): linux: 91MB cirrus cache; cache_size_kibibyte 316136 macos: 41MB cirrus cache; cache_size_kibibyte 118068 windows: 42MB cirrus cache; cache_size_kibibyte 134064 freebsd is the same The stats should either be shown or logged (or maybe run with CCACHE_NOSTATS, to avoid re-uploading cache tarball in a 100% cached build, due only to updating ./**/stats). Note that ccache 4.4 supports CCACHE_STATSLOG, which seems ideal. freebsd, linux ci-os-only: macos --- .cirrus.yml | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 591e802bee2..54256570030 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -16,7 +16,9 @@ env: # Useful to be able to analyse what in a script takes long CIRRUS_LOG_TIMESTAMP: true - CCACHE_MAXSIZE: "250M" + CCACHE_MAXSIZE: "500M" + CCACHE_NOCOMPRESS: 1 + #CCACHE_STATSLOG: ccache-stats.log # target to test, for all but windows CHECK: check-world PROVE_FLAGS=$PROVE_FLAGS @@ -110,7 +112,10 @@ task: CXX="ccache c++" \ CFLAGS="-Og -ggdb" EOF - build_script: su postgres -c "gmake -s -j${BUILD_JOBS} world-bin" + build_script: | + su postgres -c "ccache --zero-stats" + su postgres -c "gmake -s -j${BUILD_JOBS} world-bin" + su postgres -c "ccache --show-stats" upload_caches: ccache # The use of script avoids make -Otarget complaints about fcntl() on @@ -206,7 +211,11 @@ task: CFLAGS="-Og -ggdb" \ CXXFLAGS="-Og -ggdb" EOF - build_script: su postgres -c "make -s -j${BUILD_JOBS} world-bin" + + build_script: | + su postgres -c "ccache --zero-stats" + su postgres -c "make -s -j${BUILD_JOBS} world-bin" + su postgres -c "ccache --show-stats" upload_caches: ccache test_world_script: | @@ -324,7 +333,11 @@ task: \ LLVM_CONFIG=${brewpath}/llvm/bin/llvm-config \ PYTHON=python3 - build_script: gmake -s -j${BUILD_JOBS} world-bin + + build_script: | + ccache --zero-stats + gmake -s -j${BUILD_JOBS} world-bin + ccache --show-stats -v upload_caches: ccache test_world_script: | @@ -482,7 +495,7 @@ task: # Use larger ccache cache, as this task compiles with multiple compilers / # flag combinations - CCACHE_MAXSIZE: "1GB" + CCACHE_MAXSIZE: "1500MB" CCACHE_DIR: "/tmp/ccache_dir" LINUX_CONFIGURE_FEATURES: *LINUX_CONFIGURE_FEATURES @@ -530,7 +543,9 @@ task: ${LINUX_CONFIGURE_FEATURES} \ CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang" make -s -j${BUILD_JOBS} clean + ccache --zero-stats time make -s -j${BUILD_JOBS} world-bin + ccache --show-stats # gcc, cassert on, dtrace off always: @@ -541,7 +556,9 @@ task: ${LINUX_CONFIGURE_FEATURES} \ CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang" make -s -j${BUILD_JOBS} clean + ccache --zero-stats time make -s -j${BUILD_JOBS} world-bin + ccache --show-stats # clang, cassert off, dtrace off always: @@ -551,7 +568,9 @@ task: ${LINUX_CONFIGURE_FEATURES} \ CC="ccache clang" CXX="ccache clang++" CLANG="ccache clang" make -s -j${BUILD_JOBS} clean + ccache --zero-stats time make -s -j${BUILD_JOBS} world-bin + ccache --show-stats # clang, cassert on, dtrace on always: @@ -563,7 +582,9 @@ task: ${LINUX_CONFIGURE_FEATURES} \ CC="ccache clang" CXX="ccache clang++" CLANG="ccache clang" make -s -j${BUILD_JOBS} clean + ccache --zero-stats time make -s -j${BUILD_JOBS} world-bin + ccache --show-stats # cross-compile to windows always: @@ -574,7 +595,9 @@ task: CC="ccache x86_64-w64-mingw32-gcc" \ CXX="ccache x86_64-w64-mingw32-g++" make -s -j${BUILD_JOBS} clean + ccache --zero-stats time make -s -j${BUILD_JOBS} world-bin + ccache --show-stats ### # Verify docs can be built -- 2.17.1 --tKkaNMvYmhQvRCRK Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0004-cirrus-ccache-add-explicit-cache-keys.patch"