<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>Runtime Analysis Tools (RAT)</title>
</head>
<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->

<style type="text/css">
dt {
	display: list-item;
	list-style-position: outside;
	list-style-image:
		url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
	margin-left: 16px;
}

dd {
	margin-left: 25px;
	margin-bottom: 5px;
}
</style>
<body>
<h2>Introduction</h2>
<p>The Runtime Analysis Tools is a proposed open source project
	under the Eclipse Tools Project. This proposal is in the Project
	Proposal Phase (as defined in the Eclipse Development Process document)
	and is written to declare its intent and scope. The proposal is written
	to solicit additional participation and input from the Eclipse
	community. You are invited to comment on and/or join the project.</p>
<h2>Description</h2>
<p>The Runtime Analysis Tools is a tool for performance analysis and
	finding CPU/Allocation and other bottlenecks in Java applications. It
	is useful to any Java software engineer. An application or more complex
	application systems like an Eclipse Installation or an application
	server can be closely analyzed. The analysis may be performed online or
	offline basing on existing CPU and Memory snapshots. Such snapshots may
	be written on termination of the Java Virtual Machine or any arbitrary
	point in time through profiler agent.</p>
<h2>Background</h2>
<p>The motivation for this project is to provide a tool to analyze
	performance failures of critical development and production systems
	that suffer from performance problems. These problems are often hard to
	analyze usually and may require careful analysis which is hard to
	perform without sophisticated tools.</p>

<p>Before starting to develop these tools we investigated and tried
	to use a lot of commercial and open source profilers. Some of them were
	good in certain domain areas like high level profiling, but lacked
	stability or scalability or suffered from performance overhead. Finally
	we came to conclusion that performance and functionality of existing
	tools could not match the demands and started the project.</p>
<p>Profiling overhead and scalability for programs having millions
	of traces was a big problem. The performance problems were solved with
	a use of sophisticated data structures, highly tuned caches and
	carefully tuned algorithms. Later efforts went more and more into the
	area of usability and functionality. Overall goal was to make finding
	and resolving performance problems as simple as possible for end user.</p>
<p>Each issue or usage complexity reported by end user was a source
	of inspiration to add new functionality, so the project evolved in a
	practical and useful tool for diagnosing performance problems in
	application servers and standalone Java applications like Eclipse-based
	products.</p>
<p>In the end of 2006 the project was initiated by Instantiations as
	an effort to create world leading Java performance analysis suite,
	Pavel Petrochenko developed the specification and started developing
	the project prototype with an active help of Ilya Seleznev. In April
	2008, OnPositive was chosen by Instantiations as a primary consulting
	service provider and development force for Profiler project. In the
	August 2010 project was transferred to Google as a part of
	Instantiations acquisition. Later Google decided to contribute the
	project to Eclipse community, and chose OnPositive developers as
	primary project committers.</p>
<h2>Project Scope</h2>
<p>Project scope is to create a framework for building profilers to
	provide solid performance and memory analysis tooling, which will play
	well with Eclipse platform. Also the project intends to provide an
	exemplary implementation of profiler for Java language. However basing
	on this implementation project may serve as a foundation for building
	profiling tools for other platforms and programming languages.</p>
<h2>Relationship with other Eclipse Projects</h2>
<p>It seems that this project may be synergetic to the Memory
	Analyzer project which provides state of art heap analysis tools for
	Eclipse platform(for example in further releases we are planning to
	integrate MAT tooling to serve instead of current memory analyzer
	implementation). Other potential points for collaboration are seen with
	DLTK and PDT projects that may benefit from common core and UI, which
	may serve as a good foundation for building profiling tools integrated
	with existing IDEs for PHP, Python and other programming languages.</p>
<p>Relationship to TPTP: project is planned to serve as a
	replacement for archived TPTP project</p>
<h2>Initial committers</h2>


