getrusage / stime a utime

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Červen 27 10:55:46 CEST 2006


On Tue, 20 Jun 2006, Dracula 007 wrote:

>   1) cas potrebny na vyhodnoceni skriptu (realny cas mereny pomoci
>      microtime() jako rozdil hodnot na konci a na zacatku skriptu)
> 
>   2) utime a stime

Teď mne napadlo, že chyták je asi někde jinde: (1) se počítá cca od
zahájení zpracování skriptu do jeho dokončení, zatímco (2) se počítá
od vzniku procesu (fork()) zase do cca ukončení zpracování skriptu.
A teď jde o to, že jeden apačský proces může postupně zpracovávat víc
požadavků, a tudíž (2) může počítat úhrn za mnohem delší období než (1),
čili výsledné hodnoty se mohou jevit větší.

Řešení by asi bylo to udělat zcela symetricky: provádět getrusage() i na
začátku skriptu a také to na konci odečíst.


On Tue, 27 Jun 2006, Dracula 007 wrote:

> Tak myslim si ze ano - konkretne pro getrusage() pocitam takhle:
> 
>     $u = getrusage();
>     $sec = $u['ru_utime.tv_sec'];
>     $usec = $u['ru_utime.tv_usec'];
>     printf("%.6f\n",$sec + $usec/ 1000000);

Dělení miliónem by mělo být správně, ale podle prezentovaných hodnot to
vypadá, jako kdyby se mělo dělit jen tisícem. Je velmi nepravděpodobné,
že by nikdy nevyšla mikrosekundová část větší než 999 us:

>     time     |    utime  |    stime
> -------------+-----------+-----------
>     0.442416 |   1.00067 |   0.00015
>     0.001827 |   1.00048 |   0.00024
>     0.195682 |  12.00083 |   1.00014
>     0.417999 |    0.0007 |   0.00012
>     0.231019 |   0.00061 |     8e-05

Doporučuji tohle ještě prozkoumat. Např. napsat krátký testovací
prográmek, spustit ho pod strace a konfrontovat hodnoty vrácené jádrem a
hodnoty vrácené PHP.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux