Modeltech_Slides_ns3_submittedx

Download Report

Transcript Modeltech_Slides_ns3_submittedx

Chapter 2 : The ns-3 Network Simulator
George F. Riley
Thomas R. Henderson
ns-3 Introduction
ns-3 (http://www.nsnam.org) is a free, open
source software project building and
maintaining a discrete-event network
simulator for research and education
Technical goals:
 Build and maintain a simulation core aligned
with the needs of the research community
 Help to improve the technical rigor of network
simulation practice
2
ns-3 themes
 Research and education focus
 Build and maintain simulation core, integrate
models developed by other researchers
 Support research-driven workflows
 Open source development model
 Research community maintains the models
 Leverage available tools and models
 Write programs to work together
 Enforce core coding/testing standards
3
ns-3 software overview
 ns-3 is written in C++, with bindings available
for Python
 simulation programs are C++ executables or
Python programs
 Python is often a glue language, in practice
 ns-3 is a GNU GPLv2-licensed project
 ns-3 is not backwards-compatible with ns-2
4
ns simulators: a brief history
1990
2000
2010
1988: REAL (Keshav)
quarterly
releases
since ns-3.1
1990s: ns-1
1996: ns-2
1997-2000: DARPA VINT
2001-04: DARPA SAMAN, NSF CONSER
2006: ns-3 funded (NSF, INRIA)
ns-3 features a
new simulation
core, with models
drawn from GTNetS,
ns-2, and the "yans"
network simulator
ns-3 core development (2006-08)
June 2008: ns-3.1 release
5
Acknowledgment of support
6
2.1 Introduction
7
Why ns-3?
 Despite huge success with ns-2, the ns-3 developers had
project goals that motivated the development of a new tool
1)
2)
3)
4)
Improve the realism of the models
Software reuse
Improved debugging
Consider long-term software maintenance
8
1) attention to realism
Problem: Research often involves a mix of
simulations and testbed or live experiments
 If the simulator cannot be made to closely model
a real system:
 hard to compare results or validate the model
 hard to reuse software between the two domains
ns-3 solution:
 model nodes more like a real computer
 support key interfaces such as sockets API and
IP/device driver interface (in Linux)
 reuse of kernel and application code
9
1) attention to realism (example)
An ns-3 Node is a husk of a computer to which
applications, stacks, and NICs are added
Application
Application
Application
(operating
systems)
10
2) software integration
Problem: why reimplement models and tools for
which open-source implementations abound?
ns-3 solution:
 ns-3 conforms to standard input/output formats
so that other tools can be reused.
 e.g., pcap trace output, ns-2 mobility scripts
 ns-3 is adding support for running
implementation code
 Network Simulation Cradle (Jansen) integration has
met with success: Linux TCP code
 ns-3 “direct code execution” environment
11
2) software reuse (cont.)
 Example: ns-3 trace viewed with Wireshark:
12
3) Improved debugging
 Avoid split-language object implementations that
proved to be hard to debug in ns-2 (OTcl/C++)
 ns-3 uses a C++ core with Python API bindings
 Layer a "helper" API on top of a powerful but complex
low-layer API
 Different APIs for different user expertise
 Reduce memory errors via use of smart pointers
13
4) Software maintenance
 Open source projects are challenged to maintain the
software over time
 Developers contribute models, then graduate
 Maintainers change over time
 ns-3 chose to use a more rigorous coding standard,
detailed code reviews, and regression testing
infrastructure
 ns-3 project decided not to devote scarce
maintenance resources to develop and maintain ns-2
backward compatibility
14
2.2 Modeling the Network Elements in ns-3
15
2.2 Modeling the Network Elements in ns-3
 Key objects in ns-3: nodes, devices, channels, protocols,
packets, headers
Application
Application
Application
Application
Packet
Protocol
stack
Channel
Protocol
stack
Node
Node
NetDevice
NetDevice
NetDevice
16
Random Variables
 Currently implemented distributions








Uniform: values uniformly distributed in an interval
Constant: value is always the same (not really random)
Sequential: return a sequential list of predefined values
Exponential: exponential distribution (poisson process)
Normal (gaussian)
Log-normal
pareto, weibull, triangular,
…
17
ns-3 random number generator
 Uses the MRG32k3a generator from Pierre
L'Ecuyer
 http://www.iro.umontreal.ca/~lecuyer/myftp/pape
rs/streams00.pdf
 Period of PRNG is 3.1x10^57
 Partitions a pseudo-random number generator
