Skip to content

Commit 16155cc

Browse files
committed
packages: Compress in parallel
The FreeBSD-base pkg repository is currrently dominated by a handful of large packages: Out of a compressed repository size of ~960 MB, about 160 MB is taken up by the FreeBSD-src package, 128 MB (on amd64) is used by the FreeBSD-kernel-generic-dbg package, and 91 MB is used by the FreeBSD-src-sys package. Consequently, running 'make packages -jN' provides less benefit than one might hope, as most of the packages finish building quickly, ultimately leaving the FreeBSD-src package building by itself for a couple minutes while all the other CPUs are idle. Pass -T${PKG_CTHREADS} to the 'pkg create' commands (with a default of -T0) in order to instruct pkg's zstd compression to use multiple threads. Testing on an EC2 r7i.48xlarge instance with -j192, this reduces the time taken by 'make packages' from 6m17s to 1m39s; package creation time itself (excluding the initial process of installing into world and kernel staging directories) dropped from 5m37s to 59s. Reviewed by: ivy MFC after: 3 days Sponsored by: https://www.patreon.com/cperciva Differential Revision: https://reviews.freebsd.org/D53053
1 parent 4fc1e75 commit 16155cc

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

Makefile.inc1

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,6 +1964,7 @@ REPODIR?= ${OBJROOT}repo
19641964
PKG_FORMAT?= tzst
19651965
PKG_LEVEL?= -1
19661966
PKG_CLEVEL?= ${"${PKG_FORMAT:Mtar}" != "":?:-l ${PKG_LEVEL}}
1967+
PKG_CTHREADS?= 0
19671968
PKG_REPO_SIGNING_KEY?= # empty
19681969
PKG_OUTPUT_DIR?= ${PKG_VERSION}
19691970
PKG_ABI_FILE?= ${WSTAGEDIR}/usr/bin/uname
@@ -2144,7 +2145,7 @@ create-source-src-package: _pkgbootstrap .PHONY
21442145
${SSTAGEDIR}/src.ucl
21452146
${PKG_CMD} -o ABI=${PKG_ABI} \
21462147
-o OSVERSION="${SRCRELDATE}" \
2147-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2148+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
21482149
-M ${SSTAGEDIR}/src.ucl \
21492150
-p ${SSTAGEDIR}/src.plist \
21502151
-r ${SRCDIR} \
@@ -2170,7 +2171,7 @@ create-source-src-sys-package: _pkgbootstrap .PHONY
21702171
${SSTAGEDIR}/src-sys.ucl
21712172
${PKG_CMD} -o ABI=${PKG_ABI} \
21722173
-o OSVERSION="${SRCRELDATE}" \
2173-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2174+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
21742175
-M ${SSTAGEDIR}/src-sys.ucl \
21752176
-p ${SSTAGEDIR}/src-sys.plist \
21762177
-r ${SRCDIR} \
@@ -2210,7 +2211,7 @@ create-world-package-${pkgname}: .PHONY
22102211
' ${WSTAGEDIR}/${pkgname}.ucl
22112212
${PKG_CMD} -o ABI=${PKG_ABI} -o ALLOW_BASE_SHLIBS=yes \
22122213
-o OSVERSION="${SRCRELDATE}" \
2213-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2214+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
22142215
-M ${WSTAGEDIR}/${pkgname}.ucl \
22152216
-p ${WSTAGEDIR}/${pkgname}.plist \
22162217
-r ${WSTAGEDIR} \
@@ -2229,7 +2230,7 @@ create-sets-packages: .PHONY
22292230
@for manifest in ${WSTAGEDIR}/set-*.ucl; do \
22302231
echo "--> Processing manifest: $$manifest"; \
22312232
${PKG_CMD} -o ABI=${PKG_ABI} -o OSVERSION="${SRCRELDATE}" \
2232-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2233+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
22332234
-M $$manifest \
22342235
-o "${REPODIR}/${PKG_ABI}/${PKG_OUTPUT_DIR}" \
22352236
|| exit 1; \
@@ -2259,7 +2260,7 @@ create-dtb-package: .PHONY
22592260
${KSTAGEDIR}/${DISTDIR}/dtb.ucl ; \
22602261
${PKG_CMD} -o ABI=${PKG_ABI} -o ALLOW_BASE_SHLIBS=yes \
22612262
-o OSVERSION="${SRCRELDATE}" \
2262-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2263+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
22632264
-M ${KSTAGEDIR}/${DISTDIR}/dtb.ucl \
22642265
-p ${KSTAGEDIR}/${DISTDIR}/dtb.plist \
22652266
-r ${KSTAGEDIR}/${DISTDIR} \
@@ -2296,7 +2297,7 @@ create-kernel-packages-flavor${flavor:C,^""$,${_default_flavor},}: _pkgbootstrap
22962297
${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.ucl ; \
22972298
${PKG_CMD} -o ABI=${PKG_ABI} -o ALLOW_BASE_SHLIBS=yes \
22982299
-o OSVERSION="${SRCRELDATE}" \
2299-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2300+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
23002301
-M ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.ucl \
23012302
-p ${KSTAGEDIR}/${DISTDIR}/kernel.${INSTALLKERNEL}${flavor}.plist \
23022303
-r ${KSTAGEDIR}/${DISTDIR} \
@@ -2339,7 +2340,7 @@ create-kernel-packages-extra-flavor${flavor:C,^""$,${_default_flavor},}-${_kerne
23392340
${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.ucl ; \
23402341
${PKG_CMD} -o ABI=${PKG_ABI} -o ALLOW_BASE_SHLIBS=yes \
23412342
-o OSVERSION="${SRCRELDATE}" \
2342-
create -f ${PKG_FORMAT} ${PKG_CLEVEL} \
2343+
create -f ${PKG_FORMAT} ${PKG_CLEVEL} -T${PKG_CTHREADS} \
23432344
-M ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.ucl \
23442345
-p ${KSTAGEDIR}/kernel.${_kernel}/kernel.${_kernel}${flavor}.plist \
23452346
-r ${KSTAGEDIR}/kernel.${_kernel} \

0 commit comments

Comments
 (0)