<p>The proposed initial committers are:</p>
<dl>
	<dt>Pavel Petrochenko (OnPositive Technologies) - Project lead</dt>

	<dt>Ilya Seleznev (OnPositive Technologies)</dt>

	<dt>Denis Denisenko (OnPositive Technologies)</dt>

	<dt>Dmitry Karpenko (OnPositive Technologies)</dt>


</dl>
<p>Pavel and Ilya was in this project from start. Denis and Dmitry
	contributed to it on 2008 to 2010 time frame.</p>
<h2>Contributions</h2>
<p>The initial contributions will be focus on evolving and
	stabilizing current tool functionality and implementation, as well on
	separation of project core and Java specific project functionality
	which will allow reusing existing functionality with other programming
	languages and platforms. After the separation it would be even possible
	to replace the whole UI or distribute the tool with a whole different
	set of memory queries.</p>
<p>The committers will continue to improve UI and make it cover new
	core functionality. Further generic memory queries will be added when
	identified.</p>
<p>Contributions in all areas are welcome.</p>
<p>The project's agile development process will follow eclipse.org's
	standards for openness and transparency. The goal is to provide an even
	more useful tool and framework. The tool would greatly benefit from the
	community. There are many different contributions that could be made to
	this tool:</p>
<ul>

	<li>Improve probes/triggers framework to support more
		sophisticated profiling trigger conditions and actions.</li>
	<li>Improve high level profiling functionality to allow more
		detailed/clear profiling of high level operations (for example memory
		cache access or JDO operations).</li>
	<li>Provide advisor framework which will allow to heuristically
		detect common performance problems/bugs at runtime and will suggest
		solutions for them (common case, which may be easily detected is
		searching in big list-based collections or highly fragmented IO
		access)</li>
</ul>
<h2>Developer community</h2>
<p>The project expects to extend the initial set of committers by
	actively supporting a developer community. The goal is to have the
	initial developer community harden the core of the basic inspection and
	expert system platform to the point where it is easy for any other
	extension to leverage on the technology. The Runtime Analysis Tools
	project will encourage all active contributors to become committers.
	The project will make it easy for interested parties to take an active
	role in the project by making the planning and process transparent and
	remotely accessible.</p>
<h2>User community</h2>

<p>The Runtime Analysis Tools project is aiming to provide a state
	of art open source profiling tool which may be useful to a large
	community of Java developers and may help to improve quality of Java
	applications in general. As such, supporting and soliciting feedback
	from a large user community of commercial developers is critical to
	create an even more useful tool in the future. The project plans on
	doing this by using the standard eclipse.org mechanisms of supporting
	an open project and a community of early adopters.</p>

	<h2>Mentors</h2>

	<p>The following Architecture Council members will mentor this
		project:</p>
	<ul>
		<li>Ed Merks</li>
		<li>Gunnar Wagenknecht</li>
		<li>Chris Aniszczyk</li>
		<li>Kim Moir</li>
	</ul>
	
<h2>Legal issues:</h2>
<p>Currently some parts of initial code base depend on or are
	derived from LGPL libraries. These parts will be rewritten to use EPL
	alternatives:</p>
<ul>
	<li>Charting part of the project is based on JFreeChart library
		rewritten to SWT (LGPL).
		<p>
			<i>Switching to BIRT looks like a viable approach for replacing
				this library. However, more analysis is required here because using
				BIRT might introduce some technical issues, including performance
				issues with real-time charting</i>
		</p></li>
</ul>

<h2>Changes to this Document</h2>


<table border="1">
	<tbody>
		<tr>
			<td><strong>Date</strong>
			</td>
			<td><strong>Change</strong>
			</td>
		</tr>
		<tr>
			<td>01-Dec-2010</td>

			<td>Document created</td>
		</tr>
		<tr>
			<td>15-Dec-2010</td>
			<td>Document released for public review</td>
		</tr>
		<tr>
			<td>11-March-2011</td>
			<td>Minor changes covering relationship with MAT and TPTP
				projects. Added mentors.</td>
		</tr>
	</tbody>
</table>

<div></div>
<html>
<body></body>
</html>