into uncorrelated streams and substreams
 Each RandomVariable gets its own stream
 This stream partitioned into substreams
 Independent replications are handled by
incrementing the run number to obtain
uncorrelated substreams
18
Tracing and statistics
 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
19
ns-3 has a new tracing model
ns-3 solution: decouple trace sources from trace sinks
Trace source
Trace source
Trace sink
Trace source
configurable by
user
unchanging
Benefit: Customizable trace sinks
20
ns-3 tracing
 various trace sources (e.g., packet receptions, state
machine transitions) are plumbed through the system
 Documented in a central place
21
Basic tracing
 Helper classes hide the tracing details from the user, for
simple trace types
 ascii or pcap traces of devices
std::ofstream ascii;
ascii.open ("wns3-helper.tr");
CsmaHelper::EnableAsciiAll (ascii);
CsmaHelper::EnablePcapAll ("wns3-helper");
YansWifiPhyHelper::EnablePcapAll ("wsn3-helper");
22
Multiple levels of tracing
 Highest-level: Use built-in trace sources and sinks and hook a
trace file to them
 Mid-level: Customize trace source/sink behavior using the
tracing namespace
 Low-level: Add trace sources to the tracing namespace
 Or expose trace source explicitly
23
Highest-level of tracing
 Use built-in trace sources/sinks, and hook a trace file to them
// Also configure some tcpdump traces; each interface will be traced
// The output files will be named
// simple-point-to-point.pcap-<nodeId>-<interfaceId>
// and can be read by the "tcpdump -r" command (use "-tt" option to
// display timestamps correctly)
PcapTrace pcaptrace ("simple-point-to-point.pcap");
pcaptrace.TraceAllIp ();
24
Mid-level of tracing
 Mid-level:
Customize trace source/sink behaviour with tracing namespace
Regular expression editing
void
PcapTrace::TraceAllIp (void)
{
NodeList::Connect ("/nodes/*/ipv4/(tx|rx)",
MakeCallback (&PcapTrace::LogIp, this));
}
Hook in a different trace sink
25
ns-3 attribute system
Problem: Researchers want to identify all of the values
affecting the results of their simulations
 and configure them easily
ns-3 solution: Each ns-3 object has a set of attributes:
 A name, help text
 A type
 An initial value




Control all simulation parameters for static objects
Dump and read them all in configuration files
Visualize them in a GUI
Makes it easy to verify the parameters of a simulation
26
Use cases for attributes
 An Attribute represents a value in our system
 An Attribute can be connected to an underlying variable or
function
 e.g. TcpSocket::m_cwnd;
 or a trace source
27
Use cases for attributes (cont.)
 What would users like to do?




Know what are all the attributes that affect the simulation at run time
Set a default initial value for a variable
Set or get the current value of a variable
Initialize the value of a variable when a constructor is called
 The attribute system is a unified way of handling these
functions
28
How to handle attributes
 The traditional C++ way:
 export attributes as part of a class's public API
 walk pointer chains (and iterators, when needed) to find what you need
 use static variables for defaults
 The attribute system provides a more convenient API to the
user to do these things
29
Navigating the attributes
 Attributes are exported into a string-based namespace, with
filesystem-like paths
 namespace supports regular expressions
 This allows individual instances of attributes to be manipulated
 Attributes also can be referenced by name without specifying
a path through the object namespace
 e.g. “ns3::WifiPhy::TxGain”
 This allows users to manipulate a global (default) value of the attribute
 A Config class allows users to manipulate the attributes
30
Attribute namespace
 strings are used to
