Summary:
* The idea in question: implementation of Dtrace probes in Rack to
provide easy profiling to a large number of Ruby web frameworks.
* Project would also involve a request visualization app, to serve as
a useful example of what's capable with the probes.
* Your comments are very much appreciated.
I'm interested in implementing a set of Dtrace [1] probes in a Rack
module (similar to Lint), as a project for this year's Google Summer
of Code. These probes could then be used to track and analyze a web
app's performance, with disregard to the web framework or web server
in use for Ruby projects.
The probes would be incorporated into Rack with the use of ruby-dtrace
[2], and would provide Dtrace events for new requests coming in,
errors in the request handling, requests finishing, etc. The probes
could also be used for the monitoring and management of nodes running
Rack.
Adding the probes would likely not take up the 3 months Google's
Summer of Code allows. In fact, I've been able to modify lint.rb with
some simple probes for requests without a large investment in time.
Because of this, the remaining time would be spent working on a
visualization app that would use the probes. Imagine having a web
app's activity statistics baked right in with Rack!
I'm applying this project for mentorship under Ruby on Rails, as I
believe the benefit's evident for it as a web framework. I've already
posted up the idea on their wiki [4].
I'm hoping I can pick up a few comments from this mailing list. For
example:
- Is measuring performance on a per-request basis smart? Is it
feasible?
- Does this seem like a good idea to submit? Bad idea? Why?
- Any insight into how challenging implementing this idea could be?
- Dtrace has only been implemented on Mac OS X, Solaris, and FreeBSD
platforms. Is this too limiting?
- I still haven't found a mentor to help me through the summer
should this idea be accepted. Know anyone interested in helping out?
All opinions appreciated.
[1]
http://en.wikipedia.org/wiki/DTrace
[2]
http://ruby-dtrace.rubyforge.org
[3]
http://github.com/ecin/rack/tree/master
[4]
http://wiki.rubyonrails.org/gsoc/2009/ideas