Chapter 25. IC2D: Interactive Control and Debugging of Distribution

IC2D is a graphical environment for remote monitoring and steering of distributed and grid applications. IC2D features graphical visualisation and drag and drop migration of remote objects. As it is being interfaced with Jini and Globus, it can also serve as a building block for grid and computing portals. IC2D is built on top of RMI and ProActive that provides asynchronous calls and migration.

The basic features of IC2D are:

Graphical Visualisation

Textual Visualisation

Control and Monitoring

Hosts, Java Virtual Machines, Active Objects

Ordered list of messages

Interactive control of mapping upon creation

Topology: reference and communications

Status: waiting for a request or for a data

Interactive control of destination upon migration

Status of active objects (executing, waiting, etc.)

Causal dependencies between messages

Dynamic change of deployment

Migration of activities

Related events (corresponding send and receive, etc.)

Drag and Drop migration of executing tasks

The full source of IC2D is included in the distribution and is also browseable on line.

Source code index

25.1. Graphical Visualisation within IC2D

IC2D features graphical visualisation of hosts, Java Virtual Machines, and active objects, including the topology and volume of communications.

 

25.2. Control within IC2D

IC2D permits to interactively and dynamically create new Jvms and Nodes.

A 'drag-and-drop' migration allows to graphically move running active objects between machines.

IC2D permits to visualize related events and AOs state

25.3. Job monitoring and control

IC2D now provides a Job monitoring tool, in order to visualize and control high number of resources. This tool offers different views of a deployed application: per hosts, per jobs,.... To start the Job monitor tool, choose in the IC2D menu: windows --> Show Job Monitor windows

25.4. Launcher

25.4.1. Principles

The launcher allows users to launch applications directly from an XML descriptor file, without any script. The new XML descriptor is nearly the same as classical descriptor files, the syntax is only extended. The deployment will be done in two different phasis.

first, a new node, a "main node" will be created and activated and then, it is this node that will deploy the rest of the application.

25.4.2. MainDefinition tag

A new tag has been introduced, just before the component definition tag. This tag is named "mainDefinition" and its syntax is :

 
  <mainDefinition id="mainID" class="theClassToLaunchContainingAMainMethod">
   <arg value="param1"> 
   <arg value="param2">
   <mapToVirtualNode value="main-Node"/>
  </mainDefinition>

Eventually, several mains might be defined so the id allows to identify all mainDefinitions.

The class attribute is the path where can be found the class to launch.

This class MUST contain a main method.

Then any number of parameters can be declared in arg tags. The parameters will be given to the main method in the same order the were declared.

And finally a mapToVirtualNode tag will link the main info to virtual node, declared with the same name in the virtualNodeDefinitions tag (in componentDefinition).

  <?xml version="1.0" encoding="UTF-8"?>
  <ProActiveDescriptor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="DescriptorSchema.xsd">
   <!-- <security file="../../descriptors/c3dPolicy.xml"></security> --> 
   < componentDefinition>
    < virtualNodesDefinition>
     < virtualNode name="Dispatcher"
 property="unique_singleAO"/>
     < virtualNode name="Renderer"/>
    < /virtualNodesDefinition>
   < /componentDefinition>
   < deployment>
    < register virtualNode="Dispatcher"/>
    < mapping>
     < map virtualNode="Dispatcher">
      < jvmSet>
       < currentJVM/>
      < /jvmSet>
     < /map>
     < map virtualNode="Renderer">
      < jvmSet>
      < vmName value="Jvm1"/>
      < vmName value="Jvm2"/>
      < vmName value="Jvm3"/>
      < vmName value="Jvm4"/>
      < /jvmSet>
     < /map>
    < /mapping>
    < jvms>
     < jvm name="Jvm1">
      < creation>
       < processReference
 refid="localJVM"/>
      < /creation>
     < /jvm>
     < jvm name="Jvm2">
      < creation>
       < processReference
 refid="localJVM"/>
      < /creation>
     < /jvm>
      < jvm name="Jvm3">
      < creation>
        < processReference refid="localJVM"/>
      < /creation>
     < /jvm>
     < jvm name="Jvm4">
      < creation>
       < processReference refid="localJVM"/>
      < /creation>
     < /jvm>
    < /jvms>
   < /deployment>
   < infrastructure>
    < processes>
     < processDefinition id="localJVM">
      < jvmProcess class="org.objectweb.proactive.core.process.JVMNodeProcess"></jvmProcess>
     < /processDefinition>
    < /processes>
   < /infrastructure>
  </ProActiveDescriptor>

25.4.3. API

The Launcher class is located in the package org.objectweb.proactive.core.descriptor. To use it you will have to create a new instance of the launcher with the path of the XML descriptor (this descriptor must contain a mainDefinition tag). The constructor will parse the file and reify a ProActiveDescriptor. You only have to call the activate() method on the launcher instance to launch the application.

For example:Launcher launcher = new Launcher ("myDescriptor.xml") ;

launcher.activate() ;

you can also get the ProActiveDescriptor built by the launcher by calling the getDescriptor() method on the launcher instance.

ProActiveDescriptor pad = launcher.getDescriptor() ;

25.4.4. Launcher in IC2D

You will find the launcher in the launcher menu, in the menu bar. Click then on launch a new application.

Now it opens a new window proposing you to browse your file system for a XML descriptor and load it into a descriptors list. A right click on the list items allows you to launch (activate) the application. Two checkbox control the graphical monitoring and textual job monitoring your application.

You can kill the applications launched with from a popupmenu in the "activated applications" table.

25.5. Grid and cluster computing

As ProActive is interfaced with Globus and LSF, IC2D permits to interactively control and debug applications that execute on intercontinental-wide networks. Below is C3D application deployed with JINI and RMI protocol between Baltimore US and Nice France on a globus cluster and LSF cluster

 

This experiment was partly sponsored by