Professional Documents
Culture Documents
Agent Factory
October 2008
Abstract
Abstract iii
Contents v
List of Figures ix
List of Tables xi
Acknowledgements xiii
1 Introduction 1
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Thesis outline . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3 Profiling 9
v
vi Contents
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Origins of profiling . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 First generation profilers . . . . . . . . . . . . . . . . . . . . 13
3.5 Second generation profilers . . . . . . . . . . . . . . . . . . . 14
3.6 Modern Java profilers . . . . . . . . . . . . . . . . . . . . . . 15
3.7 Profiling in perspective . . . . . . . . . . . . . . . . . . . . . 16
3.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8 Conclusions 103
8.1 Related work . . . . . . . . . . . . . . . . . . . . . . . . . . 103
8.2 Future work . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
8.3 General conclusion . . . . . . . . . . . . . . . . . . . . . . . 105
Appendices 109
Bibliography 117
List of Figures
ix
x List of Figures
C.1 Database schema diagram of the AgentSpotter profile data file 115
List of Tables
xi
Acknowledgements
I would like to thank my thesis supervisor Rem W. Collier for his outstanding
support and guidance.
My thanks also go to my company, Intelligo Software Ltd, for sponsoring
my Master’s degree.
Finally, I am deeply grateful to my wife Stéphanie for everything she has
done to make it all happen.
xiii
CHAPTER 1
Introduction
1.1 Motivation
1
2 Introduction
1
Agent Factory Agent Programming Language
1.2. Objectives 3
system to help developers debug and understand their systems [10, 19].
While logging can deal with simple scenarios, software developers expect
more advanced tools to tackle more elusive and complex performance issues.
Ideally, MAS developers should be able to use a very popular performance
analysis technique called profiling. Profiling is based on the idea that in a
program, only a few places, called bottlenecks or hot spots, can be accounted
for the majority of the execution time of a program. Hence, by fixing
these bottlenecks only, the performance of a program can be substantially
improved. Profiling was introduced 40 years ago by Donald E. Knuth
in his empirical study of FORTRAN programs [26], and has since then
been successfully adapted to different languages, platforms and software
architectures, including large distributed systems.
We strongly believe that a profiler could truly help MAS developers,
novice or experimented. Yet, as far as we know, profiling concepts have
never been applied to agent-oriented programming. Therefore, we propose
to implement the first profiling system for a MAS.
1.2 Objectives
• Chapter 3 – Profiling.
2.1 Definitions
5
6 Agents and multiagent systems
2.2 FIPA
2.4 JADE
“apologize in advance for all those [companies or institutions] that have not
been listed” [50].
2.5 Cougaar
3.1 Introduction
3.2 Definitions
9
10 Profiling
The limited definition does not contradict our general definition, but
it fails to emphasise the key value of profiling which is the eye-opening
quality of the information it extracts from raw performance data, providing
real insight into what drives or hampers the performance of a program and
revealing hidden patterns.
As explained in the next section, that eye-opening quality is what has
made profiling so remarkable right from its inception.
In the following sections, we summarise the history of profiling, following
the time line presented in Figure 3.1.
Nearly forty years ago, in his 1971 paper on the empirical study of FORTRAN
programs [26], Donald E. Knuth introduced a simple yet powerful dynamic
program statistical analysis technique that is still widely in use today:
program profiles.
Originally, a program profile or “frequency counts” was an annotated
program listing showing for each statement the number of times it was
actually executed and its estimated cumulative cost in terms of machine
cycles.
The profiles Knuth generated for his FORTRAN sample programs re-
vealed that “less than 4% of a program generally accounts for more than
half of its running time” [26], which implies that a programmer can make
substantial improvements to a program by using the program’s profile to
identify and remove the hot spots or bottlenecks that account for the ma-
jority of the execution time. This principle is sometimes called the “Pareto
Principle” or the “80/20 law”; it has been universally observed in domains
other than software development [40], and stated as the “vital few and trivial
12 Profiling
prof
Unix profiler ATOM JVMTI
gprof
Customized program New tool interface
Call graph execution
analysis tools API, JVMPI replacement
profiler
Knuth
JVMPI
Profilers
First Java profiler
First profilers
interface API
many” [48] — meaning that in anything a few are vital (20%), and many
are trivial (80%).
Interestingly, Knuth also discovered that often the programmers’ mental
map of the bottlenecks in their programs did not match the actual findings
of program profiles. In other words, profiles were real “eye-openers” and
gave them an unexpected insight into the actual run-time behaviour of their
programs (as opposed to the predicted behaviour). That fact advocates the
necessity of using tools that can help the programmer break the limitations
of their minds and analyse information about running software, which
is otherwise intractable because of the sheer amount of data and events
produced over run-time.
In retrospect, Knuth’s findings have been very influential and have
implicitly driven most of the performance analysis approaches in software
development in the last three decades.
3.4. First generation profilers 13
Technically, the first profilers were the programs that Knuth used for his 1971
study [26]: FORDAP, based on instruction counting, and PROGTIME, based
on program status sampling. Their underlying principles were applied with
nearly no modifications to the first generation of profiling tools represented
by prof and pxp.
FORDAP would take a FORTRAN program as input and would output
an equivalent program that would also maintain frequency counts and write
them into a file. After being compiled and run, the modified program would
produce an annotated listing showing for each statement the number of
times it was actually performed and the estimated total execution time.
PROGTIME was based on a different approach called program status
sampling. PROGTIME would spawn the user program as a subtask and
stop at regular intervals to record with a time stamp the place where the
program under observation was executing. Instead of frequency counts,
PROGTIME would produce execution time listings.
Theoretically both approaches should reveal the same bottlenecks. How-
ever, program status sampling gives a more realistic view of the run-time
behaviour of a program by showing more clearly the low-frequency but time
consuming operations like input and output.
called. The sampling method used by prof means that it is less accurate
than an instruction counting profiler, also called “exact” profiler. When
the execution time of a function is smaller than the sampling interval, it
won’t be properly recorded. Despite these shortcomings, prof is reasonably
accurate for most uses.
Its use involves several steps:
• Compile the program using cc with the “-p” switch to instrument the
program.
prof is the most widely available profiler on UNIX systems, and is indeed
so popular that it is still in use today.
The main contribution of gprof, introduced in the 80’s by Graham et al. [17],
is the call graph. This concept improves on prof’s flat profile. It not only
summarises the time spent in different functions, but also recursively presents
all the call stacks annotated with the time spent in the different functions
called. Another name for the call graph is “hierarchical profile”, which
conveys the idea that gprof provides information to understand the impact
of one function in relation with all the functions that have called it. To put
3.6. Modern Java profilers 15
it crudely, a call graph shows the “where” to help understand why the “how
long” is a problem.
The textual output of gprof is very dense and requires some practice to
understand. We shall see in §3.6 how modern profiler user interfaces have
made the call graph more tractable.
3.5.2 ATOM
The Java Virtual Machine Tool Interface (JVMTI) [49] and assorted tools
inherit from the systems and concept we have previously mentioned. The
main motivation of JVMTI is to provide a standard API like ATOM both
for specialised tool vendors and for casual developers with punctual instru-
mentation needs. The API gives access to JVM internal information items
(call stacks, class metadata, CPU usage counters etc.) that can be pieced
together to create a monitoring application, a profiler or even a debugger.
Modern Java profilers use the JVMTI as their back-end, and offer ad-
vanced technical features like “on-demand” profiling, remote profiling, thread
profiling etc. However, from a conceptual point of view, modern profilers
16 Profiling
have not introduced new ideas, they have just improved on the existing
concepts we presented: flat profiles, call graphs, profiling API. To be fair,
the adoption of graphical user interfaces has made profilers more usable
than ever. For instance, the visual representation of call graphs in tree view
controls has made their interpretation much easier.
3.8 Conclusion
Clearly, profiling could be very useful for MAS developers. So how should
we proceed to map profiling concepts to agent-oriented programming1 ?
In a traditional OOP context, profiling is focused on methods, and
restricted to program or JVM boundaries, with the primary objective of
detecting bottlenecks by looking at method calls frequency counts, method
execution timings, call graphs, memory usage graphs etc.
In a MAS context, however, the profiles and the associated visualisations
are generally too fine-grained and too low level for a relevant analysis of
MAS run-time performance and activities. We shall see in Chapter 5 how
these concepts can be mapped to a MAS context. Beforehand, we need to
provide more theoretical background about the performance issues in MASs.
1
We must mention that profiling has been successfully ported to different programming
paradigms. We think the most striking example is the work of Brassel et al., who describe
in [3] how they have applied run-time profiling to functional logic programs.
CHAPTER 4
Performance concepts and
solutions in MASs
4.1 Introduction
In the light of the history and the current state of performance analysis
tools in non agent-oriented systems, and with the aim of developing a MAS
performance analysis system, the next logical step is to proceed to a survey of
the existing work on MAS performance, with a particular focus on integrated
tool-based solutions.
A first glance at the literature reveals a contrasted picture. On the one
hand, there is a good amount of literature on scalability, which is commonly
admitted as the most significant performance related concept in multiagent
systems. The main motivation of these studies is to provide solutions to the
scalability issues of potentially large MASs that enterprise level applications
require. The solutions described borrow heavily from the distributed systems
research area [13, 4] while trying to come up with concepts truly unique
to the agent-oriented paradigm like self-organising [51, 38, 6, 30] and self-
19
20 Performance concepts and solutions in MASs
tuning systems [30, 6]. On the other hand, it is harder to find papers
about comprehensive solutions that try to reduce the gap between theory
and practice and help non-expert, or impatient, MAS designers conduct
meaningful performance analyses of their system under construction. The
only example of an integrated performance analysis infrastructure that we
found is the Cougaar system described in [19].
Our point is that although MAS performance, specifically scalability, is a
seemingly well studied subject, there is still some work to do to translate the
general conclusions into a comprehensive and usable performance analysis
toolkit integrated with a modern agent platform, which we insist on as being
an important requirement to fulfil if we want to allow non-specialist software
engineers to design enterprise level MASs. Indeed, a growing number of
MASs are leaving the experimental arena for the production environments,
and given the more stringent quality of service requirements of enterprise-
level production systems and the likeliness of emergent complex behaviour to
exhibit performance issues, it is obvious that performance analysis will be an
important area in AOSE even if performance is not a primary requirement,
as in parallel programming for instance.
What’s more, the software engineers are much wiser now and will not put
up with reams of logging statements or time-consuming wheel-reinventing
experiments anymore. Even when using the modest JavaScript browser
language, they now are just a mouse click away from a wide choice of
profilers and other powerful performance analysis tools that provide detailed
performance reports and summarised performance indicators [37], and can
even suggest performance improvements automatically [53].
As a result we chose to structure our survey in a way that provides
a strong foundation for a practical approach to MAS performance anal-
4.2. Fundamental performance issues in a MAS context 21
Our goal is to present a theoretical view of the main issues of MAS per-
formance, and to identify the main solutions that have been proposed to
address these issues. We start by a necessary characterisation of the perfor-
mance of agent-oriented software and a definition of essential concepts like
performance and scalability. Then we proceed to a more detailed analysis
of scalability which is commonly viewed as the central performance related
issue in MASs. Finally we expose the different approaches proposed to
address scalability issues in MASs.
a software system that you can measure using a stopwatch. The authors
also state that the most important performance concepts are responsiveness
and scalability, and propose the following basic definitions:
Response time measures how much time a software system takes to fulfil
an end-user request.
Scalability indicates how well a system can maintain its response time or
its throughput under its performance objectives despite an increasing
workload. Actually, scalability is not a number but a function which
puts in relation the response time with the load, and can be plotted as
a scalability curve. Ideally the scalability curve should grow linearly.
At the MAS level, scalability is by far the most studied aspect of agent-
oriented systems performance in the literature, surely because it is commonly
recognised as the main performance issue in distributed systems. We have
summarised in table 4.1 the wide array of scalability issues that can arise
in a MAS. There is not a single approach available to solve these issues,
however the solutions shown in the table can be broadly described as
approaches to manage and reduce the load and the complexity of the system.
These approaches can be further classified depending on their level of agent
orientation. Solutions that propose the use of proved techniques from
24 Performance concepts and solutions in MASs
the distributed systems area can be contrasted with solutions that focus
specifically on agent concepts like improved coordination algorithms, specific
MAS performance models, and at the other end of the scale, solutions that
empower agent systems to deal autonomously with scalability issues.
Of course both points of view are equally valid and interesting, but ulti-
mately we favour the truly novel agent-oriented solutions that demonstrate
the added value of the agent-oriented paradigm.
Additionally, performance case studies of common MAS structures and
architectures constitute an important research direction that can help MAS
designers make more informed design decisions. In the following paragraphs
we provide a more detailed development of each one of these approaches.
As explained in [4] and [13], well-known scaling techniques from the dis-
tributed systems area must not be overseen. These techniques include hiding
communication latencies, data and tasks distribution, and data replication.
In practice, Brazier et al. suggest in [4] that MAS designers should base
their implementation of scalable naming or messaging services on existing
middleware architectures or protocols (e.g. CORBA, DNS).
scalable than mesh structures; not surprisingly it also shows that an auction
protocol is more computationally expensive than a contract net protocol
because an auction is like a repetitive contract net. In that study, Lee et al.
also conclude that “the benefits of carrying out such investigations become
increasingly important as MASs mature” [29]. We completely agree with
their analysis, but we want to go further and add that carrying out these
performance studies should be greatly facilitated by extending the existing
agent frameworks with the appropriate infrastructure. In other words, as we
explain further in the next section, carrying out MAS performance analysis
should be made much easier in order to encourage the publication of more
studies.
As more MASs are leaving the experimental arena for the production envi-
ronments, performance becomes a greater concern, and it is important to
multiply the investigations into the performance of existing MAS designs.
To represent this type of work, we have selected the following papers:
are aware of the potential pitfalls or advantages of the design decisions that
are made and of the platform that is used. Our main interest is not the
content of these studies. From a theoretical point of view, we actually think
that the scope of these studies is narrower than the generic architectural
performance analysis in [29], which we have described earlier (see §4.3.5).
However, from a more practical point of view, these studies are the sign
that MAS platforms and implementations are mature enough to serve as
background for other studies instead of being objects of study themselves.
We believe that the maturity of the MAS platforms and implementations is
an essential prerequisite to allow us to bridge the gap between the theory
and the practice of MAS performance analysis, because it highlights the
need for a generic performance analysis toolkit and it also makes the creation
of such a toolkit technically possible.
In this view, the fact that both systems run under the same platform,
JADE, has motivated our selection of these papers. While the performance
analysis objectives and measurements were completely different, the authors
have probably used the same platform services and API to set up their
experiments and gather the data for their performance analysis. Surely both
teams of researchers had to reinvent the wheel and create themselves the
tools they needed. This is a common problem in the academic world, and
it is not usually viewed as a serious one since it happens in the context of
one-off projects. Yet in production environments where performance analysis
is carried out more routinely as part of the software development life cycle,
MAS engineers will require clear methodologies and general toolkits to avoid
reinventing the wheel, and more importantly, to obtain meaningful results
they can apply immediately to improve their designs.
The availability of such a system might foster more interest in the
4.5. Cougaar 29
4.5.1 Requirements
• The flexible design of the Metrics service (use of call-backs and listeners)
ensures that it has no impact on the system when it is not in use.
4.6 Discussion
The breadth of our survey has clearly shown the extent of MAS performance
issues and the variety of solutions proposed to solve these issues. We have
also discovered that the tool-based approach to performance analysis we
advocate in this dissertation has been surprisingly neglected in the agent-
oriented paradigm. Yet, as we have demonstrated in Chapter 3, this approach
is favoured in all the other major programming paradigms and is usually
backed up by a solid theoretical foundation. In fact, tools ultimately bring
together performance analysis theory and practice.
The relatively recent focus on the adaptation of mainstream software
engineering practices for the fabrication of agent-oriented systems could
explain the lack of a tool-based approach to performance analysis. Now that
AOSE has become a practical possibility, it is time to integrate the practices
that will help make agent-oriented programming a viable proposition for
mainstream enterprise-level software projects.
To put it another way, we have seen how the MAS community has done
the important work of elaborating a set of concepts to tackle performance
problems in MASs. However, the prescriptions and ideas will only be truly
useful when they can be applied, evaluated or enforced through a set of
practices, methodologies, or even better, tools.
approach is the norm, where corrective measures are taken only when the
performance issues are discovered late in the process, which usually means
at best a significant redesign, or at worst the failure of the project due to
intractable issues in the upfront design of the system.
As with most software practices, we contend that the reasonable approach
certainly lies half way and should follow the so-called Pareto principle. Our
idea is that for 90% of the code, software engineers should focus primarily
on functionality. For the remaining 10% that are usually linked to non-
functional problems like performance, 90% of the potential performance
issues should be addressed as automatically as possible by the software
itself, either passively by code reuse that integrates the best practices, or
proactively by using agent-oriented software solutions. The remaining 1%
(10% of 10%) can be addressed manually using an easy to use performance
analysis toolkit which gives as much information as possible to software
engineers about the problems at hand.
In other words, a MAS naturally generates complex emergent behaviours
that are likely to exhibit performance issues. Therefore, despite the embed-
ding of the best performance management principles and practices right into
the software, still in a lot of instances the intervention of a human software
engineer is unavoidable. Hence the necessity of providing a comprehensive
toolkit to help software engineers tame the complexity of MAS performance
analysis.
In this chapter we have surveyed the MAS performance concepts and solu-
tions and offered an overview of the most common MAS scalability issues in
4.7. Towards a set of requirements for a performance analysis toolkit 35
table 4.1.
Among the cited approaches, we have focused on performance case
studies as a good way to disseminate knowledge about the performance
characteristics of different MAS designs and architectures. After noticing
that this research direction is not as developed as it should be, we have
suggested that the reason for that scarcity could be the current lack of
comprehensive MAS performance analysis system.
Then, as a fundamental requirement for a performance analysis system,
we have identified the necessity of a performance measurement infrastructure
similar to the one built right into the Cougaar agent architecture that we
have reviewed. From our review of the Cougaar system we have concluded
that while a solid performance measurement infrastructure is a good basis for
a performance analysis system, we should also provide an unified interface,
in the form of a toolkit, to facilitate the creation of performance analysis
tools like profilers.
The important point now is to define extensively the requirements of
such a toolkit, which is the main subject of the next chapter.
CHAPTER 5
A blueprint for AgentSpotter,
the Agent Factory profiling
system
5.1 Introduction
37
38 A blueprint for AgentSpotter
will truly help software developers understand and fix performance issues in
MASs.
In this chapter, our goal is to detail our vision of such a toolkit based
on the well-known profiling technique, from the abstract concepts to the
user interface. Our approach is as platform-independent as possible, even
though in the end, we have chosen the Agent Factory platform to implement
a prototype of that system, which we have named AgentSpotter.
We must emphasise that while there are many visualisation programs for
MASs, AgentSpotter is the first desktop profiling system which deals with
agent-oriented concepts and is completely integrated with a mainstream
AOSE development framework.
Before describing what the ideal profiler for a MAS should be, we must first
address the main objection that could be expressed against our approach: as
most MASs are based on Java platforms and are built around Java classes,
why cannot we just use the profilers that come with these systems?
5.2. Platform-independent AgentSpotter architecture 39
Our answer is that we need a specific profiling system for multiagent sys-
tems because a Java profiler does not operate at the appropriate conceptual
level. While there can be a technical mapping between objects and agents,
it is usually difficult to connect method calls with specific agent activities
like messaging or deliberation.
Actually, our first attempt at the problem would have been to use the
output of a traditional Java profiler and to try to infer agent-specific activity
from low-level method profiles. The fundamental flaw with that technique is
that it wouldn’t allow us to group the different statistics by agent instance,
so we finally chose to design an agent-specific infrastructure.
Our analysis starts with a discussion about the required infrastructure for
AgentSpotter. First, we describe AgentSpotter’s abstract, i.e. platform-
independent, architecture. Then we adapt that abstract architecture to the
Agent Factory platform.
Once the overall architecture has been clearly defined, we then set to
detail extensively the requirements for our main visualisation tool called
AgentSpotter Station. Our requirements analysis is particularly focused on
the concepts underlying the novel visualisations that we have introduced.
• Top-level architectural units are enclosed in dashed lines and are titled
in slanted capital letters, e.g. AGENT PLATFORM
40 A blueprint for AgentSpotter
AGENT PLATFORM
System Monitors
data
AGENTSPOTTER STATION (visualisation application) QUERY ENGINE
Snapshot File (.aspot)
Session Summary Tables queries Session summary query
Agent activity query
Space-Time Diagram data Events
Messages sent/received query Sessions
Agents Scheduler
Heap Monitor
Message Transport Service
data
AGENTSPOTTER STATION (visualisation application) QUERY ENGINE
Snapshot File (.aspot)
Session Summary Tables queries Session summary query
Agent activity query
Space-Time Diagram data Events
Messages sent/received query Sessions
Figure 5.2: AgentSpotter for Agent Factory concrete architecture: note that
only the upper part of the diagram is different from Figure 5.1.
5.2. Platform-independent AgentSpotter architecture 41
modules should stay the same, regardless of the Agent Platform on which
the Profiled Application is running.
The immediate benefit of this architecture is that it will provide a testbed
for comparing the performance of applications running on different platforms,
say JADE and Agent Factory.
The AgentSpotter instance for Agent Factory requires that the following
Agent Factory Run-Time Environment (AF-RTE) subsystems generate
profiling events: the Agent Management Service, the Scheduler, and the
Message Transport Service. The events generated by these subsystems
should provide enough information to support the standard AgentSpotter
visualisations described in §5.4.
The standard, “out of the box”, performance data should cover most of
developers’ profiling needs. However, in some special cases, developers
might need to record specific metrics that are not already handled by the
system. Thus a new service, the Metrics Service, should be introduced in
the Agent Factory Run-Time Environment, so that the Profiled Application
can generate custom events that will be observed by the Metrics Service.
The Metrics Service should then forward the events to the AgentSpotter
Profiler in order to get them saved to the Snapshot File.
This seemingly roundabout architecture should enable developers to keep
the instrumentation code in a deployed application with little impact on
the system performance and no direct classpath link with the AgentSpotter
system.
5.4. AgentSpotter Station 45
5.4.1 Visualisations
windows side by side on the screen in order to visually compare them, and
immediately see the effects of the changes on the run-time behaviour of the
application.
Along the same lines, developers should be able to open different visuali-
sations of the same session at the same time, i.e. view the Call Graph Tree
View and the Space-Time side by side to see the correlations between them.
The flat profile is the minimal service that a profiler should provide. For
each profiled application’s identifiable basic execution block, it should clearly
list the following information items:
• the total amount of time the application spent inside the block;
But what exactly is the appropriate execution unit for a MAS? To answer
that question, we have pitted the OOP execution unit concepts against
their AOP counterparts as shown in table 5.1. Note that we have assumed
agents are implemented as single execution threads, which is the approach
5.5. Session Summary Tables 47
adopted by Java-based Agent Factory and JADE [11, 2]. The table shows
that agents are the lowest-level meaningful execution unit in a MAS.
One could argue that in practice agents are based on objects and carry
out their tasks by invoking methods, but from a conceptual point of view it
is irrelevant.
Concretely, AgentSpotter Station should present a table that lists for each
agent the following indicators:
5.5.6 Conclusion
Figure 5.3: Call Graph Tree View of a fictional C program which removes
duplicate lines from a file
Summary tables give developers a sense of how much time agents have spent
doing things, but they do not give much detail about the chain of events
that has led the agents to do these things.
50 A blueprint for AgentSpotter
Suppose for example that an agent is found to use more that half of
a MAS’s computation time while it was expected to use only a quarter.
Looking at the agent’s internal resource use could give a good idea of the
cause of the problem e.g. “I think the agent X took too much time doing a
bubble sort on a list of 10000 integers”.
However, we have shown in Chapter 4 that analysing the behaviour of
an agent in isolation is not sufficient to understand fully the cause of a MAS
performance problem. Indeed, the real complexity of a MAS comes from
the distributed interactions between the agents.
Consequently, AgentSpotter should implement a visualisation that allows
developers to understand the impact of interaction on the performance of a
MAS. In traditional profilers, this kind of visualisation is called a hierarchical
profiler or call graph (see Chapter 3, §3.5.1).
A call graph is basically a tree displaying all the calls made by a program.
These calls are grouped by call target, and are annotated with the cumulative
time spent in each call target.
The example in Figure 5.3 shows a typical call graph of a completely
fictional C language program which is supposed to remove duplicate lines
from a file. The root node is the main function and it represents 100% of
total execution time. The idea is that each tree’s level displays recursively all
the calls made by the current node as child nodes along with the percentage
of time they represent and so on until the top of the call stack is reached.
Therefore, if main is calling process file, it is represented as a sub-tree with
leaves describing its own calls to bubble sort, load file and remove duplicates.
The call graph tree view’s key benefit is the extended context it gives to
the performance information. For instance, our simple example reveals that
5.6. Call Graph Tree View 51
Agent A
message Mα at time α
impact of MΩ
{
Agent B α β Ω
{
impact of Mα
message MΩ at time Ω
Agent X
Legend:
Message event
Agent activity
the program spends 90% of its time processing a file. The tree shows that
one of the top-level function process file’s callees, the bubble sort operation,
eats up 80% of its caller time. A flat profile would have shown the time
for these functions separately without explicitly showing the hierarchical
link between them. In other words, what matters is to know the “where” to
understand why the “how long” is a problem.
Ω
X
TMα ,B = bt (5.1)
t=α
Ωm
M X
X
Tx,y = bt (5.2)
m=1 t=αm
Ma X
N X
X Ωm
Tx = bt (5.3)
a=1 m=1 t=αm
5.6. Call Graph Tree View 53
Nk X
K X
X Ma X
Ωm
TS = bt (5.4)
k=1 a=1 m=1 t=αm
It must be noted that the total activity time AS of the session S is given
by the equation:
k0 −1
K αX
X
AS = TS + bt (5.5)
k=1 t=αS
where αS is the first recorded time stamp in session S and αk0 the time
stamp of the very first message received by agent k. To put it differently,
the total impact for each agent can be computed only after it has received
its first message.
A traditional call graph’s depth can be as deep as the deepest function
call stack. In contrast, the graph representation of our model is a fixed-depth
tree.
The model we have just defined is the basis for the graphical representation
that AgentSpotter Station should provide to help developers understand
better the impact of agents interactions on a MAS performance.
54 A blueprint for AgentSpotter
This conceptual model deals with the session level, the emitter agent level,
the receiver agent level and the message level. The graphical translation
of the model, outlined in Figure 5.5, should be a tree view representing
the levels we have previously enumerated plus an additional level for the
FIPA ACL message content. A message content is defined as a performative
plus an expression e.g. “request:doSomeThing(123)”. This additional level
should give developers necessary contextual information for the messages.
Of course the model must be slightly extended to accommodate for this new
level, but this is left as an exercise for the reader.
The session at the root of the tree should add up to 100% of all emitter
agents’ impact as defined by equation 5.4. Then at each level, each node
should recursively total the impact of its child nodes down to the message
leaf nodes. These leaf nodes simply report their impact as defined by
equation 5.1. More precisely, at each level, for each node, the following
values should be displayed:
Label: informative text associated with the node. The structure of the
label depends on the level as follows:
Total impact time: sum of impact times of all the current node’s children.
% parent time: percentage of the current node total impact time over the
node’s parent total impact time.
5.6. Call Graph Tree View 55
% session time: percentage of the current node total impact time over
the session total impact time.
Even if it has a fixed depth, a call graph tree view could potentially be
very wide at the leaf level for sessions that produce thousands of messages.
Therefore, to help developers navigate easily through the tree, AgentSpotter
Station should offer an advanced tree navigation user interface that would
develop only the part of the tree that is currently explored to reduce the
visual clutter. The currently explored part of the tree should be highlighted
in a different colour to give the developer a visual feedback.
Moreover, to speed up information retrieval, a special search feature
should allow developers to enter a keyword (an agent name or a performative
for example). Doing so would have the effect of highlighting in a special colour
all the visible nodes which contain that keyword, improving significantly the
visual retrieval speed of a node.
Ideally, to enable developers to locate items even more quickly, zooming
and panning around the tree view should be possible.
5.6.6 Conclusion
5.7.1 Motivation
The author then extends the partial ordering defined by the “→” relation
to a total ordering which he uses to describe a distributed algorithm to
synchronise a system of clocks.
To simplify a little bit, synchronising clocks this way allows the definition
of a “global” reference clock which ticks at the same time for all the processes
of the system. Eventually, such a global clock makes the representation of
distributed processes in a common space-time diagram possible, since a given
clock tick means the same time for all the processes. A typical Lamport
diagram extracted from [28] is pictured in Figure 5.6. Vertical lines represent
process time lines, while the dashed horizontal lines mark the ticks of the
global clock. The squiggly arrows denote message passing events. Thanks
to the synchronised global clock ticks’ markings, the causality relations
between the different distributed concurrent events appear very clearly.
5.7.3 Principles
The Lamport Diagram should constitute the core for the comprehensive
MAS performance visualisation we need. In contrast with the flat profile
and the call graph, our goal is not to reduce the data to a few meaningful
dimensions.
On the contrary, our plan is to display as much detail and context as
possible about a MAS performance, and let developers pan the view around,
zoom in and out in order to reveal hidden patterns or focus on minute
details.
As an analogy, it is like having a zoomable satellite view of the city of
5.8. Space-Time Diagram user interface 59
Agents Scheduler
Heap Monitor
Message Transport Service
CPU Line
CPU Line
Dublin with a map view overlay showing the street names, the points of
interest and some geolocated statistics (e.g. number of pubs per square
kilometre): the mix of raw visual data and value added geolocated data
generates much more information.
60 A blueprint for AgentSpotter
• The session time line should always be visible whatever the position and
the scale of current view port, so as to provide an essential temporal
context.
Optional graphical plot of the global CPU load of the host system during a
session.
• A vertical gradient going from green (low CPU usage) to red (high
CPU usage) should give a sense of the system load.
Represent all the performance events and message passing activity that
occurred for a given agent during a session.
• The life line should start only at the time stamp where it was created
or resumed in order to make fluctuations in a MAS population more
apparent.
• The life line area grey scale colour percentage should be proportional
to the agent’s contribution to the global system activity: the more
an agent uses computation time, the darker its life line area’s colour
should be.
1 time slice
Time
{
0%
% time slice
50%
75%
{
100%
{
proportional dimensions
• The life line caption (the agent name) should always be visible whenever
a part of the life line is visible so as to provide an essential contextual
information.
• When the mouse pointer hovers on the life line caption, a pop up
information window should display the agent statistics appearing in
the flat profile (see §5.5.4).
All the performance events related to an agent should be displayed along its
life line as they happen.
• Events that have a time stamp only, i.e. simple events, should appear
5.8. Space-Time Diagram user interface 63
• Events that have a duration, i.e. timed events, should be drawn with a
size proportional to their duration and should provide as much visual
information as possible.
• A little arrow end should be added to the message line to show clearly
the direction of the message.
Agent space-time diagrams for long running sessions could potentially span
tens of thousands of pixels. For example it would require (10∗60∗1000)/25 =
24000 pixels across to display a 10-minute long session, which is equivalent
to more than 24 screenfuls of a 1024 pixels wide monitor.
Thus, to facilitate the navigation around such a large view, a zooming
and panning facility is an imperative requirement.
Moreover, AgentSpotter should implement a reduced global view in low
resolution of the full diagram, called a “bird’s eye view”, where developers
can quickly select areas to explore by moving around a little rectangle
representing the current view port. The view port is depicted as a transparent
blue area on Figure 5.7: its current position is perfectly mirrored by the
little blue rectangle in the bird’s eye view window.
66 A blueprint for AgentSpotter
At the risk of overloading the reader with too much information, we have
traced on Figure 5.7 the links between the AgentSpotter data capture
infrastructure for Agent Factory and the space-time diagram. The dashed
arrows show how the data coming from each Agent Factory Run-time
Environment sub-system, as well as the data coming from system monitors
(CPU usage), is represented on the diagram. Our point is to demonstrate
the incredible richness of our visualisation.
Experimented human computer interface (HCI) designers will surely
object that such density could lead to a confusing picture. We will address
this objection later in our evaluation of the system (see Chapter 7).
5.8.10 Conclusion
5.9 Summary
6.1 Introduction
69
70 AgentSpotter design and implementation
tion tool suite, and consists mostly in commenting on screen shots of the
application.
org.piccolo2d org.antlr.stringtemplate
Snapshot File (.aspot)
Piccolo2D
Sessions Events
ANTLR StringTemplate
org.openide
Messages
Netbeans Platforms APIs Agents
Our first implementation task for the AgentSpotter profiler was to ex-
tend the Agent Factory Run-Time Environment (AF-RTE). Thanks to the
Agent Factory framework’s modular architecture, it was easy to identify
the strategic points in the code where the instrumentation code had to be
injected (the “point-cuts” in aspect-oriented programming terminology).
Concretely, we have introduced a new com.agentfactory.agentspotter.
service.metrics package which simply contains a new data TraceEvent
class. Thus, the AF-RTE sub-systems were made to generate the profiling
events by creating TraceEvent instances.
As was done in Cougaar [19], we have applied the Publisher-Subscriber
pattern in order to implement the data communication channels between
the AF-RTE and the Profiler service. In effect, the AF-RTE sub-systems
can publish performance data regardless of the actual presence of a profiler.
Then, when it is activated, the Profiler service can subscribe to the different
well-known performance data channels in order to collect trace events and
persist them to an AgentSpotter snapshot file.
The protocol we have used is very straightforward and is based on simple
hierarchical slash-separated (“/”) string event identifiers. For example, an
agent scheduler activity event is published as a TraceEvent instance with a
Type property value of “scheduler/activity” where the first path element,
“scheduler”, denotes the origin of the event, and the rest, “activity”, indicates
the nature of the event. Table 6.1 presents the full list of the events currently
published by the AF-RTE. We expect this list to grow as more data channels
will be added to the system.
Note that for lack of time, we did not implement the Metrics Service
6.3. AgentSpotter profiling infrastructure 73
really a clean solution. Ideally, the FIPA ACL message standard should
include a “message identifier” field reserved for system use.
The Profiler service contains two parts: the profiler class, AgentSpotter,
which is implemented as an Agent Factory platform service 2 , and an
operating system specific CPU usage monitor.
Profiler
CPU Monitor
The File Manager is the bridge between the data capture infrastructure and
the visualisation toolkit. In accordance with our requirements, we needed
a compact and reliable snapshot file format, and a queryable and flexible
data retrieval system. Given the fact that profiling data is highly structured,
and that we do not expect shared access to a snapshot file, it was obvious
that a single file database system was the best basis for our File Manager.
3
For lack of time, we could not conduct an evaluation of the actual impact of the
profiler at run-time. In practice, the instrumentation does not seem to significantly slow
down the profiled applications.
76 AgentSpotter design and implementation
5. Bird’s Eye View : navigation mini-map window for the focused Space-
Time Diagram.
In order to construct our Call Graph Tree View, we have adapted a special
tree display component included in prefuse toolkit. We have essentially
managed to implement all the features described in §5.6, including the
keyword search facility which highlights nodes containing a given keyword.
A sample screen shot of the resulting display can be seen in Figure 6.3.
80 AgentSpotter design and implementation
The element numbered 1 on the screen shot is the tree root, i.e. the session
level which represents 100% of the recorded activity time. The tree root
is highlighted in blue because it is the current tree selection. As such, it
determines the branch that is expanded; as stated in §5.6.5 the idea is
to reduce the visual clutter. The tree expansion algorithm ensures that
all the children of a selected node are visible as well as its grandchildren.
Consequently, when the tree root is selected, only the first two subsequent
levels are expanded, that is the emitter agent level, and the receiver agent
level. Hence, selecting an emitter agent node should make the FIPA ACL
message level visible, and so on. As an illustration, the call graph numbered
3 shown in Figure 6.2 screen shot, has an agent receiver node selected; as a
result, this branch is fully expanded down to the message impact level.
The element numbered 2 is a text area used to enter a search keyword.
The number of nodes matching the keyword is displayed and all the matching
nodes that are visible are highlighted in pink, just like the element numbered
3, which is one of the nine nodes containing the “explorer” keyword. In a
large expanded tree, the pink nodes really do stand out.
Controls
The view can be controlled using the mouse or the keyboard as follows:
Pan: Left-click and drag the background to pan the display view.
Zoom: Right-click and drag the mouse up or down or use the scroll wheel
to zoom the display view.
Zoom-To-Fit: Right-click once to zoom the display to fit the whole tree.
6.6. AgentSpotter Visualisation Components 81
Search: Type in a search query to search over the currently visible nodes.
Layout: Ensure the view window has the focus then press one of the
following layout control keys: Control-1 (left to right tree, the default
one), Control-2 (top to bottom tree), Control-3 (right to left tree) or
Control-4 (bottom to top).
The screen shot in Figure 6.4 shows a sample Space-Time Diagram View.
In contrast with the Call Graph, this diagram was not adapted from a
pre-existing visualisation component. All the major features specified in §5.8
were included in the beta version except the external platform messaging
display (see §5.8.6). The following paragraphs describe the resulting view as
numbered in Figure 6.4. However, to avoid repeating the contents of §5.8,
only the interesting implementation details are reported here.
3. Agent Life Line. Our sample screen shot (figure 6.4) clearly shows how
the background colours of the life lines vary with the impact of each agent
on the global performance, as stipulated in §5.8.3. Also, the life line captions
“stick” to the left border of the view port so that developers know whose
life line is currently displayed. For time reasons, we didn’t implement the
82 AgentSpotter design and implementation
advanced life line manipulation operations, i.e. moving life lines around and
hiding them selectively.
8. Bird’s Eye View. As made obvious in our sample screen shot (figure 6.4),
the Bird’s Eye View provides important visual information about the current
view port global position whilst enabling developers to navigate quickly
around a large display by dragging the translucent blue rectangle (see §5.8.8).
Controls
Developers can interact with the diagram using the mouse as follows:
Tooltip: Hover the mouse pointer over an item to display a tooltip window.
Pan: Left-click and drag the background to pan the display view.
6.7. Conclusion 83
Zoom: Right-click and drag the mouse left or right to zoom the display
view.
Zoom-To-Fit Item: Left double-click any item to zoom the display to fit
the item.
Scroll: Use the scroll bar controls to scroll the display view.
Navigate: Left-click and drag the translucent blue rectangle in the Bird’s
Eye View to change the current view’s focus.
6.7 Conclusion
Figure 6.4: Space-Time Diagram screen shot. Obtained from the Agent
Herders application [14].
7.1 Introduction
85
86 Agent Spotting: an evaluation
7.2.1 Specification
Worker agents that have been recently overloaded will simply refuse to carry
out the tasks (in a real application they would inform back the requester
about their refusal). From time to time, overseer agents would request
agents to delegate some tasks. In this case, worker agents will behave as
overseers just for one round.
In terms of user interface, the benchmark application is not very spec-
tacular. It only offers a control window shown in Figure 7.1 which allows
developers to start and pause the process, with a slider control that sets the
number of active worker agents.
• Start the session with a dozen of worker agents and two overseer
agents.
The resulting flat profile of this test is reproduced in Table 7.1. For the
reader’s convenience, the maximum value for each column is identified by
88 Agent Spotting: an evaluation
an enclosing box. Overseer agents are called “master1” and “master2”. The
worker agents are called “agent” followed by a number e.g. “agent007”.
Firstly, the benchmark appears to make a good job of producing a load
history following a normal distribution1 .
Secondly, we can draw the following conclusions from a quick study
of Table 7.1:
• The most active agents in terms of number of iterations are the overseer
agents, “master1” and “master2”, however in terms of CPU load and
overload, three worker agents are topping the list with 30% of the
total activity: “agent001”, “agent009”, and “agent003”.
• The agents with the highest CPU load also display a high number of
time slice overshoots, and a high average time slice duration.
1
Applying the Shapiro-Wilk test for normality on the activity percentage column
yields W = 0.81 with p < 0.0001. The closer to 1 W , the more probable our null
hypothesis that the data set comes from a normally distributed population.
2
However, it would be really interesting to get an idea of the Message Transport
Service load by adding a special performance data channel.
7.2. Benchmark application 89
1. This portion of the diagram shows what happens when only 12 workers
are active. The large red rectangles that usually come in groups of
three represent the time-consuming tasks ordered by the overseer
agents. These blocks never overlap because of the way Agent Factory
schedules agents4 , and they come in bursts, because both overseers
send the same order to the same worker at the same time5 .
2. At this point, 15 more workers are added to the fray, after a slight
pause revealed by the absence of message lines.
3
We did not provide a screen shot for the call graph due to its size: the resolution
loss from scaling down a bitmap would have made the text illegible.
4
The Agent Factory scheduler does not preempt agents that have exceeded their time
allocation.
5
This was revealed by zooming into what appeared to be a single message line. At a
high magnification level, there were in fact two messages lines within a few microseconds
interval to the same worker.
90 Agent Spotting: an evaluation
3. This third portion shows the impact of the new workers. The red
blocks are still there, but they are better spread among the agents, so
they don’t come as clumps of three anymore. It looks as if the system
has successfully scaled up.
4. The Bird’s Eye View reveals the bigger picture, and reminds us that
we are looking only at one third of the overall session.
7.2.5 Conclusion
There would be much more to say, but we have clearly demonstrated the
explaining power of AgentSpotter. Unfortunately, we didn’t solve the 70/30
overseer time sharing mystery.
After obtaining these very positive results within a carefully controlled
environment, we were motivated to try agent spotting applications in the
“wild”, as exposed in the following sections.
Agent T > 0 T > 100% Activity % Session M ax(T ) Average(T ) Msg. Msg.
iterations overload mm:ss.ms activity ss.ms ss.ms sent rec.
agent001 338 22 1:08.564 10.90 3.740 0.202 6 57
agent009 365 21 1:04.257 10.21 3.425 0.176 13 77
agent004 349 22 1:01.529 9.78 3.235 0.176 10 69
agent014 284 14 46.413 7.38 3.148 0.163 2 36
agent003 401 13 43.881 6.97 3.323 0.109 12 76
agent006 361 12 40.141 6.38 3.279 0.111 12 73
agent005 367 12 34.903 5.55 3.325 0.095 17 76
agent013 301 9 34.716 5.52 3.190 0.115 14 71
agent007 378 11 31.864 5.06 3.356 0.084 21 71
agent008 357 7 30.850 4.90 3.201 0.086 14 72
agent010 330 8 30.280 4.81 3.147 0.091 21 81
agent015 285 9 29.382 4.67 3.257 0.103 4 42
agent002 348 8 23.196 3.69 3.147 0.066 9 70
agent011 357 5 19.363 3.08 3.095 0.054 4 39
agent012 225 3 13.172 2.09 3.049 0.058 9 41
master2 901 0 6.681 1.06 0.183 0.007 504 86
master1 873 0 6.485 1.03 0.227 0.007 514 82
agent024 46 2 6.281 1.00 3.045 0.136 3 7
agent019 31 1 4.449 0.71 3.014 0.143 0 5
agent026 42 1 4.400 0.70 3.084 0.104 0 4
agent030 26 1 4.002 0.64 3.132 0.153 2 8
agent017 46 1 3.811 0.61 3.031 0.082 0 3
agent025 40 1 3.767 0.60 3.006 0.094 0 3
agent027 31 1 3.694 0.59 3.103 0.119 0 2
agent018 38 1 3.384 0.54 3.044 0.089 2 7
agent020 39 0 1.762 0.28 0.547 0.045 0 3
agent022 47 0 1.523 0.24 0.559 0.032 5 13
agent021 32 0 1.300 0.21 0.555 0.040 2 7
agent016 219 0 1.194 0.19 0.555 0.005 2 6
agent029 38 0 1.039 0.17 0.550 0.027 2 8
agent028 45 0 0.749 0.12 0.546 0.016 1 4
agent032 34 0 0.749 0.12 0.561 0.022 1 4
agent031 36 0 0.742 0.12 0.545 0.020 0 2
agent023 40 0 0.598 0.10 0.543 0.014 0 1
agent033 30 0 0.043 0.01 0.003 0.001 0 0
Agent Spotting: an evaluation
Figure 7.2: Benchmark application sample space-time diagram (18 minute long session)
92
7.3. Agent Sherpa 93
6
Stands for “Improvised Explosive Devices”.
94 Agent Spotting: an evaluation
life line is nearly black, which is confirmed by the 96% computation time
share in the flat profile listed in Table 7.3. Then the “CandC” life line starts
with an uninterrupted series of green boxes, which turn completely red after
one minute of run-time, and end up saturating the life line. Clearly, as
confirmed by the CPU usage line, the system is on its knees. A quick glance
at the call graph numbered 1 in Figure 7.3 shows that the outgoing messages
from “drone1” have determined 93.3% of the total computation time! Does
that mean that “drone1” is the culprit?
Since we only aimed to show that AgentSpotter can help discover prob-
lems, we won’t really try to solve the questions raised by the Agent Sherpa
profiles study7 . However, we have confirmed the effectiveness of Agent-
Spotter tools on a “real” application. In the next section we will see how
AgentSpotter behaves when confronted with a much more complex MAS.
Table 7.2: Agent Sherpa application flat profile for 3 drone session
Agent T > 0 T > 100% Activity % Session M ax(T ) Average(T ) Msg. Msg.
iterations overload mm:ss.ms activity ss.ms ss.ms sent rec.
CandC 177 7 17.968 70.83 0.623 0.101 237 83
drone3 419 1 3.467 13.67 0.354 0.008 37 79
drone2 424 0 2.753 10.85 0.264 0.006 37 79
drone1 220 0 1.179 4.65 0.140 0.005 9 79
7
Our theory is that “CandC” is overwhelmed by the number of requests sent back by
all the drones at the same time.
7.3.
Agent Sherpa
Table 7.3: Agent Sherpa application flat profile for 12 drone session
Agent T > 0 T > 100% Activity % Session M ax(T ) Average(T ) Msg. Msg.
iterations overload mm:ss.ms activity ss.ms ss.ms sent rec.
CandC 627 421 4:47.707 96.31 1.074 0.458 244 128
drone1 202 1 2.104 0.70 1.058 0.010 14 20
drone7 225 1 1.363 0.46 0.308 0.006 14 20
drone6 228 0 1.292 0.43 0.132 0.005 14 20
drone12 167 0 1.017 0.34 0.096 0.006 14 20
drone9 136 0 0.995 0.33 0.162 0.007 14 22
drone2 142 0 0.804 0.27 0.166 0.005 14 20
drone4 160 0 0.661 0.22 0.128 0.004 14 21
drone11 95 0 0.658 0.22 0.109 0.006 8 20
drone8 115 0 0.588 0.20 0.097 0.005 8 20
drone3 75 1 0.568 0.19 0.308 0.007 3 20
drone10 121 0 0.521 0.17 0.070 0.004 3 21
drone5 109 0 0.448 0.15 0.077 0.004 8 20
Agent T > 0 T > 100% Activity % Session M ax(T ) Average(T ) Msg. Msg.
iterations overload mm:ss.ms activity ss.ms ss.ms sent rec.
explorer 768 0 36.099 34.44 1.037 0.047 1515 1562
herdLeader 1543 0 23.736 22.64 0.329 0.015 275 994
botagent2 780 0 8.871 8.46 0.238 0.011 547 1095
botagent4 765 0 7.992 7.62 0.268 0.010 489 1062
botagent5 717 0 7.425 7.08 0.324 0.010 442 1068
botagent6 755 0 6.954 6.63 0.284 0.009 465 1063
botagent1 700 0 6.354 6.06 0.266 0.009 307 1055
botagent3 658 0 5.531 5.28 0.361 0.008 309 997
hManager 375 0 1.860 1.77 0.320 0.004 0 910
103
104 Conclusions
• Platform-independent architecture.
107
Appendix A
svn co h t t p s : / / a g e n t f a c t o r y . svn . s o u r c e f o r g e . n e t / s v n r o o t /
a g e n t f a c t o r y / a g e n t s p o t t e r / trunk a g e n t s p o t t e r
109
110 Building AgentSpotter from the subversion repository
Once the project is opened use the usual Netbeans commands to build
the application.
Appendix B
B.1 Profiling
• Also, if your application has a main frame, verify that the default
close operation is to exit the application i.e. add the following code if
needed:
...
JFrame mainFrame = new MyFrame ( ) ;
mainFrame . s e t D e f a u l t C l o s e O p e r a t i o n (
WindowConstants . EXIT ON CLOSE) ;
...
The idea is to make sure that the application shuts down gracefully so
that AgentSpotter has a chance to flush its database records.
111
112 Getting started with AgentSpotter
This will flush the database at each write, which is rather slow but is
necessary if the MAS has not determined exit point.
• When the MAS has terminated, load the generated “profile.aspot” file
into AgentSpotter Station. This file is generated in the default current
directory of the profiled AF application.
The AgentSpotter Station GUI is rather intuitive and tries to follow the
user interface conventions used by the Netbeans IDE. Here are a few points
that will help you getting started:
• To load a snapshot file, right click on the root element titled “Agent-
Spotter Snapshots” in Snapshot Window (element numbered 1 shown
in Figure 6.2 screen shot on page 78), and select the Add Snapshot
File... in the contextual menu.
• In the displayed open file dialog, locate and load the “profile.aspot”
file you have just generated.
• If any window is missing from the main display, you can make it appear
by going to the Window menu and selecting the appropriate menu
entry i.e. Snapshot Window or Bird’s Eye Window.
B.2. AgentSpotter Station 113
Figure C.1: Database schema diagram of the AgentSpotter profile data file
115
Bibliography
[1] Benjamin B. Bederson, Jesse Grosjean, and Jon Meyer. Toolkit design
for interactive structured graphics. IEEE Transactions on Software
Engineering, 30:535–546, 2004.
117
118 Bibliography
[8] Rem W. Collier. Web site for Agent Factory, 2008. http://www.
agentfactory.com/ (accessed October, 2008).
[9] Rem W. Collier. Web site for Agent Factory, Platform Service De-
velopment Guide, 2008. http://www.agentfactory.com/index.php/
Platform_Service_Development_Guide (accessed October, 2008).
[10] Rem W. Collier. Web site for Agent Factory, The Logger API Guide,
2008. http://www.agentfactory.com/index.php/The_Logger_API_
Guide (accessed October, 2008).
[18] Jeffrey Heer, Stuart K. Card, and James A. Landay. prefuse: a toolkit
for interactive information visualization. In CHI ’05: Proceeding of
the SIGCHI conference on Human factors in computing systems, pages
421–430, New York, NY, USA, 2005. ACM Press.
[19] Aaron Helsinger, Richard Lazarus, William Wright, and John Zinky.
Tools and techniques for performance measurement of large distributed
120 Bibliography
[20] Ivan Herman, Ieee Cs Society, Guy Melanon, and M. Scott Marshall.
Graph visualization and navigation in information visualization: A
survey. IEEE Transactions on Visualization and Computer Graphics,
6:24–43, 2000.
[21] Iain Hull, Chris Walsh, and Aidan Morrissey. Web site for Agent
Sherpa, Surveying Hostile Environments with Remote Patrol Agents,
2008. http://code.google.com/p/agent-sherpa/ (accessed October,
2008).
[22] Hwaci. Web site for the SQLite Database Engine, 2008. http://www.
sqlite.org/ (accessed October, 2008).
[24] Zoltan Juhasz and Prasenjit Paul. Scalability Analysis of the Contract
Net Protocol. ccgrid, 0:346, 2002.
[28] Leslie Lamport. Time, clocks, and the ordering of events in a distributed
system. Commun. ACM, 21(7):558–565, July 1978.
[30] David Lillis, Rem Collier, Fergus Toolan, and John Dunnion. Evaluating
communication strategies in a multi agent information retrieval system.
In Proceedings of the 5th European Workshop on Multi-Agent Systems
(EUMAS’07), Hammamet, Tunisia, December 13-14th 2007.
[32] Simon Lynch and Keerthi Rajendran. Breaking into industry: tool
support for multiagent systems. In AAMAS ’07: Proceedings of the 6th
international joint conference on Autonomous agents and multiagent
systems, pages 1–3, New York, NY, USA, 2007. ACM.
[33] SUN Microsystems. Web site for Netbeans Platform, 2008. http:
//platform.netbeans.org/ (accessed October, 2008).
[34] Angel Mur, Liu Peng, Rem Collier, David Lillis, Fergus Toolan, and
John Dunnion. A HOTAIR scalability model. In Proceedings of the 16th
Irish Conference on Artificial Intelligence and Cognitive Science (AICS
2005), pages 359–368, Portstewart, Northern Ireland, 2005. University
of Ulster.
122 Bibliography
[38] Liu Peng, Rem Collier, Angel Mur, David Lillis, Fergus Toolan, and
John Dunnion. A self-configuring agent-based document indexing
system. In Proceedings of the 4th International Central and Eastern Eu-
ropean Conference on Multi-Agent Systems (CEEMAS 2005), Budapest,
Hungary, 2005. Springer-Verlag GmbH.
[40] W.J. Reed. The Pareto, Zipf and other power laws. Economics Letters,
74(1):15–19, 2001.
[43] Eric Shaffer, Daniel A. Reed, Shannon Whitmore, and Benjamin Scha-
effer. Virtue: Performance visualization of parallel and distributed
applications. Computer, 32(12):44–51, 1999.
[46] R.G. Smith. The contract net protocol. IEEE Transactions on Com-
puters, 29(12):1104–1113, 1980.
[47] Amitabh Srivastava and Alan Eustace. Atom: a system for building
customized program analysis tools. In PLDI ’94: Proceedings of the
ACM SIGPLAN 1994 conference on Programming language design and
implementation, pages 196–205, New York, NY, USA, 1994. ACM.
[53] Yahoo! Inc. Speed up your web pages with YSlow. http://developer.
yahoo.com/yslow/ (accessed August 4th, 2008), 2008.