NS-3 Advanced Tutorial:
Visualization and Data Collection
Tom Henderson (University of Washington and
Boeing Research & Technology)
L. Felipe Perrone (Bucknell University)
March 2013
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Tracing and packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
Tracing requirements
Tracing is a structured form of simulation
output
Example (from ns-2):
+
r
r
+
1.84375
1.84375
1.84471
1.84566
1.84566
0
0
2
2
0
2
2
1
0
2
cbr
cbr
cbr
ack
tcp
210 ------- 0 0.0 3.1 225 610
210 ------- 0 0.0 3.1 225 610
210 ------- 1 3.0 1.0 195 600
40 ------- 2 3.2 0.1 82 602
1000 ------- 2 0.1 3.2 102 611
Problem: Tracing needs vary widely
would like to change tracing output without
editing the core
would like to support multiple outputs
NS-3 Consortium Meeting
March 2013
Tracing in ns-3
ns-3 configures multiple 'TraceSource' objects
(TracedValue, TracedCallback)
Multiple types of 'TraceSink' objects can be hooked to
these sources
A special configuration namespace helps to manage
access to trace sources
TracedValue
TraceSource
TraceSource
Config::Connect ("/path/to/traced/value", callback1);
Config::Connect ("/path/to/trace/source", callback2);
unattached
NS-3 Consortium Meeting
March 2013
NetDevice trace hooks
Example: CsmaNetDevice
NetDevice::
ReceiveCallback
CsmaNetDevice::Send ()
MacRx
MacTx
MacDrop
queue
Sniffer
PromiscSniffer
MacTxBackoff
PhyTxBegin
PhyTxDrop
PhyTxEnd
CsmaNetDevice::
TransmitStart()
PhyRxEnd
PhyRxDrop
CsmaNetDevice::
Receive()
CsmaChannel
NS-3 Consortium Meeting
March 2013
Enabling tracing in your code
examples/tutorial/third.cc
Device helpers
provide common
API for enabling
pcap traces
Global pcap tracing
Per-device pcap tracing
NS-3 Consortium Meeting
March 2013
External pcap tools
wireshark graph analysis
Shawn Ostermann's tcptrace tool
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
Gnuplot
src/tools/gnuplot.{cc,h}
C++ wrapper around gnuplot
classes:
Gnuplot
GnuplotDataset
Gnuplot2dDataset, Gnuplot2dFunction
Gnuplot3dDataset, Gnuplot3dFunction
NS-3 Consortium Meeting
March 2013
Enabling gnuplot for your code
examples/wireless/wifi-clear-channel-cmu.cc
produce a plot file that
will generate an EPS figure
one dataset per mode
Add data to dataset
Add dataset to plot
NS-3 Consortium Meeting
March 2013
Matplotlib
Matplotlib or other Python plotting programs can be used
example: src/core/examples/sample-rng-plot.py
NS-3 Consortium Meeting
March 2013
11
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
12
FlowMonitor
Network monitoring framework found in
src/flow-monitor/
Goals:
detect all flows passing through network
stores metrics for analysis such as bitrates,
duration, delays, packet sizes, packet loss
ratios
G. Carneiro, P. Fortuna, M. Ricardo, "FlowMonitor-- a network monitoring framework
for the Network Simulator ns-3," Proceedings of NSTools 2009.
NS-3 Consortium Meeting
March 2013
FlowMonitor architecture
Basic classes
FlowMonitor
FlowProbe
FlowClassifier
FlowMonitorHelper
Ipv4 only
Figure credit: G. Carneiro, P. Fortuna, M. Ricardo, "FlowMonitor-- a network monitoring
framework for the Network Simulator ns-3," Proceedings of NSTools 2009.
NS-3 Consortium Meeting
March 2013
FlowMonitor statistics
Statistics gathered
NS-3 Consortium Meeting
March 2013
FlowMonitor configuration
example/wireless/wifi-hidden-terminal.cc
NS-3 Consortium Meeting
March 2013
FlowMonitor output
This program exports statistics to stdout
Other examples integrate with PyViz
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
18
PyViz overview
Developed by Gustavo Carneiro
Live simulation visualizer (no trace files)
Useful for debugging
mobility model behavior
where are packets being dropped?
Built-in interactive Python console to
debug the state of running objects
Works with Python and C++ programs
NS-3 Consortium Meeting
March 2013
Pyviz screenshot (Graphviz layout)
NS-3 Consortium Meeting
March 2013
Pyviz and FlowMonitor
src/flow-monitor/examples/wifi-olsr-flowmon.py
NS-3 Consortium Meeting
March 2013
Enabling PyViz in your simulations
Make sure PyViz is enabled in the build
If program supports CommandLine
parsing, pass the option
--SimulatorImplementationType=
ns3::VisualSimulatorImpl
Alternatively, pass the "--vis" option
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
23
NetAnim
"NetAnim" by George Riley and John Abraham
pyviz
NS-3 Consortium Meeting
March 2013
24
NetAnim key features
Animate packets over wired-links and wirelesslinks
limited support for LTE traces
Packet timeline with regex filter on packet metadata.
Node position statistics with node trajectory
plotting (path of a mobile node).
Print brief packet-meta data on packets
NS-3 Consortium Meeting
March 2013
NetAnim 3.104 overview
Forthcoming release
More details in packet animation
Smoother mobility
Plotting the routing path from a source node to a
destination IP address
Print routing tables at various times
Flow monitor output parsing
Packet timelines
IP/MAC display
Change color during animation
Designer
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
27
Statistics
Statistics module contributed by Joe Kopena
early in the project
src/stats directory
Initial implementation of an experiment controller
NS-3 Consortium Meeting
March 2013
Statistics module features
Metadata
experiment: name of experiment
strategy: description of what is being tested
runID: allows user to identify the trial
Data output in either 'omnetpp' or 'sqlite' format
Provides a basic statistical data calculator
example "wifi-example-sim"
(packet loss vs distance for
default wifi settings)
NS-3 Consortium Meeting
March 2013
Outline
Getting visualization and raw data from ns-3
Packet traces
Gnuplot and Matplotlib
Flow Monitor
PyViz
NetAnim
Statistics
Data Collection Framework
NS-3 Consortium Meeting
March 2013
30
Data Collection Framework
under review for future ns-3 inclusion
part of the SAFE project development led
by Bucknell University
integrates with visualization module
integrates with steady-state detector
NS-3 Consortium Meeting
March 2013
Data Collection Framework
ns-3 data published
as trace source
Probe: wrap
trace source
Collector: data
reduction
Aggregator:
marshal data
database
controls
to enable/
disable
named
within
configuration
namespace
Static method for
instrumenting code
(Stat::Put() of
ns2measure)
examples:
averaging, time
series, etc.
can be
chained
together
gnuplot
postgresql
other...
files
Leverages prototype developed by Pavel Boyko and Kirill Andreev
Leverages ns2measure project (CNG at University of Pisa)
NS-3 Consortium Meeting
March 2013
Data Collection Framework example
'manet-safe.cc' example in ns-3-dcf repository
Trace source:
"/NodeList/*/ApplicationList/0/$ns3::PacketSink/Rx"
Probe packet sink
receptions between
time 120-150 seconds
Set periodicity to
0.5 seconds
Plot packet count,
total packet byte count
(during interval) and
mean packet byte
count (within interval)
NS-3 Consortium Meeting
March 2013
Data Collection Framework
PacketSink
trace source
Probe
filter trace
source data
within time
window
Collector
compute
statistics on
packet and
byte counts
Aggregator
gnuplot
postgresql
SAFE
other...
Introduce helper to manage configuration
complexity
NS-3 Consortium Meeting
March 2013
Gnuplot data collection example
src/data-collection/examples/manet-safe.cc
NS-3 Consortium Meeting
March 2013
Gnuplot data collection example (2)
src/data-collection/examples/manet-safe.cc
NS-3 Consortium Meeting
March 2013
Under construction:
steady-state collector
Built upon steady-state detector classes
Receives samples
Applies steady-state detection algorithm
One pass-through trace source (all samples)
One filtered trace source (post-transient
sample)
MSER-5 and possibly other methods
NS-3 Consortium Meeting
March 2013
Under construction: in-browser
visualization
Time series support:
nearly completed
Selection buttons for metrics collected
NS-3 Consortium Meeting
March 2013
Under construction: from browser to file
Plot is built interactively, through browser, and
converted to static file (PDF)
NS-3 Consortium Meeting
March 2013
Next priority for in-browser visualization
Estimation support:
in early design
Selection buttons for data series
Confidence intervals
Figure source: Broch et al. A Performance Comparison of Multi-Hop Wireless
Ad Hoc Routing Protocols
NS-3 Consortium Meeting
March 2013
Later priority for in-browser visualization
Distribution support:
in early discussion
Selection buttons for data series
Figure source: Broch et al. A Performance Comparison of Multi-Hop Wireless
Ad Hoc Routing Protocols
NS-3 Consortium Meeting
March 2013