From: "Gordon Lack" <gml4410@ggr.co.uk>
To: autofs@linux.kernel.org
Subject: Enhancement patch for autofs v4.1.4 init.d script
Date: Tue, 22 Aug 2006 15:18:25 +0100 [thread overview]
Message-ID: <44EB1231.7ABAA89B@ggr.co.uk> (raw)
In-Reply-To: 44AE7785.74E63D70@ggr.co.uk
[-- Attachment #1: Type: text/plain, Size: 690 bytes --]
The init.d autofs script runs a check for "maps within maps"
(actually mountpoints within mountpoints) which it does by looping over
all knownmaps and grepping for a start-of-line match in both directions
(ie: 2 greps).
I was testing some things on a system with 39 maps and was surprised
to find the autofs script took 38 seconds to report on required
reloads. Testing showed that there were ~3000 runs of grep called by
this piece of code.
It is possible to do the same test with internal case statements.
This removes ~3000 calls to grep (I have another system with 49 map, so
it gets nearly 5000...). With this fix applied the autofs script ran in
one quarter of the time.
[-- Attachment #2: enhance.patch --]
[-- Type: text/plain, Size: 943 bytes --]
--- autofs-4.1.4/samples/rc.autofs.in 2006-08-22 14:48:51.000000000 +0100
+++ autofs.enhance 2006-08-22 14:49:51.000000000 +0100
@@ -233,11 +233,21 @@
# another map or another map, maps on top of it.
for knownmap in $knownmaps
do
- if [ "`echo $dir/ | grep ^$knownmap`" != "" \
- -o "`echo $knownmap | grep ^$dir/`" != "" \]
- then
- continue 2
- fi
+# This gets run for all maps on all maps, so is O(n^2)
+# This means 3500 external grep calls for 38 map entries,
+# which is slow. case statements make it much faster.
+#
+# if [ "`echo $dir/ | grep ^$knownmap`" != "" \
+# -o "`echo $knownmap | grep ^$dir/`" != "" \]
+# then
+# continue 2
+# fi
+ case "$dir/" in
+ $knownmap*) continue 2 ;;
+ esac
+ case "$knownmap" in
+ $dir/*) continue 2 ;;
+ esac
done
if [ ! -z "$dir" -a ! -z "$map" \
[-- Attachment #3: Type: text/plain, Size: 140 bytes --]
_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs
next prev parent reply other threads:[~2006-08-22 14:18 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-07 15:02 -hosts and -null enabling for autofs v4.1.x Gordon Lack
2006-07-13 13:10 ` Ian Kent
2006-07-13 13:42 ` Jeff Moyer
2006-07-14 11:33 ` Gordon Lack
2006-07-14 13:31 ` Jeff Moyer
2006-07-14 15:58 ` Gordon Lack
2006-08-07 6:56 ` Ian Kent
2006-08-22 14:03 ` Bug (and patch) in autofs init.d script (v4.1.4) Gordon Lack
2006-08-22 14:18 ` Gordon Lack [this message]
2006-09-08 11:31 ` Bug in autofs v4.1.4 init.d script (and fix) Gordon Lack
2006-09-12 12:58 ` Bug in autofs v4.1.4 init.d script for reload " Gordon Lack
2006-09-13 9:42 ` Gordon Lack
2006-11-10 11:58 ` autofsv5 bug. Non-existent dirs get "mounted"! Gordon Lack
2006-11-10 12:05 ` autofsv5 enhancement - map names in /proc/mounts Gordon Lack
2006-11-10 17:33 ` autofsv5 - mouting files (not dirs) Gordon Lack
2006-11-11 2:58 ` Ian Kent
2006-11-11 2:53 ` autofsv5 enhancement - map names in /proc/mounts Ian Kent
2006-11-13 10:09 ` Gordon Lack
2006-11-13 15:44 ` Ian Kent
2006-11-13 16:58 ` Gordon Lack
2006-11-14 2:00 ` Ian Kent
2006-11-14 10:00 ` Gordon Lack
2006-11-14 11:42 ` Ian Kent
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44EB1231.7ABAA89B@ggr.co.uk \
--to=gml4410@ggr.co.uk \
--cc=autofs@linux.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.