From: Prarit Bhargava <prarit(a)redhat.com>
redhat/kernel.spec.template: Parallelize compression
This line in the kernel.spec file:
find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs
-P${RPM_BUILD_NCPUS} -r xz;
implies that ${RPM_BUILD_NCPUS} xz instances are run. This is not true,
and this line actually applies ${RPM_BUILD_NCPUS} to a single instance of
xz. This means that the compression has been done one module at a time
(ie, in serial) rather than in parallel as is implied by the code.
Rewrite this code into a script and make the execution truly parallel.
Signed-off-by: Prarit Bhargava <prarit(a)redhat.com>
diff --git a/redhat/Makefile b/redhat/Makefile
index blahblah..blahblah 100644
--- a/redhat/Makefile
+++ b/redhat/Makefile
@@ -632,6 +632,7 @@ sources-rh: $(TARBALL) generate-testpatch-tmp setup-source
dist-configs-check
scripts/mod/mod-internal.list \
scripts/mod/mod-partner.list \
scripts/mod/mod-sign.sh \
+ scripts/mod/mod-compress.sh \
configs/flavors \
configs/generate_all_configs.sh \
configs/merge.pl \
diff --git a/redhat/kernel.spec.template b/redhat/kernel.spec.template
index blahblah..blahblah 100755
--- a/redhat/kernel.spec.template
+++ b/redhat/kernel.spec.template
@@ -767,6 +767,8 @@ Source21: mod-sign.sh
%define modsign_cmd %{SOURCE21}
+Source22: mod-compress.sh
+
%if 0%{?include_rhel}
Source23: x509.genkey.rhel
@@ -2472,7 +2474,8 @@ find Documentation -type d | xargs chmod u+w
fi \
fi \
if [ "%{zipmodules}" -eq "1" ]; then \
- find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs
-P${RPM_BUILD_NCPUS} -r xz; \
+ echo "Compressing modules ..." \
+ %{SOURCE22} "$RPM_BUILD_ROOT/lib/modules/" "${RPM_BUILD_NCPUS}"
\
fi \
%{nil}
diff --git a/redhat/scripts/mod/mod-compress.sh b/redhat/scripts/mod/mod-compress.sh
new file mode 100755
index blahblah..blahblah 100755
--- /dev/null
+++ b/redhat/scripts/mod/mod-compress.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+
+BUILD_DIR=$1
+NCPUS=$2
+
+if [ ! -e "$BUILD_DIR" ]; then
+ echo "Could not find $BUILD_DIR"
+ exit 1
+fi
+
+modcount=0
+for module in $(find "$BUILD_DIR" -name *.ko)
+do
+ xz $module &
+ waitpids[${modcount}]=$!
+ modcount=$(expr $modcount + 1)
+ while [ "$(jobs | grep -c Running)" -ge "$NCPUS" ]; do :; done
+done
+
+for pid in ${waitpids[*]}; do
+ wait ${pid}
+done
--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/2254