Re: Patch to add profiling support to PHP at the PHP level
| From: | George Schlossnagle | Date: | Sun, 28 Jul 2002 16:38:51 +0000 |
| Subject: | Re: Patch to add profiling support to PHP at the PHP level | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-86278@lists.php.net to get a copy of this message | ||
The nice thing about a module which dumps external files is taht you can use the raw data in any number of ways. For example with APD, you can generate a complete call graph, provide statics inclusive or exclusive of child calls, and do rather arbitrary type sorting. This is seems to be the standard for profiling software, as this is what gcc's gprof and perl's DProf do. Since (at least with APD, I assume with DGB as well), you can set and unset the profiler from the application with a php function call, you still have the ability to enable/disable the profiler in the application based on arbitrary application logic.
Also, calling to an external profiler (in php, as you do) generates a large amount of overhead. You should consider using times() over gettimeofday() in your handler, it's much cheaper and provides less overhead bias.
George
On Sunday, July 28, 2002, at 08:15 AM, <swbrown@ucsd.edu> wrote:
Hello, I made a patch to add PHP profiling support to the PHP language. It adds 'set_profile_handler' and 'restore_profile_handler' that work similar to the 'set_error_handler' and 'restore_error_handler' functions and are the minimum needed to allow people to profile their PHP code directly from PHP. The rationale behind adding support to the PHP language for this rather than doing it behind the scenes with C modules is to give people a lot of flexibility over the profiling of their applications and the resulting data. It makes it really easy to do things like save the result to your application's database, profile only on certain conditions and/or for certain users, and lets you easily display the profiling report on the same page that was profiled for example, which saves developers from having to cross-reference profiling logs all the time. The patch, an example profiler that uses it written in PHP, and some example screenshots of that are at: http://www-cse.ucsd.edu/~sbrown/profiler/php-profiler.html The patch is against 4.2.1 and 4.1.2, but is clean on 4.2.2 and surely many other versions. I wasn't sure how PHP's symbol table is affected by function calls, so I strduped the function name and file name across the function call to make sure nothing bad would happen to them. While it works fine, that information is probably preserved somewhere already so the strdups could be removed. // George Schlossnagle// Principal Consultant
// OmniTI, Inc http://www.omniti.com// (c) 240.460.5234 (e) george@omniti.com // 1024D/1100A5A0 1370 F70A 9365 96C9 2F5E 56C2 B2B9 262F 1100 A5A0