DTrace with PHP Update
By cj on Sep 04, 2013
I've recently been working with the in-built DTrace code in PHP 5.4 and PHP 5.5, specifically stabilizing its configuration on Solaris and Oracle Linux.
DTrace is an always-available, low overhead, tracing framework that has just celebrated its 10th Birthday. DTrace support in PHP was originally via a separate PECL extension. In PHP 5.4 David Soria Parra (then at Sun) merged DTrace functionality to core PHP making it more accessible.
At the end of last year, I blogged about Adding DTrace Probes to PHP Extensions and how Linux's SystemTap could be used to trace the DTrace probe points. Since then, Oracle's Linux's DTrace project has been making great strides. The latest Oracle Linux UEK3 Beta kernel was just released. It comes with DTrace 0.4 and also supports "User-Level Statically Defined Tracing" (USDT) for the first time. This motivated me to make sure PHP DTrace worked well with "real" DTrace, not just with SystemTap's wrappers.
Some of the recent PHP DTrace changes were:
DTrace build script changes from PHP 5.5 were merged back to PHP 5.4 so both branches are now in sync.
A 'make install' recursive dependency issue that caused Zend/zend_dtrace.d to be deleted was fixed.
PHP DTrace configuration now uses the correct PIC or non-PIC objects. This also fixed building PHP when any extensions were built 'shared'.
A segmentation fault in the "error" probe was fixed.
PHP's OCI8 2.0 extension now builds correctly with "real" DTrace.
The changes were tested on Solaris and Oracle Linux. The core PHP changes should be available in the next monthly releases, PHP 5.4.20 and PHP 5.5.4. The PHP OCI8 2.0 changes are already available from PECL.
I'll cover more detail about using PHP and PHP OCI8 with DTrace on Oracle Linux in a later blog post, but the basic steps are:
Install the UEK3 kernel, currently in Beta from public-yum.oracle.com.
Install the dtrace-utils package with 'yum install dtrace-utils'
Download a PHP 5.4 or 5.5 snapshot from snaps.php.net (Or download PHP 5.4.20, PHP 5.5.4, or later, once they are available)
Configure PHP with the --enable-dtrace option
Load the DTrace module: modprobe fasttrap
Change the helper device to allow writing: chmod 666 /dev/dtrace/helper
Run a DTrace profiling script and your PHP application
Update: the detail is in a new blog post Using PHP DTrace on Oracle Linux