[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
On Jun 29, 2005, at 2:24 AM, Donny Kurniawan wrote:
Greg & Nathan
So basically, we make the runtime model and the debug model the
same?
The two models will share this functionality. Runtime is IPProcess
and up (nodes, machines, etc.) and debug is IPProcess down (threads,
stack frames, etc).
We (Clement and I) are trying to merge our stuff together, but seems
that we are unclear about some things....
1. After the user selects the preferred run time (or monitoring
system) in the preference page.... what happened when the user clicks
the "run" button ???
I do assume that the ParallelLaunchConfigurationDelegate will call
execSimulatedMS() or execORTEMS() based on the chosen monitoring
system....
(footnote: well, currently it's not like that, it just calls execMI
().....)
But, am I correct to assume this????
A runtime system is composed of a monitoring system (MS) and a
control system (CS). The monitoring system observes running
processes, the state of the cluster(s), how many nodes exist on the
machines you know about, etc. The control system is responsible for
starting jobs, terminating jobs, and other related 'control' issues.
The idea is that we may have MPICH as the control system and
something like Supermon or Ganglia as the monitoring system. In the
case of OMPI, both the MS and CS are handled by OMPI (or will be in
time).
When a user selects an MS from the preferences page it causes the
Model Manager to refresh the model based on this new MS. This part
has nothing to do at all with the running of a job, it's only the
monitoring portion. The execORTEMS() and execSimulatedMS() are only
called when the MS is refreshed. All this does is setup the model
internally in ModelManager.java.
When a user clicks on 'run' or 'debug' it currently calls execMI() -
a leftover name from the mpictrl days. This method is being renamed
ModelManager.run(... same args). The code as it is right now calls
the run() method on an IRuntimeModel that the ModelManager has
instantiated. This IRuntimeModel is currently the merger of the MS
and CS. In the next day or so IRuntimeModel will be broken into a
ControlSystemModel and a MonitoringSystemModel. The complexity right
now is how to handle this with OMPI because it drives both the CS and
MS - but I'll work that out.
2. What happened when the user clicks the "debug" button???
Basically... how to make the debug model and the runtime model the
same.....
This calls ParallelLaunchConfigurationDelegate.launch(configuration,
mode, launch, monitor). This same method is called when you click the
"run" button, the difference being that the mode argument is either
the string "run" or "debug". That's the only way to distinguish
between the two. It's then up to the launch method to decide how to
start the process under debug control, or not.
3. Why does ParallelLaunchConfigurationDelegate call execMI??
Looking at ParallelLaunchConfigurationDelegate.java (before my stuff
was added).... it doesn't call execSimulatedMS() nor execORTEMS()....
It calls IModelManager.execMI(...) because it's a left-over name from
the 'mpictrl' days, but this same method will be renamed to
IModelManager.run(...). The reason it doesn't call the MS()
functions in the IModelManager() is that they are private and the
Model Manager refreshes them once
IModelManager.refreshMonitoringSystem(int ID) is called. This is
only called when a Monitoring System changes (notice, not a control
system since a 'run' is a control operation, not a monitoring
operation). The MS changes when the user selects it from the
Preferences.
The IProcess is part of the platform debug model, does
ptp.core.IPProcess extend debug.core.model.IProcess ?
Not currently. But it may need to if necessary.
4. Just wondering why there is no java.lang.Process in
org.eclipse.ptp.internal.core.PProcess ??? Is it because it's designed
that way (i.e. the actual java.lang.Process lives in remote
machines)???
We do need java.lang.Process to be given to DebugPlugin (to register
it in the debug view).... Of course... we can always fool it by
passing a wrapper to java.lang.Process (without the actual operating
system process))
The parallel runtime support doesn't really need to have a
java.lang.Process, since processes are never started with Runtime.exec
() (it's always handled by the CS) and there is no runtime support in
the Eclipse platform that is needed by the parallel runtime system.
That's why we use PProcess, which is used to represent a (possibly
remote) parallel process. All the information the parallel runtime
needs is contained in this class.
The debugger is a different situation, however, since we want to use
platform and CDT debug functionality even though the process is a
PProcess. I think what you'll have to do is create a dummy Process
and associate this with a PProcess. Then whenever the (platform/CDT)
debugger needs a Process you can pass one to it.
I notice that there's code in
ParallelLaunchConfigurationDelegate.launch() that creates a debugger
session and then processes and targets. You need to think through
very carefully if this is how it should work.
It would seem to me that you are going to want the ModelManager
control system to launch the program under external debugger control,
populate the runtime model with PProcess's, then hand control to your
debug code to instantiate the debugger session (which will create
dummy Process's as necessary). I don't think your (simulator) debug
code should be creating the processes used by the model, but it
should provide simulated call stacks and events.
Greg