On Thursday 20 January 2005 19:08, Jürgen Jentsch wrote:
Wenn ich time Programmname ausführe, zeigt er mir die Gesamtzeit, die Zeit im Usermode und die Zeit im Kernelmode, zb: real 0m19.915s user 0m3.500s sys 0m0.273s
real ist die Zeit, die Du auch mit der Stoppuhr messen kannst. Die anderen beiden beziehen sich auf die Zeit, die der Prozess die CPU belegt hatte. Während sys war er dabei im Kernelspace. Also er rechnete an Systemcalls rum. Während user war er im Userspace. Meist ist sys sehr viel kleiner als user, da die meisten Systemcalls nur wenig rechnen. Hier ein paar Experimente, die das vielleicht verdeutlichen: 1.) einige Additionen in perl:
time perl -e 'for($i=0; $i<10000000; $i++) {}'
real 0m1.227s user 0m1.214s sys 0m0.002s Das ist ein fast reines userspace Programm, das auch immer bereit ist, den Prozessor zu belegen. Daher viel user, wenig sys und real=sys+user 2.) Rechnen im Kernel: /dev/urandom liefert Pseudozufallszahlen, die der Kernel berechnet. Viel lesen aus /dev/urandom sollte also viel sys erzeugen:
time dd if=/dev/urandom of=/dev/null bs=10k count=1000 1000+0 records in 1000+0 records out
real 0m2.020s user 0m0.002s sys 0m2.004s Wie erwartet. 3.) Viel warten, CPU nicht belegt, daher sollten user und sys im Vergleich zu real sehr klein sein. Hierfür eignen sich fast alle IO Operationen (FTP, HTTP über ein reales Netz, Disk IO mit DMA, Terminal IO, ...) oder auch einfach sleep.
time sleep 2
real 0m2.005s user 0m0.001s sys 0m0.003s Torsten