[GLUGHF] Ubuntu, fsck läuft, Anmeldung bereits möglich
Frank Bergmann
tx-7-12 at tuxad.com
Sun Feb 28 10:57:27 CET 2010
In Sun, 28 Feb 2010, Lutz Neumann cum veritate scripsit :
> Einer hat noch einen Vorschlag mit mount gemacht. Diesen habe ich
> aufgegriffen und im startscript des vdr leicht abgewandelt eingebaut:
>
> while [ $( mount | grep -c ' on /var/lib/video.00' ) -eq 0 ]
Immer dran denken: Die Bash ist die lahmste Shellkruecke wo jibt!
1) Command substition bedeutet extra fork(). Und Molochs wie die bash muss
man nicht unbedingt forken, wenn es nicht noetig ist. Und Pipes benoetigen
auch ohne Substitution eine Subshell. Also bitte vermeiden, wenn's geht.
2) Der Rueckgabewert der Ersetzung muss als numerischer Wert geparsed
werden und numerisch verglichen werden. Das kann die Bash nicht so toll.
3) Der mount ist ein weiterer fork(). Und wer einmal einen strace auf
einen mount-Befehl gemacht hat, der wird damit vorsichtig umgehen. Seit
ein paar Generationen bietet Linux eine nette direkte Schnittstelle zum
Kernel, das procfs. Das geht damit um Groessenordnungen schneller und
Resourcen schonender.
Mach es lieber so:
until grep -q " /var/lib/video.00 " /proc/mounts
do
...
Falls Du sicher bist, dass eine Bash >= 3.0 vorhanden ist, kannst Du Dir
den fork des aufgeblaehten GNU-grep auch noch sparen, indem Du die Bash
internal Regular Expressions nutzt. Beispiel:
fbergmann:~$ [[ "meinteststring" =~ "test" ]] && echo OK
OK
fbergmann:~$ [[ "meinTeststring" =~ "test" ]] && echo OK
fbergmann:~$
Oder Du nutzt sfgrep. :-)
Es mag jetzt vielleicht wie Tintenpisserei anmuten, aber wenn jedes
daemliche Bashscript in jedem beliebigen Linux-System mit ein bisschen
mehr Knowledge programmiert waere, wuerden einige Linux-Systeme IMHO im
2stelligen Prozentbereich schneller/Resourcen schonender laufen.
Wenn man viel Erfahrung mit Hosts hat, die oefter mal eine Load1 von 50
bis 100 haben, dann merkt man sehr leicht die feinen kleinen Unterschiede
in Bashscripts.
Das parallele Starten von Systemdiensten mittels upstart oder anderer
SysV-Init-Alternativen muesste einen Rechner eigentlich viel schneller bis
zum Prompt booten lassen. Ich habe selbst mehrfach einen "Gewinn" von ca.
2 Sekunden bei einer Bootzeit von um die 50 Sekunden festgestellt. Wow!
Dolle wolle! Jetzt ratet mal, warum der ganze Mist wider Erwarten och
nicht so viel schneller ist. Koennte es vielleicht DAU-Shellprogrammierung
sein?
Kroenungen sind ja dann noch kleine externe Helferlein, wie das usleep von
Red Hat. Ein Meisterstueck in der Kunst des aufgeblaehten C-Codes fuer
extrem simple Funktionen wie EINEN EINZIGEN Syscall. Das Teil ist gegen
libc UND libpopt gelinkt, mehrere KB gross und soll als "kleines" Tool
fuer "optimierte" Shellprogrammierung genutzt werden. Huahaha.
Im Heiseforum steige ich auch nicht mehr auf Diskussionen zum Thema "Linux
ist ein Frickelsystem" ein, weil die Gegenseite immer mehr handfeste
Argumente hat.
Genug ausgekotzt.
Vielleicht haette ich vor "Systemadministration mit C" noch das Thema
"Bashoptimierungen" behandeln sollen. ;-)
EDV Frank Bergmann Tel. 05221-9249753
LPIC-2 Linux Professional Fax 05221-9249754
Elverdisser Str. 25 email iservice at tuxad.com
32052 Herford USt-IdNr DE237314606
--
Q: What, Professor Hawking, puzzles you the most? What do you
think about the most?
A: Women.
More information about the Linux
mailing list