The tool works from traces generated by MHealth, the Multicast Health Monitor. MHealth monitors active multicast sessions by collecting RTCP feedback from all sources and receivers. For each receiver, it conducts an mtrace to determine the reverse path back to the source. A tree for the session is built iteratively in this manner. Throughout, MHealth logs each RTCP packet received and each mtrace performed. Mwalk was designed to read these logs and rebuild the history of distribution trees over the lifetime of the session. In addition to using MHealth logs, a separate script, generate, is supplied which generates trace logs for synthesized group distributions using a local source and an explicit list of receivers.
Given the two log files for receiver activity (RTCP) and tree structure (mtrace), the parse script reformats the data and separates it into individual files for each receiver. The java application Builder then takes these files and builds a global view of the entire multicast session. However, since the multicast distribution tree changes as receivers join and leave the group, there is no single tree that represents the entire session. Rather, the end result is a graph in which the edges have explicit active periods. At any instance in time, this "activity graph" forms a single tree which can be walked. As time progresses, the tree changes according to receiver activity.
Once the tree is built, the java application Animator is used to inspect the tree. Animator takes a list of visitors on the command-line. For each visitor, it walks the tree from source to each receiver (depth-first) and/or from each receiver back up to the source. At each node, the visitor is invoked both prior to accessing it's children (or parent) and afterwards as the recursion backs out of the path. State can be stored at each node, in the links between nodes and cumulative results can be collected and passed back along the visiting path. Different visitors can be combined to perform separate passes on the tree, preparing state on one pass that can be used by subsequent visitors during their analysis.
Visitors use another set of classes, evaluators, to determine whether receivers and/or links are "active" for a given pass. Evaluators provide an abstraction which can be implemented to introduce different semantics for activity. In some cases, a strict semantic is intended where a receiver is active only if a valid RTCP interval includes the current walk instance. For other studies, random activity is preferred. A number of evaluators are included with the package and new classes can be easily introduced.
All of this is availble through a single front-end script, aptly named mwalk. Each perl script and java application is accessed as an action of the main script. Details of the command-line interfaces for each action are available. Also, check out the installation instructions and a number of hints on how to extend mwalk with your own visitors.
- parse - parses RTCP and mtrace logs to generate activity and path files per receiver as well as session wide statistics.
- generate - generates RTCP and mtrace logs for a synthesized tree using a supplied list of IP hosts as receivers.
- upath - records unicast paths for a list of IP hosts.
- build - builds an activity graph representing all trees over the life of the session.
- animate - animate active trees with visitors.
- AbstractVisitor - Abstract base class which defines a set of default methods common to most visitors.
- TraceVisitor - Used by the builder to add mtrace paths into the tree.
- MergeVisitor - Used by the builder to merge the period tables.
- PathlessVisitor - Used by the builder to remove dead-end paths.
- PrimaryPathVisitor - Used by the builder to mark the primary path for each receiver.
- RandomPathVisitor - Marks the primary path for each randomly selected receiver as active.
- PrintVisitor - Abstract base class for visitors wanting to print results out to a log file.
- MetricVisitor - Abstract base class defining the looping behavior for most metric visitors.
- BasicMetricVisitor - Gathers metric data and saves it out to a file.
- GatewayMetricVisitor - Extends the basic metric visitor, considering gateways as the receivers.
- UpathMetricVisitor - Gathers metric data using real unicast path lengths in calculations rather than assuming multicast paths equate to unicast paths.
- GlobalVisitor - Runs a pair of visitors, one walking up the tree and a second which walks back down.
- RandomVisitor - Runs other visitors using a random sampling of active receivers.
- CountVisitor - Runs the link count and degree count visitors using a random sampling of active receivers.
- DegreeCountVisitor - Counts the degree of each node along the active tree.
- LinkCountVisitor - Counts the number of links for each receiver along the active tree.
- JoinVisitor - Marks the initial join time along a receiver's earliest path.
- ExportVisitor - Outputs the structure of the tree in an ASCII representation.
- ActivityEvaluator - a receiver is considered active if the current time falls within an active RTCP interval.
- ArrivalEvaluator - a receiver is considered active once it has been heard from (at least one RTCP message is received).
- RandomEvaluator - a receiver is considered active using a normally distributed pseudo-random generator.
- PrimaryPathEvaluator - a link is active if it is the primary path (most used) for a receiver back to the source.