From: Prarit Bhargava <[email protected]>

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 <[email protected]>

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
_______________________________________________
kernel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/[email protected]
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to