aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2008-09-16 09:41:16 +0200
committerHarald Hoyer <harald@redhat.com>2008-09-16 10:38:10 +0200
commitcefaaa0dd6b2d60f674875cc8b86d5846e8033f7 (patch)
tree7d0c98ac43be903b407366c396362ab782a2aa32
parentc0e42318dcca68d960ca1d7977af2979bc99b8aa (diff)
downloadinitscripts-cefaaa0dd6b2d60f674875cc8b86d5846e8033f7.tar
initscripts-cefaaa0dd6b2d60f674875cc8b86d5846e8033f7.tar.gz
initscripts-cefaaa0dd6b2d60f674875cc8b86d5846e8033f7.tar.bz2
initscripts-cefaaa0dd6b2d60f674875cc8b86d5846e8033f7.tar.xz
initscripts-cefaaa0dd6b2d60f674875cc8b86d5846e8033f7.zip
https://bugzilla.redhat.com/show_bug.cgi?id=437110
On System z, typical hardware setups can consist of up to several thousand I/O devices. The current udev rules for handling these devices and the ccw_init helper script are implemented in an insufficient way, leading to unnecessarily high usage of memory and cpu time during system startup. The attached patch against the initscripts-8.45.19.EL-1 source RPM reduces this resource usage drastically by a) fixing a number of coding problems in helper script ccw_init (the current version creates failure indications in /dev/.udev/failed for each device) b) restricting the ccw_init script to network devices (ccw_init is only relevant for network devices) Using these changes, memory consumption on an example system with ~1500 devices could be reduced by 80% (VSZ), resp. 50% (RSS) and the elapsed duration for udev could be reduced from 19s down to 6 seconds. Business case: with reduced memory and time consumption during startup, more Linux images can be run with the same amount of resources.
-rwxr-xr-xsrc/ccw_init13
-rw-r--r--udev/rules.d/55-ccw.rules10
2 files changed, 16 insertions, 7 deletions
diff --git a/src/ccw_init b/src/ccw_init
index 707ae009..beeaf8bf 100755
--- a/src/ccw_init
+++ b/src/ccw_init
@@ -3,7 +3,7 @@
[ -z "$DEVPATH" ] && exit 0
[ "$SUBSYSTEM" != "ccw" ] && exit 0
-. /etc/init.d/functions
+NOLOCALE="yes"
. /etc/sysconfig/network-scripts/network-functions
@@ -13,15 +13,16 @@ CHANNEL=${DEVPATH##*/}
CONFIG=$(get_config_by_subchannel $CHANNEL)
-cd /etc/sysconfig/network-scripts
-
-source_config
+if [ -n "$CONFIG" ]; then
+ cd /etc/sysconfig/network-scripts
+ source_config
+fi
# SUBCHANNELS is only set on mainframe ccwgroup devices
-[ -z "$SUBCHANNELS" -o -z "$NETTYPE" ] && return
+[ -z "$SUBCHANNELS" -o -z "$NETTYPE" ] && exit 0
DIR="/sys/bus/ccwgroup/drivers/$NETTYPE"
SYSDIR="$DIR/${SUBCHANNELS//,*/}"
-[ ! -e $DIR/group ] && return
+[ ! -e $DIR/group ] && exit 0
echo "$SUBCHANNELS" > $DIR/group
if [ -n "$PORTNAME" ]; then
if [ "$NETTYPE" = "lcs" ]; then
diff --git a/udev/rules.d/55-ccw.rules b/udev/rules.d/55-ccw.rules
index d32f125a..dc0db663 100644
--- a/udev/rules.d/55-ccw.rules
+++ b/udev/rules.d/55-ccw.rules
@@ -1 +1,9 @@
-ACTION=="add", SUBSYSTEM=="ccw", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="1731/01", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="1731/05", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="1731/06", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/01", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/08", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/60", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/61", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/1E", RUN+="/lib/udev/ccw_init"
+ACTION=="add", SUBSYSTEM=="ccw", SYSFS{cutype}=="3088/1F", RUN+="/lib/udev/ccw_init"