Chapter 2.  IC2D: Interactive Control and Debugging of Distribution

IC2D is a graphical environment for remote monitoring and steering of distributed and grid applications . IC2D is built on top of ProActive that provides asynchronous calls and migration.

IC2D is available in the form of a Java standalone application based on Eclipse Rich Client Platform (RCP) , available for several platforms (Windows, Linux, Mac OSX)

2.1. Monitoring and Control

IC2D is based on a plugin architecture and provides 2 plugins in relation to the monitoring and the control of ProActive applications:

  • The Monitoring plugin which provides a graphical visualisation for hosts, Java Virtual Machines (JVMs), and active objects, including the topology and the volume of communications.

  • The Job Monitoring plugin which provides a tree representation of all these objects.

2.1.1. The Monitoring plugin

2.1.1.1. The Monitoring perspective

The Monitoring plugin provides the Monitoring perspective displayed in the Figure 2.1, “The Monitoring Perspective”.

This perspective defines the following set of views :

  • The Monitoring view: contains the graphical visualisation for ProActive objects

  • The Legend view: contains the legend corresponding to the Monitoring view's content

  • The Console view: contains log corresponding to the Monitoring view's events

The Monitoring Perspective

Figure 2.1. The Monitoring Perspective


2.1.1.2. Monitor a new host

In order to monitor a new host:

  1. open the Monitoring Perspective: Window->Open Perspective->Other...->Monitoring (in the standalone IC2D, it should be already opened because it is the default perspective)

  2. Click-right on the Monitoring view and select Monitor a new host... . It opens the "Monitor a new Host" dialog displayed in the Figure 2.2, “Monitor New Host Dialog”

  3. enter informations required about the host to monitor, and click OK

Monitor New Host Dialog

Figure 2.2. Monitor New Host Dialog


2.1.1.3. The Monitoring buttons

The Monitoring view provides some functionalities which are accessible through a set of buttons. This section describes all these buttons:

Monitor a new host

Figure 2.3. Monitor a new host


Display the "Monitor a new host" dialog in order to monitor a new host.

Set depth control

Figure 2.4. Set depth control


Display the "Set Depth Control" dialog in order to change the depth variable. Let us assume we have 3 hosts (A, B and C). On A, there is an active object oaA which communicates with another active object oaB which is on B. This one communicates with an active object oaC on C, and aoA does not communicate with aoC. Then if we monitor A, and if the depth is 1, we will not see aoC.

Set time to refresh

Figure 2.5. Set time to refresh


Display the "Set Time to Refresh" dialog in order to change the time to refresh the model. And find the new added objects.

Refresh

Figure 2.6. Refresh


Refreh the model.

Enable/Disable Monitoring

Figure 2.7. Enable/Disable Monitoring


When the eye is opened the monitoring is activated.

Zoom In

Figure 2.8. Zoom In


Zoom out

Figure 2.9. Zoom out


New Monitoring View

Figure 2.10. New Monitoring View


Open a new Monitoring view. This button can be used in any perspective. The new created view will be named 'Monitoring#number_of_this_view'


All the other buttons concern the IC2D debugging features and will be describe latter on in Chapter 3, Using IC2D debugging features.

2.1.1.4. The Virtual Nodes list

On the top of the Monitoring View, one can find the Virtual Nodes list. When some nodes are monirored, their virtual nodes are added to this list. And when a virtual node is checked, all its nodes are highlighted.

Virtual nodes List

Figure 2.11. Virtual nodes List


2.1.1.5. Management of the communications display

At the bottom of the Monitoring view, one can find a set of buttons used to manage the communications display:

  1. Auto Reset: automatic reset of communications, you can specify the auto reset time.

  2. Drawing style : defines how arrows are displayed. The 3 following options are available:

    • Proportional : arrows thickness is proportional to the number of requests

    • Ratio: arrows thickness uses a ratio of the number of requests

    • Fixed: arrows always have the same thickness whatever the number of communications

  3. Topology: shows/hides communications, and erases all communications

  4. Monitored Objects : Sum up of monitorized objects. It shows how many active objects, JVMs and hosts are monitored.

2.1.2. The TimIt plugin

The TimIt plugin for IC2D provides the ability to profile a distributed application in real time.

The activation of profiling is done through a TimItTechnicalService attached to the virtual node that contains active objects the user want to profile.

In your deployement descriptor you have to declare the technical service :

<technicalServices> 
    <class name="org.objectweb.proactive.benchmarks.timit.util.service.TimItTechnicalService">
        <property name="timitActivation" value="all"/>          
        <property name="reduceResults" value="false"/>
        <property name="printOutput" value="false"/>     
    </class>
</technicalServices>

This technical service can be either defined into the proactive application definition or into the virtual node one.

As shown in Figure 2.12, “ Gathering stats ”, clicking-right in the monitoring panel, the user can collect some usefull information from active objects during the execution time to analyse the application performance.

Gathering stats

Figure 2.12.  Gathering stats


For that, 3 views are available.

2.1.2.1. TimIt Main View

The main view, shown in Figure 2.13, “ Time snapshots for 2 active objects ”, is composed of bar charts (one chart per active object). Each chart represents cumulated times of different states that the active object has been in.

Time snapshots for 2 active objects

Figure 2.13.  Time snapshots for 2 active objects


2.1.2.2. TimIt Tree View

