I am sponsoring this case for Sivakumar and closing it approved automatic.
The only high[low]light is the feature disparity between x86 and SPARC.
If anyone would like to discuss it as a fast track let me know.
Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI
This information is Copyright 2008 Sun Microsystems
1. Introduction
1.1. Project/Component Working Name:
Enhancing Ruby with DTrace probes
1.2. Name of Document Author/Supplier:
Author: Sivakumar Shanmugasundaram
1.3 Date of This Document:
04 March, 2008
4. Technical Description
Enhancing Ruby with DTrace probes
Sivakumar Shanmugasundaram <sivakumar at Sun.COM>
4 March 2008
1. Summary and motivation
This project enables Ruby[1] in OpenSolaris[2] to expose DTrace[3]
probes, thus enabling Ruby/Rails[4] users on Solaris to trace/examine
application behavior in a more useful manner than they otherwise are
able to. DTrace is one of Solaris' key features, and this integration
will go a long way in making Solaris the preferred platform for
Ruby/Rails deployment/development.
Ruby was originally delivered by PSARC/2007/600.
11 DTrace probes, developed by DTrace enthusiasts at Joyent[5], are
being integrated into Solaris.
This case seeks Minor Release Binding.
2. Technical issues
2.1. Key objects.
The DTrace probes are part of the Ruby runtime library (libruby.so.1)
which in turn is linked in to the 'ruby' binary and hence is also part
of the 'ruby' binary. No new files are delivered as part of this case.
2.2. Versioning
The DTrace interfaces for Ruby are based on subversion trunk version
501. The interfaces are evolving, and it is unknown whether they will
remain stable across releases.
2.3. Packaging and Delivery
The DTrace probes will be included as a patch to the existing 'ruby'
binary and will be delivered as part of the existing SUNWruby18u
package.
2.4 Platform support
These DTrace probes will initially be available only in the x64
version of Solaris due to a defect (CR # 6659110). This forces us not
to have DTrace support for Ruby on Sparc. The feature parity will be
restored as soon as possible.
3. DTrace Probe dependencies.
The DTrace probes depends on the DTrace packages in Solaris SUNWdtrc
and SUNWdtrp.
4. DTrace probe Internationalization.
The DTrace probes are not internationalized as DTrace does not support
internationalization at this time.
5. Ruby DTrace Documentation.
The list of DTrace probes for Ruby is listed below. Examples for
using the DTrace probes are available in the Joyent's DTrace page [6].
Probe name Description
----------------------------------------------------------------------
function-entry Fires when a Ruby method is entered
function-return Fires when a Ruby method returns
raise Fires when a Ruby exception is raised
rescue Fires when a Ruby exception is rescued
line Fires for every line of Ruby executed
gc-begin Fires right before a GC cycle begins
gc-end Fires right after a GC cycle finishes
object-create-start Fires directly before a Ruby object is allocated
object-create-done Fires when Ruby is finished allocating an object
object-free Fires every time a Ruby object is freed
ruby-probe Probe that can be fired from Ruby code (see below)
Probe Arguments
Probe args0 args1 args2 args3
--------------------------------------------------------------------------
function-entry Ruby class Method name Source file Line number
function-return Ruby class Method name Source file Line number
raise Ruby class Source file Line number -
rescue Source file Line number - -
line Source file Line number - -
gc-begin - - - -
gc-end - - - -
object-create-start Ruby type Source file Line number -
object-create-done Ruby type Source file Line number -
object-free Ruby type - - -
ruby-probe Any string Any string - -
The man page for Ruby will be suitably modified as well, to indicate
the addition of DTrace probes to the interpreter and the list of
probes available as well.
5.1. Manual Pages.
The man page of ruby.1 is changed to include the information about the
availability of DTrace probes in the binary and list of DTrace probes,
its description and their arguments.
The changed man page fragment is in Appendix 1.
6. Interfaces
6.1. Imported Interfaces.
NAME STABILITY NOTES
----------------------------------------------------------------------
Ruby language implementation Uncommitted PSARC/2007/600
DTrace Provider API Uncommitted PSARC/2001/466
6.2. Exported Interfaces.
NAME STABILITY NOTES
----------------------------------------------------------------------
function-entry Uncommitted DTrace Probe
function-return Uncommitted DTrace Probe
raise Uncommitted DTrace Probe
rescue Uncommitted DTrace Probe
line Uncommitted DTrace Probe
gc-begin Uncommitted DTrace Probe
gc-end Uncommitted DTrace Probe
object-create-start Uncommitted DTrace Probe
object-create-done Uncommitted DTrace Probe
object-free Uncommitted DTrace Probe
ruby-probe Uncommitted DTrace Probe
The description of these probes are listed in the documentation
section 5 above. More details about the usage of these probes, their
decription, the arguments can be found in Joyents web site [6].
7. References.
[1] http://www.ruby-lang.org
[2] http://www.opensolaris.org
[3] http://opensolaris.org/os/community/dtrace
[4] http://www.rubyonrails.org
[5] http://dtrace.joyent.com
[6]
https://dtrace.joyent.com/projects/ruby-dtrace/wiki/Ruby+DTrace+probes+and+arguments
==============================================================================
Appendix 1: Ruby man page changes
FEATURES
...
DTrace Probes
Ruby has a set of DTrace probes that can be used to debug a running
Ruby/Rails application. NOTE: This is on x86/x64 platform only.
function-entry - Probe that fires when a Ruby method is entered
function-return - Probe that fires when a Ruby method returns
raise - Probe that fires when a Ruby exception is raised
rescue - Probe that fires when a Ruby exception is rescued
line - Probe that fires for every line of Ruby executed
gc-begin - Probe that fires right before a GC cycle begins
gc-end - Probe that fires right after a GC cycle finishes
object-create-start - Probe that fires directly before a Ruby object
is allocated
object-create-done - Probe that fires when Ruby is fin- ished
allocating an object
object-free - Probe that fires every time a Ruby object is freed
ruby-probe - Probe that can be fired from Ruby code (see below)
Probe Arguments
function-entry "Ruby class" "Method name" "Source file" "Line number"
function-return "Ruby class" "Method name" "Source file" "Line
number"
raise "Ruby class" "Source file" "Line number"
rescue "Source file" "Line number"
line "Source file" "Line number"
gc-begin ""
gc-end ""
object-create-start "Ruby type" "Source file" "Line number"
object-create-done "Ruby type" "Source file" "Line number"
object-free "Ruby type" ruby-probe "Arbitrary string" "Arbitrary
string"
...
NOTES
Source for ruby is available on http://opensolaris.org.
The source for the DTrace probes for Ruby and examples are available on
http://dtrace.joyent.com.
6. Resources and Schedule
6.4. Steering Committee requested information
6.4.1. Consolidation C-team Name:
sfw
6.5. ARC review type: Automatic
6.6. ARC Exposure: open