Portál AbcLinuxu, 15. května 2025 11:45

Dotaz: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?

27.10.2012 22:42 vasek
Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Přečteno: 413×
Odpovědět | Admin
Ahoj. V PHP mám napsaný nějaký skript a potřeboval bych spolehlivě zjišťovat, jak dlouho se vykonával určitý cyklus. Zásadní problém je, že pokud použiju třeba microtime() před cyklem a po cyklu znovu a odečtu od sebe naměřené hodnoty, tak získám nějaký čas, který vůbec nemusí odpovídat dobu běhu - může dojít k přestupné sekundě nebo např. ntpd může zrovna zpomalovat čas. Jak mám tedy tu dobu spolehlivě zjistit?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.10.2012 23:34 l4m4
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pravděpodobně hledáš getrusage(). Pokud bys chtěl měřit skutečný fyzikální čas, tak tomu je asi nejbližší CLOCK_MONOTONIC_RAW čas vrácený clock_gettime(), ale jak/zda se to dá zavolat z PHP, netuším.
28.10.2012 23:28 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Len upozornim, ze getrusage() vrati spotrebovany procesorovy cas, co sa samozrejme nemusi rovnat fyzikalnemu casu - uloha proste moze realne bezat ovela dlhsie, pretoze tvojej aplikacii proste nebol procesor prideleny, pripadne cakala napr. na disky.
28.10.2012 23:40 l4m4
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Ano, v průběhu vykonávání se může stát spousta věcí od uspání po přemigrování na jiný node clusteru... Jde-li o měření CPU-bound akce, tak je getrusage() IMO vhodná veličina, protože ji až tak moc neovliňuje kontext vykonávání. Jde-li ale o změření, jak dlouho potrvá nastavit monochromátor ovldádaný přes RS232 na danou vlnovou délku, tak je samořejmě zapotřebí měřit fyzikální čas.
28.10.2012 23:33 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
co tak vyuzit na to systemovy uptime? /proc/uptime
Josef Kufner avatar 29.10.2012 02:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obávám se, že s tímhle máš smůlu. Těch věcí se může přihodit mnoho a prakticky nemáš šanci to ani zjistit.

Díky tomu, že microtime vrací unixový timestamp, tak tě přestupná sekunda a podobné blbosti netrápí. Unixový timestamp je krásná lineární posloupnost bezjakýchkoliv zoubků a uzlíků.

Ovšem ntpd ti to rozhodit může. Velké záporné změny je snadné detekovat prostým ověřením, zda rozdíl časů je kladný. A s tím zbytkem... no... příjemnou zábavu. Asi nejjednodušším řešením je sestřelit na potřebnou dobu ntpd a doufat, že nic jiného na čas hrabat nebude. Ale pokud jde jen o nějaký profiler, kašli na to.
Hello world ! Segmentation fault (core dumped)
29.10.2012 09:51 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Nemas pravdu, uz tu padli dva navrhy, ktorymi by to bolo mozne urobit. Pre priklad, ak sa jedna o fyzicky stroj a nie virtualny, tak /proc/uptime by mal byt vcelku presny, vypocitava sa na zaklade frekvencie procesoru (standardne sa navysuje kazdych 100 Hz, co je na vacsine architektur 0,01 sekundy).
Josef Kufner avatar 29.10.2012 11:00 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Ptá se na PHP, nikoliv nutně na Linux. Pokud to pak hodí na server s BSD nebo přibere kolegu s Windows, má smůlu. Leda by pro každou podporovanou platformu sehnal způsob, jak to zjistit, ale pochybuju, že se mu to vyplatí.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 29.10.2012 11:02 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
... navíc nikde nemá zaručeno, že systémové hodiny jdou správnou rychlostí.
Hello world ! Segmentation fault (core dumped)
30.10.2012 09:18 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
/proc/uptime nezavisi od systemovych hodin, procesorovy cas neviem
frEon avatar 29.10.2012 14:17 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Jak v PHP spolehlivě zjistit dobu vykonávání určité části kódu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
proc to potrebujes vedet? Nestacil by profiler?
Talking about music is like dancing to architecture.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.