time (was: Re: linux-l: SOrtieren.)

Jens Dreger dreger at physik.fu-berlin.de
Fr Nov 26 14:42:10 CET 1999


On Fri, 26 Nov 1999, Ihno Krumreich wrote:

> > 
> > On Wed, 24 Nov 1999, Jens Dreger wrote:
> > 
> > >Kann man denn time nicht sagen, dass man die ganze pipe meint ? Ich meine,
> > >man kann die ganzen Kommandos ja in eine shell-script packen, aber das is'
> > >ja nicht so elegant...
> > 
> > volker at flinux:~ > time find . | sort 2>&1 > /dev/null
> > 
> > real    0m20.727s
> > user    0m0.530s
> > sys     0m2.260s
> > volker at flinux:~ > time find . | sort 2>&1 > /dev/null
> > 
> > real    0m7.258s
> > user    0m0.670s
> > sys     0m5.650s
> > volker at flinux:~ > time (find . | sort 2>&1 > /dev/null)
> > 
> > real    0m6.864s
> > user    0m0.740s
> > sys     0m5.540s
> > 
> > (erster Aufruf 2mal wegen Daten danach im Cache und so)
> > 
> > Jetzt bin ich aber irritiert. time sollte im dritten Aufruf doch
> > eigentlich die Zeit des SubProzesses (find .|sort ...) messen und
> > im zweiten Aufruf (ohne die "()") nur die Zeit von "find .". Aber
> > warum ist der "dickere" Prozess dann sichtlich schneller?
> 
> Das ist er ja garnicht. Die reine Rechenzeit von find&sort ist nicht die Angabe
> von real, sondern von user. Und die ist groesser.

...was Zufall ist. Gib' die obige Zeile einfach 20 mal ein, und Du wirst
sehen, dass die Ergebnisse riesig schwanken. Ausserdem sind die Zeilen
beide identisch, weil bash2 in jedem fall die ganze pipe timed.

Du siehst das sofort, wenn Du mal folgendes ausprobierst:

------------------8<-------------------------------------------
> time sleep 1 | sleep 2                <--- built-in time
real    0m2.011s
user    0m0.000s
sys     0m0.020s

> time (sleep 1 | sleep 2)              <--- built-in time
real    0m2.015s
user    0m0.000s
sys     0m0.000s

> /usr/bin/time sleep 1 | sleep 2        <--- external time
0.01user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (83major+9minor)pagefaults 0swaps

> /usr/bin/time (sleep 1 | sleep 2)
bash2: syntax error near unexpected token `(sleep'

> echo "sleep 1 | sleep 2" | time sh
0.01user 0.01system 0:02.05elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (365major+89minor)pagefaults 0swaps
------------------8<-------------------------------------------

Man sieht, mit dem externen time bekommt man nicht die ganze pipe, es sei
denn, man schreibt sie in ein shell-script.

Jens.

____________________________________________________________________________
Jens Dreger                     | Freie Universitaet Berlin
Cauerstrasse 35a                | Fachbereich Physik, WWW Administration
10587 Berlin                    | Arnimallee 14, 14195 Berlin
Tel: (030)342-3616              | Tel.: (030)838-4774
jens.dreger at physik.fu-berlin.de | webadmin at physik.fu-berlin.de
Frueher war alles anders, warum soll da nicht heute auch alles anders sein ?



Mehr Informationen über die Mailingliste linux-l