This chapter assumes that previous chapters covering SNMP
instrumentation and connection to Atropos of an active network application
in Magician have been read and understood. In this chapter, and throughout
the rest of this tutorial, we add incremental features to our sample application
known as LoadGen. Recall from previous chapters that we have enhanced the
number of packets transmitted with Atropos by making its SNMP Object Identifier
known to Atropos.
Key Concept
- The goal in this chapter is to take a more detailed look at
the Logical Process and its role in the optimistic simulation based virtual
overlay of Atropos. The Logical Process reacts to virtual messages which
represent messages and/or states expected to occur in the future. These messages
generated by the Driving Process are described in the previous chapter.
Physical Process
- The general idea is to start with a non-Atropos
enhanced working process. This is the actual, or Physical Process (PP).
Generally, this is the heart of the system, the predictive model that we
wish to test. During operation, input is received by the process, the process
executes using the input, and then perhaps generates output:
input->process->output
Virtual Time Process (normal operation)
The virtual overlay implemented by Atropos will mirror the above model, but
with the addition of the methods shown below. getvm() and getnext()work
together to handle messages out-of-order or out-of-tolerance. sendvm()saves
copies of outgoing messages in the send queue for sending anti-messages during
rollback. savestate()is executed periodically to save the current
state in order to enable rollback to a known good state.
input -> getvm(); getnext() -> process -> sendvm() -> output
|
V
savestate()
Virtual Time Process (rollback)
getvm() indicates when a rollback is
required by returning the virtual time to which the Logical Process should
rollback. The state is restored to an earlier state by getstate() and
rbq() transmits any required anti-messages.
if (getvm() != 0)
getstate() -> process() -> rbq() -> output
The following lines of code in avnmp.java.lp.ConfigInterface(ConfigInterface.java)
control the performance of the Logical Process:
final static
long runMinutes = 5;
final static double ootLimit =
0.9;
final static double initTolerance
= 1000.0;
|
The Logical Process is designed to run until
certain conditions are met for gathering data during experimental validation.
It is currently designed to end execution when the proportion of out-of-tolerance
messages exceeds a given threshold. The threshold is tightened over time.
In this case, the tolerance is in packets per second and is initially set
at initTolerance packets per second. The tolerance is reduced by half
every runMinutes of execution. When the proportion of out-of-tolerance
packets reaches ootLimit, execution ends. Thus, data can be collected
over a range of tolerances.
Running the Active Application
After reading through this code and understanding what it does, you can compile
the code "as-is" using the included Makefile. Run in the Magician execution
environment by entering:
- send InjectSnmp AH-1
- send LoadGenAppBasic AH-1
- send Flood AH-1
- send AvnmpSmartDriver AH-1
-
- The object identifiers created within the application and the
predictions generated by Atropos should now be queriable via an SNMP client.
|