From: Nick Alcock Date: Tue, 20 Jun 2017 18:27:37 +0000 (+0100) Subject: uek-rpm: build: sign modules in parallel X-Git-Tag: v4.1.12-111.0.20170918_2215~154 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c7f249301abfb989fe36beb3d5920f1863494505;p=users%2Fjedix%2Flinux-maple.git uek-rpm: build: sign modules in parallel Assuming you have enough entropy, this gives a speedup in the signing phase almost precisely proportional to the core count. e.g. on a 20-core box (with %_smp_ncpus_max forced to 0 in /etc/rpm/macros, but this will be irrelevant shortly, and even with the present RPM configuration a 16-fold speedup can be seen): old: 168.27user 19.99system 3:06.25elapsed 101%CPU (0avgtext+0avgdata 11112maxresident)k new: 138.70user 11.32system 0:10.14elapsed 1479%CPU (0avgtext+0avgdata 11208maxresident)k Signed-off-by: Nick Alcock Reviewed-by: John Sobecki Orabug: 26316447 --- diff --git a/uek-rpm/ol6/kernel-uek.spec b/uek-rpm/ol6/kernel-uek.spec index cf6e01d82dbaa..cddb4cd80fcb6 100644 --- a/uek-rpm/ol6/kernel-uek.spec +++ b/uek-rpm/ol6/kernel-uek.spec @@ -1415,22 +1415,22 @@ find Documentation -type d | xargs chmod u+w if [ "%{with_pae}" != "0" ]; then \ mv signing_key.priv.sign.PAE signing_key.priv \ mv signing_key.x509.sign.PAE signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/ %{dgst} \ fi \ if [ "%{with_debug}" != "0" ]; then \ mv signing_key.priv.sign.debug signing_key.priv \ mv signing_key.x509.sign.debug signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/ %{dgst} \ fi \ if [ "%{with_pae_debug}" != "0" ]; then \ mv signing_key.priv.sign.PAEdebug signing_key.priv \ mv signing_key.x509.sign.PAEdebug signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/ %{dgst} \ fi \ if [ "%{with_up}" != "0" ]; then \ mv signing_key.priv.sign signing_key.priv \ mv signing_key.x509.sign signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ %{dgst} \ fi \ fi \ %{nil} diff --git a/uek-rpm/ol6/mod-sign.sh b/uek-rpm/ol6/mod-sign.sh index f8e120f1b22e5..6a84ae250335c 100755 --- a/uek-rpm/ol6/mod-sign.sh +++ b/uek-rpm/ol6/mod-sign.sh @@ -9,21 +9,37 @@ # This essentially duplicates the 'modules_sign' Kbuild target and runs the # same commands for those modules. +parallel=1 +internal= +while [[ $# -gt 0 ]]; do + case $1 in + -j) parallel=$2 + shift;; + -j*) parallel="$(echo $1 | sed 's,-j,,')";; + --single-file) # One job from a parallel multitude. + internal=t;; + *) break;; + esac + shift +done + moddir=$1 dgst=$2 -modules=`find $moddir -name *.ko` - MODSECKEY="./signing_key.priv" MODPUBKEY="./signing_key.x509" -for mod in $modules -do - dir=`dirname $mod` - file=`basename $mod` +if [[ -n $internal ]]; then + dir=`dirname $1` + file=`basename $1` ./scripts/sign-file ${dgst} ${MODSECKEY} ${MODPUBKEY} ${dir}/${file} \ ${dir}/${file}.signed mv ${dir}/${file}.signed ${dir}/${file} rm -f ${dir}/${file}.{sig,dig} -done + exit 0 +fi + +# Parallel case. + +find $moddir -name "*.ko" -print0 | xargs -0r -P $parallel -n 1 -I'{}' $0 --single-file '{}' $dgst diff --git a/uek-rpm/ol7/kernel-uek.spec b/uek-rpm/ol7/kernel-uek.spec index 6c1bc51f3bfb3..cfbcdc4bd04b9 100644 --- a/uek-rpm/ol7/kernel-uek.spec +++ b/uek-rpm/ol7/kernel-uek.spec @@ -1366,22 +1366,22 @@ find Documentation -type d | xargs chmod u+w if [ "%{with_pae}" != "0" ]; then \ mv signing_key.priv.sign.PAE signing_key.priv \ mv signing_key.x509.sign.PAE signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/ %{dgst} \ fi \ if [ "%{with_debug}" != "0" ]; then \ mv signing_key.priv.sign.debug signing_key.priv \ mv signing_key.x509.sign.debug signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/ %{dgst} \ fi \ if [ "%{with_pae_debug}" != "0" ]; then \ mv signing_key.priv.sign.PAEdebug signing_key.priv \ mv signing_key.x509.sign.PAEdebug signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/ %{dgst} \ fi \ if [ "%{with_up}" != "0" ]; then \ mv signing_key.priv.sign signing_key.priv \ mv signing_key.x509.sign signing_key.x509 \ - %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ %{dgst} \ + %{modsign_cmd} %{?_smp_mflags} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ %{dgst} \ fi \ fi \ %{nil} diff --git a/uek-rpm/ol7/mod-sign.sh b/uek-rpm/ol7/mod-sign.sh index f8e120f1b22e5..6a84ae250335c 100755 --- a/uek-rpm/ol7/mod-sign.sh +++ b/uek-rpm/ol7/mod-sign.sh @@ -9,21 +9,37 @@ # This essentially duplicates the 'modules_sign' Kbuild target and runs the # same commands for those modules. +parallel=1 +internal= +while [[ $# -gt 0 ]]; do + case $1 in + -j) parallel=$2 + shift;; + -j*) parallel="$(echo $1 | sed 's,-j,,')";; + --single-file) # One job from a parallel multitude. + internal=t;; + *) break;; + esac + shift +done + moddir=$1 dgst=$2 -modules=`find $moddir -name *.ko` - MODSECKEY="./signing_key.priv" MODPUBKEY="./signing_key.x509" -for mod in $modules -do - dir=`dirname $mod` - file=`basename $mod` +if [[ -n $internal ]]; then + dir=`dirname $1` + file=`basename $1` ./scripts/sign-file ${dgst} ${MODSECKEY} ${MODPUBKEY} ${dir}/${file} \ ${dir}/${file}.signed mv ${dir}/${file}.signed ${dir}/${file} rm -f ${dir}/${file}.{sig,dig} -done + exit 0 +fi + +# Parallel case. + +find $moddir -name "*.ko" -print0 | xargs -0r -P $parallel -n 1 -I'{}' $0 --single-file '{}' $dgst