dracut [PATCH]es: parallelize block_module filter and net_module_filter
Filtering modules requires enough work that instmods() in the next pipeline stage was rarely busy. Parallelize the two filters which do the most work. Also fix a filename-vs-contents mistake in net_module_filter.
Signature · 1 line
John Reiser, jreiser-L8/tzxVKHrlWk0Htik3J/[email protected]
From f4533a2ceca52c443ddebec01eeaa35d51c39c1b Mon Sep 17 00:00:00 2001
From: John Reiser <jreiser-L8/tzxVKHrlWk0Htik3J/[email protected]>
Date: Tue, 13 Sep 2011 17:41:43 -0700
Subject: [PATCH 1/3] Parallelize block_module_filter
--- modules.d/90kernel-modules/module-setup.sh | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
modules.d/90kernel-modules/module-setup.sh +16 -6
@@ -11,12 +11,22 @@ installkernel() { } block_module_filter() { local _blockfuncs='ahci_init_controller|ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans|scsi_esp_register|register_virtio_device' - local _f - while read _f; do case "$_f" in - *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;; - *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;; - esac - done + function bmf1() { + local _f + while read _f; do case "$_f" in + *.ko) [[ $(< $_f) =~ $_blockfuncs ]] && echo "$_f" ;; + *.ko.gz) [[ $(gzip -dc <$_f) =~ $_blockfuncs ]] && echo "$_f" ;; + esac + done + } + # Use two parallel streams to filter alternating modules. + local merge side2 + ( ( local _f1 _f2 + while read _f1; do echo "$_f1" + if read _f2; then echo "$_f2" 1>&${side2}; fi + done \ + | bmf1 1>&${merge} ) {side2}>&1 \ + | bmf1 ) {merge}>&1 } hostonly='' instmods sr_mod sd_mod scsi_dh scsi_dh_rdac scsi_dh_emc hostonly='' instmods pcmcia firewire-ohci
Signature · 1 line
1.7.6
From 5aadc01b17db78ca3e7ef34b16cced11305fd737 Mon Sep 17 00:00:00 2001
From: John Reiser <jreiser-L8/tzxVKHrlWk0Htik3J/[email protected]>
Date: Tue, 13 Sep 2011 17:42:05 -0700
Subject: [PATCH 2/3] Parallelize net_module_filter
Conflicts:
modules.d/40network/module-setup.sh
--- modules.d/40network/module-setup.sh | 32 ++++++++++++++++++++------------ 1 files changed, 20 insertions(+), 12 deletions(-)
modules.d/40network/module-setup.sh +20 -12
@@ -27,18 +27,26 @@ installkernel() { net_module_filter() { local _net_drivers='eth_type_trans|register_virtio_device' local _unwanted_drivers='/(wireless|isdn|uwb)/' - local _fname - while read _fname; do - local _fcont - case "$_fname" in - *.ko) _fcont="$(< $_fname)" ;; - *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; - esac - [[ $_fcont =~ $_net_drivers - && ! $_fcont =~ iw_handler_get_spy \ - && ! $_fname =~ $_unwanted_drivers ]] \ - && echo "$_fname" - done + function nmf1() { + local _fname _fcont + while read _fname; do + case "$_fname" in + *.ko) _fcont="$(< $_fname)" ;; + *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; + esac + [[ $_fcont =~ $_net_drivers + && ! $_fcont =~ iw_handler_get_spy|$_unwanted_drivers ]] \ + && echo "$_fname" + done + } + # Use two parallel streams to filter alternating modules. + local merge side2 + ( ( local _f1 _f2 + while read _f1; do echo "$_f1" + if read _f2; then echo "$_f2" 1>&${side2}; fi + done \ + | nmf1 1>&${merge} ) {side2}>&1 \ + | nmf1 ) {merge}>&1 } find_kernel_modules_by_path drivers/net | net_module_filter | instmods
Signature · 1 line
1.7.6
From 67e77533c3f6031d108468a1015e2fb88460e866 Mon Sep 17 00:00:00 2001
From: John Reiser <jreiser-L8/tzxVKHrlWk0Htik3J/[email protected]>
Date: Fri, 23 Sep 2011 09:01:50 -0700
Subject: [PATCH 3/3] Fix nmf1
--- modules.d/40network/module-setup.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
modules.d/40network/module-setup.sh +2 -1
@@ -30,12 +30,13 @@ installkernel() { function nmf1() { local _fname _fcont while read _fname; do + [[ $_fname =~ $_unwanted_drivers ]] && continue case "$_fname" in *.ko) _fcont="$(< $_fname)" ;; *.ko.gz) _fcont="$(gzip -dc $_fname)" ;; esac [[ $_fcont =~ $_net_drivers - && ! $_fcont =~ iw_handler_get_spy|$_unwanted_drivers ]] \ + && ! $_fcont =~ iw_handler_get_spy ]] \ && echo "$_fname" done }
Signature · 1 line
1.7.6
A message that is not in the archive (sent off-list or not yet received): 4E7CB109.9020500-Po6cBsTGB2ZWk0Htik3J/[email protected]
Harald Hoyer
AppliedQuoted 5 lines · John Reiser
Filtering modules requires enough work that
instmods()in the next pipeline stage was rarely busy. Parallelize the two filters which do the most work. Also fix a filename-vs-contents mistake innet_module_filter.
pushed to temporary http://git.surfsite.org/dracut.git
Thanks!