The tree view, shown in Figure 2.14, “ Hierarchical decomposition of the total time of an active object ”, allows a more detailed hierarchical decomposition view of the total time for a particular active object.

Suppose that your active object class is:

package org.objectweb.user.example;

public class ActiveObjectClass{
    public ActiveObjectClass(){}

    public void methodA(Integer i, Double d){}

    private void methodB(){}

    protected void methodC(){}
}

The hierarchical time decomposition includes times of user active object class methods (that must be public and non-final) served as requests (i.e. called by other active objects).

  • Total - The total time since the creation of the active object.

    • WaitForRequest - The time spent on waiting for requests.

    • Serve - The time spent on serving incoming requests.

      • org.objectweb.user.example.ActiveObjectClass.methodA(Integer, Double) - The time spent on serving the methodA as a request (local calls to this method are not included).

        • UserComputation - The time spent on computation (i.e. everything except communications).

        • SendRequest - The time spent on sending requests to other active objects.

          • BeforeSerialization - The time spent before the serialization of requests to other active objects.

          • Serialization - The time spent on serializing requests to other active objects.

          • AfterSerialization - The time spent after the serialization of requests to other active objects.

          • LocalCopy - The time spent on copying arguments in case of communications with local active objects.

        • SendReply - The time spent on sending replies to other active objects.

        • GroupOneWayCall - The time spent on performing asynchronous one way calls to groups of active objects (void methods).

        • GroupAsyncCall - The time spent on performing asynchronous calls to groups of active objects (non-void methods).

        • WaitByNecessity - The time spent on waiting by necessity.

Hierarchical decomposition of the total time of an active object

Figure 2.14.  Hierarchical decomposition of the total time of an active object


2.1.2.3. TimIt Timeline View

The timeline view shown in Figure 2.15, “ The timeline for 7 active objects ” represents all events that were recorded during a certain time-lapse. The color of each event corresponds to the same color defined in the Legend view. This view shows the intensity of particular states (serving, waiting for request, etc.).

The timeline for 7 active objects

Figure 2.15.  The timeline for 7 active objects


2.1.3. The ChartIt plugin

The ChartIt plugin allows users to chart in real time any numerical values provided by ProActive resources such as runtimes (JVMs), nodes and active objects involved in a distributed application.

To understand the following explanation the reader should be familiar with JMX technology. More precisely, the default behavior uses numerical values that are based on attributes of JMX MBeans associated with each ProActive resource. Meanwhile it is possible to provide custom resources to the ChartIt plugin with user-defined providers of numerical values.

Many chart types are available including bars, lines, pies and time based series. ChartIt uses 2 external APIs for chart rendering :

  • BIRT - For bars, lines, pies and area charts.

  • RRD4J - For time based series (including values sampling).

For a quick start, as shown in Figure 2.16, “ Show PA_JVM<ID> in ChartIt (right-click in Monitoring View). ”, simply right-click on a ProActive runtime (a JVM) representation in the Monitoring View and click on Show PA_JVM<ID> in ChartIt.

Show PA_JVM<ID> in ChartIt (right-click in Monitoring View).

Figure 2.16.  Show PA_JVM<ID> in ChartIt (right-click in Monitoring View).


An editor-based view will appear with a predefined set of different charts representing various numerical values such as heap-size of the selected ProActive runtime (JVM), threads and others.

ChartIt Charts tab view.

Figure 2.17. ChartIt Charts tab view.


The current set of charts is predefined for a ProActive runtime (a JVM). ChartIt offers a way to change the current configuration with other chart types in the Overview tab of the ChartIt editor.

To do so, click on the Clear button (cross button) at the top-right corner of the ChartIt editor and click on Overview tab as shown in Figure 2.18, “ChartIt Overview tab view.”.

ChartIt Overview tab view.

Figure 2.18. ChartIt Overview tab view.


The Overview tab is composed of following sections :

  • Resource Description - contains various information about the monitored resource.

  • Available Data Providers - contains a table of all available data providers (based by default on MBean's attributes). Only numerical type based data providers can be used as input for a chart, such data providers are represented with a blue circle icon in the table.

  • Data Provider Details - contains the description and the value of the selected data provider.

  • Chart Description - contains the description of the current chart. More precisely, the chart name, the chart type, the refresh period (in seconds) and a list of used data providers. These data providers MUST be numerical.

  • Charts - contains a list of available charts, buttons to create/remove a chart and save/load the current configuration. The selected chart in the list will be described in the Chart Description section.

Let us add another chart to the current configuration as shown in Figure 2.19, “ChartIt Overview tab: create a new chart.”. To do so, simply click on Create button in the Charts section. A new chart will appear in the charts list, with a default name (automatically selected in the description section where you can change its name). Then add some data providers from the Available Data Providers section by selecting one or more in the table (you can select multiple providers by pressing CTRL key on your keyboard).

ChartIt Overview tab: create a new chart.

Figure 2.19. ChartIt Overview tab: create a new chart.


Once your chart has been created simply click back on the Charts tab in the ChartIt view to see your chart as shown in the Figure 2.20, “ChartIt Charts tab with custom chart.”. For instance, the custom pie chart represents the percentage of user/internal bodies on the monitored ProActive runtime (ie the monitored JVM).

ChartIt Charts tab with custom chart.

Figure 2.20. ChartIt Charts tab with custom chart.