describe paths through
the namespace
Config::Set ("/NodeList/1/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
31
Navigating the attributes using paths
 Examples:
 Nodes with NodeIds 1, 3, 4, 5, 8, 9, 10, 11:
“/NodeList/[3-5]|[8-11]|1”
 UdpL4Protocol object instance aggregated to matching nodes:
“/$ns3::UdpL4Protocol”
32
What users will do
 e.g.: Set a default initial value for a variable
Config::Set (“ns3::WifiPhy::TxGain”, DoubleValue (1.0));
 Syntax also supports string values:
Config::Set (“WifiPhy::TxGain”, StringValue (“1.0”));
Attribute
33
Value
Fine-grained attribute handling
 Set or get the current value of a variable
 Here, one needs the path in the namespace to the right instance of the
object
Config::SetAttribute(“/NodeList/5/DeviceList/3/Ph
y/TxGain”, DoubleValue(1.0));
DoubleValue d; nodePtr->GetAttribute (
“/NodeList/5/NetDevice/3/Phy/TxGain”, v);
 Users can get pointers to instances also, and pointers to trace
sources, in the same way
34
ns-3 attribute system
 Object attributes
are organized and
documented in the
Doxygen
 Enables the
construction of
graphical
configuration
tools:
35
Attribute documentation
36
Options to manipulate attributes
 Individual object attributes often derive from default values
 Setting the default value will affect all subsequently created objects
 Ability to configure attributes on a per-object basis
 Set the default value of an attribute from the command-line:
CommandLine cmd;
cmd.Parse (argc, argv);
 Set the default value of an attribute with NS_ATTRIBUTE_DEFAULT
 Set the default value of an attribute in C++:
Config::SetDefault ("ns3::Ipv4L3Protocol::CalcChecksum",
BooleanValue (true));
 Set an attribute directly on a specic object:
Ptr<CsmaChannel> csmaChannel = ...;
csmaChannel->SetAttribute ("DataRate",
StringValue ("5Mbps"));
37
2.3 Simulating a Computer Network in ns-3
38
Four basic steps to perform
1. Create the network topology
2. Create the data demand on the network
3. Execute the simulation
4. Analyze the results
Program listing 2-1 annotates the file "first.cc", which
is the first tutorial program discussed in the ns-3 tutorial
39
2.4: Smart Pointers in ns-3
40
Smart Pointers
 Memory management in a C++ program is a complex
process, and is often done incorrectly or
inconsistently.
 We have settled on a reference counting design using
so-called "smart-pointers"
 All objects maintain an internal reference count that allows
the object to safely delete itself when the count goes to zero
 We provide a class called "Ptr" that is similar to the
intrusive_ptr of the Boost C++ library
 This implementation allows you to manipulate the smart
pointer as if it was a normal pointer: you can compare it
with zero, compare it against other pointers, assign zero to
it, etc.
41
2.5: Representing Packets in ns-3
42
2.5: Representing Packets in ns-3
 The design of the Packet framework of ns-3 was heavily
guided by a few important use-cases:
 avoid changing the core of the simulator to introduce new types of
packet headers or trailers
 maximize the ease of integration with real-world code and systems
 make it easy to support fragmentation, defragmentation, and,
concatenation which are important, especially in wireless systems.
 make memory management of this object efficient
 allow actual application data or dummy application bytes for
emulated applications
 Each network packet contains a byte buffer, a set of byte
tags, a set of packet tags, and metadata.
43
Packet class organization
each Packet has a
reference to a Buffer
holding packed packet
data
class Packet provides
the user API
Packet Tags contain
simulation-specific
information such as
cross-layer messages,
or simulation flow IDs
optional PacketMetadata
provides metadata
about the contents of
the buffer to enable
(e.g.) pretty-printing
44
Copy-on-write semantics
 Packets implement copy-on-write semantics to reduce the
number of deep data buffer copies during a simulation
 Packets are reference-counted objects; multiple clients can
hold references to the same packet, and the packet is
automatically freed when all references are deleted
 When more than one reference to a packet buffer exists,
the packet buffer can be shared unless a so-called
"dirty"operation (such as editing a protocol header) is
performed by one of the packet users
45
2.6: Object Aggregation in ns-3
46
ns-3 object aggregation
Problem: coupling between models hinders
software reuse in different configurations
 must intrusively edit the base class for this
 or, leads to C++ downcasting, e.g.:
// Channels use Node pointers, but here I really want a
// MobileNode pointer, to access the MobileNode API
double
WirelessChannel::get_pdelay(Node* tnode, Node* rnode)
{
// Scheduler
&s = Scheduler::instance();
MobileNode* tmnode = (MobileNode*)tnode;
MobileNode* rmnode = (MobileNode*)rnode;
 known as the C++ “weak base class” problem
47
ns-3 object aggregation (cont.)
ns-3 solution: an object aggregation model
 objects can be aggregated to other objects at
run-time
 a “query interface” is provided to ask whether an
particular object is aggregated
 similar in spirit to COM or Bonobo objects
// aggregate an optional mobility object to a node:
node->AggregateObject (mobility);
...
// later, other users of node can query for the optional object:
senderMobility = i->first->GetNode ()->GetObject<MobilityModel> ();
// we did not have to edit class Node (base class), or downcast!
48
2.7: Events in ns-3
49
Events in discrete-event simulation
 Simulation time moves discretely from event to
event
 C++ functions schedule events to occur at
specific simulation times
 A simulation scheduler orders the event
execution
 Simulation::Run() gets it all started
 Simulation stops at specific time or when events
end
50
Events in ns-3
 An event in ns-3 is simply a function pointer with some
state (the technical term is a "functor")
 Any object method or static function can be used as an
event handler in ns-3
 e.g. Simulator::Schedule (function name, object pointer,
arguments);
 This is different from several other discrete-event
simulators, where special Handler() methods provide a
centralized place for processing events on an object
51
2.7: Events in ns-3
static void
ExampleFunction (MyModel *model)
{
std::cout << "ExampleFunction received event at "
<< Simulator::Now ().GetSeconds () << "s" << std::endl;
model->Start ();
}
int main (int argc, char *argv[])
{
MyModel model;
Simulator::Schedule (Seconds (10.0), &ExampleFunction, &model);
Simulator::Run ();
Simulator::Destroy ();
An event: At time 10 seconds,
call ExampleFunction() with
the argument &model.
}
52
2.8 Compiling and Running the Simulation
53
ns-3 uses the waf build system
 Waf is a Python-based framework for configuring, compiling
and installing applications.
 It is a replacement for other tools such as Autotools, Scons, CMake or
Ant
 http://code.google.com/p/waf/
 For those familiar with autotools:
Autotools
->
configure ->
make
->
Waf equivalent
./waf -d [optimized|debug] configure
./waf
54
Running programs
 Programs are built as
build/<variant>/path/program-name
 programs link shared library libns3.so
 Using ./waf --shell
./waf --shell
./build/debug/samples/main-simulator
 Using ./waf --run
./waf --run examples/csma-bridge
./waf --pyrun examples/csma-bridge.py
55
2.9: Animating the Simulation
56
Animation Overview
 ns-3 not directly funding visualizers and configurators
 no “official” tool; expect multiple to be developed
 Not integrated (directly) with ns-3
 Ns-3 creates “animation” file, visualizers use this as input and create
the animation.
 netanim, pyviz, and nam for ns-3
57
Pyviz: A Python-based animator
58
NetVis
59
NetVis / XML Interface
<anim lp = "0”>
<topology minX = "1000" minY = "2382.3" maxX = "10900" maxY = "8617.7">
<node lp = "0" id = "0" locX = "4000" locY = "5500”
image = "Satellite.png" imageScale = "10.0"/>
<node lp = "0" id = "1" locX = "7000" locY = "5500”
image ="Satellite.png" imageScale = "5.0"/>
<link fromLp = "0" fromId = "0" toLp = "0" toId = "1"/>
</topology>
<packet fromLp = "0" fromId = "11" fbTx = "0.66483" lbTx = "0.665264">
<rx toLp = "0" toId = "1" fbRx = "0.66583" lbRx = "0.666264"/>
</packet>
<wpacket fromLp = "0"
range = "250">
<rx toLp = "0" toId =
<rx toLp = "0" toId =
<rx toLp = "0" toId =
<rx toLp = "0" toId =
<rx toLp = "0" toId =
<rx toLp = "0" toId =
</wpacket>
</anim>
fromId = "49" fbTx = "0.549245" lbTx = "0.549497”
"16"
"18"
"29"
"32"
"36"
"37"
fbRx
fbRx
fbRx
fbRx
fbRx
fbRx
=
=
=
=
=
=
"0.549497"
"0.549497"
"0.549497"
"0.549498"
"0.549498"
"0.549497"
60
lbRx
lbRx
lbRx
lbRx
lbRx
lbRx
=
=
=
=
=
=
"0.549749"/>
"0.549749"/>
"0.549749"/>
"0.549749"/>
"0.549749"/>
"0.549749"/>
2.10: Scalability with Distributed Simulation
61
Overview
 Parallel and distributed discrete event simulation
 Allows single simulation program to run on multiple interconnected
processors
 Reduced execution time! Larger topologies!
 Terminology
 Logical process (LP)
 Rank or system id
62
Quick and Easy Example
Figure 1. Simple point-to-point topology
63
Quick and Easy Example
Figure 2. Simple point-to-point topology, distributed
64
Implementation Details
 LP communication
 Message Passing Interface (MPI) standard
 Send/Receive time-stamped messages
 MpiInterface in ns-3
 Synchronization
 Conservative algorithm using lookahead
 DistributedSimulator in ns-3
65
Implementation Details (cont.)
 Assigning rank
 Currently handled manually in simulation script
 Next step, MpiHelper for easier node/rank mapping
 Remote point-to-point links
 Created automatically between nodes with different ranks through pointto-point helper
 Packet sent across using MpiInterface
66
Implementation Details (cont.)
 Distributing the topology
 All nodes created on all LPs, regardless of rank
 Applications are only installed on LPs with target node
Figure 3. Mixed topology, distributed
67
Performance Test
 DARPA NMS campus network simulation




Allows creation of very large topologies
Any number of campus networks are created and connected together
Different campus networks can be placed on different LPs
Tested with 2 CNs, 4 CNs, and 6 CNs
68
Campus Network Topology
Figure 4. Single campus
network
69
2 Campus Networks
2.5
4500
1 LP
4000
2 LPs
2.25
3500
Speedup
Time (s)
3000
2500
2000
2
1500
1.75
1000
500
0
1.5
116
164
260
452
836
116
Number of nodes
164
260
452
Number of nodes
Figure 5. Execution time with 2 campus networks
Figure 6. Speedup with 2 LPs
70
836
Summary
 Distributed simulation in ns-3 allows a user to run a single
simulation in parallel on multiple processors
 By assigning a different rank to nodes and connecting these
nodes with point-to-point links, simulator boundaries are
created
 Simulator boundaries divide LPs, and each LP can be executed
by a different processor
 Distributed simulation in ns-3 offers solid performance gains in
time of execution for large topologies
71
2.11: Emulation Capabilities
72
Emulation support
Support moving between simulation and testbeds or live
systems
 A real-time scheduler, and support for two modes of
emulation
GlobalValue::Bind (“SimulatorImplementationType”,
StringValue (“ns3::RealTimeSimulatorImpl”));
73
ns-3 emulation modes
real machine
virtual
machine
ns-3
virtual
machine
ns-3
ns-3
real
machine
real
machine
Testbed
1) ns-3 interconnects real or virtual
machines
2) testbeds interconnect ns-3
stacks
Various hybrids of the above are possible
74
Example: ns-3 with Linux Network Namespaces
Linux (FC 12 or Ubuntu 9.10) machine
ns-3
ghost node
Container
Wifi
ghost node
Container
TapBridge
WiFi
tapX
tapY
/dev/tunX
/dev/tunY
Makes use of a "ghost node" that bridges packets to a
Linux namespace container running the protocol stack
and applications
75
Example: ORBIT and ns-3
• Support for use of Rutgers WINLAB ORBIT radio
grid
Image from ORBIT - Wireless Network Testbed website
76
Issues in Performing "Co-Simulation"
 Ease of use
 Configuration management and coherence
 Information coordination (two sets of state)
 e.g. IP/MAC address coordination
 Output data exists in two domains
 Debugging
 Error-free operation (avoidance of misuse)
 Synchronization, information sharing, exception handling
 Checkpoints for execution bring-up
 Inoperative commands within an execution domain
 Deal with run-time errors
 Soft performance degradation (CPU) and time discontinuities
77
2.12: Analyzing the Results
78
Frameworks for ns-3
 NSF CISE Community Research Infrastructure
 University of Washington (Tom Henderson),
Georgia Tech (George Riley), Bucknell Univ.
(Felipe Perrone)
 Project timeline: 2010-14
Figure courtesy of Dr. Felipe Perrone, Bucknell University
79
Automation
 Inspired by SWAN-Tools and ANSWER
frameworks.
 User interfaces, description languages, and
tools for automation of experiments.
 Model composition, structural validation,
control of experiments, data processing and
storage, and archiving experimental setup.
80
Topology generation
 Integrate BRITE topology generator (Boston
Univ.) into framework.
 BRITE is downloaded into distribution and
compiled by the ns-3 build system.
 The ns-3 simulation script uses a topology helper
which reads a BRITE configuration file, receives
results from BRITE, and builds the ns-3
topology.
81
Higher-level modeling and experiment description
 Provide a model and a
description of experiment.
 Framework generates design
of experiment space,
distribute simulation runs to
machines, collect results and
archive in persistent storage.
 User mines storage to find,
extract, and visualize results.
Figure courtesy of Dr. Felipe Perrone, Bucknell University
82
General architecture
Figure courtesy of Dr. Felipe Perrone, Bucknell University
83