slides.tex
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:50k
源码类别:

通讯编程

开发平台:

Visual C++

  1. % $Id: slides.tex,v 1.2 1998/04/10 16:07:24 kannan Exp $
  2. % $Source: /cvsroot/nsnam/ns-2/doc/kannan/slides.tex,v $
  3. documentclass[landscape]{foils}
  4. usepackage{times}
  5. usepackage[T1]{fontenc}
  6. usepackage{color}
  7. usepackage{nsfoils}
  8. MyLogo{raisebox{-2ex}{includegraphics{isi_logo_small}}}
  9. begin{document}
  10. keyword{Introduction}
  11. foilhead{blue ns~v2 Workshop}
  12. begin{center}
  13.   renewcommand{arraystretch}{2}
  14.   begin{tabular}{c}
  15.     Kannan Varadhan\
  16.     USC/Information Sciences Institute\
  17.     tup{kannan@catarina.usc.edu}\[3ex]
  18.     18 September, 1997\
  19.   end{tabular}
  20. end{center}
  21. vspace*{4em}
  22. {scriptsize
  23.     The work of K.~Varadhan and the VINT project at USC/ISI is supported by
  24.     the Defense Advanced Research Projects Agency (DARPA)
  25.     under contract number ABT63-96-C-0054.
  26.     Any opinions, findings, and conclusions or recommendations expressed
  27.     in this material are those of the author(s) and do not necessarily
  28.     reflect the views of the DARPA.
  29. }
  30. begin{comment}
  31. item Intro
  32. end{comment}
  33. keyword{Outline}
  34. foilhead[-2ex]{blue Outline}
  35. begin{enumerate}
  36.   item Topology Generation, the nodes and the links
  37.   item OTcl and C++: The Duality
  38.   item Routing
  39.     begin{sublist}
  40.     item Unicast
  41.     item Multicast
  42.     item Network Dynamics
  43.     end{sublist}
  44.   item Multicast Transport
  45.   item Issues of Scale
  46.   item Programming and Simulation Debugging
  47. end{enumerate}
  48. begin{comment}
  49. item Have we done topologies yet?
  50. end{comment}
  51. foilhead{blue Nodes}
  52. placefig{node}
  53. begin{comment}
  54. item address and port classifiers, minimalistic configuration
  55. item Address format
  56. item restriction on number of nodes
  57. item NxN split
  58. end{comment}
  59. keyword{Topology Definition}
  60. foilhead{violet Multicast Nodes}
  61. placefig{mcastNode}
  62. begin{comment}
  63. item Multicast Classifier, <S,G> classification
  64. item Replicators
  65. end{comment}
  66. foilhead{indigo Classifiers}
  67. begin{itemize}
  68. item Table of $n$ slots
  69. item Each slot can point to a TclObject
  70. item When a packet is received
  71.   --- fcn[]{classify} identifies the slot to forward the packet to
  72. item If slot is invalid, the classifier calls proc[]{no-slot}
  73. item Many different types of classifiers
  74.   {footnotesize
  75.   begin{tabularx}{linewidth}{rX}
  76.     Address Classifiers & parse address in packet \
  77.     MultiPath Classifier & returns next slot number to use \
  78.     Replicator & uses classifier as a table \
  79.   end{tabularx}}
  80. end{itemize}
  81. begin{comment}
  82. item Note difference in replicator
  83. end{comment}
  84. foilhead{violet Classifier methods}
  85. begin{itemize}
  86. item Install entries into classifier
  87.   begin{sublist}
  88.   item proc[]{install}
  89.   item proc[]{installNext}
  90.   end{sublist}
  91. item Query entries in classifier
  92.   begin{sublist}
  93.   item proc[]{elements} hfil returns current list of elements inserted
  94.   item proc[]{slot} hfil  returns handle of object in the specified slot
  95.   end{sublist}
  96.   
  97. item Delete entry in a particular slot
  98.   begin{sublist}
  99.   item proc[]{clear}
  100.   end{sublist}
  101. item fcn[]{classify} internal method: receives a packet, and returns 
  102.   a slot number for that packet.
  103. end{itemize}
  104. begin{comment}
  105. item The install procedures overload instproc-likes to return nice
  106. key-value paris that can be loaded into Tcl arrays directly.
  107. item The classify is internal nad different from the rest.
  108. item classify is not used by Multipath or replicators
  109. end{comment}
  110. foilhead{indigo Links}
  111. placefig{link}
  112. begin{comment}
  113.   item 
  114. end{comment}
  115. foilhead{violet Connectors}
  116. begin{itemize}
  117. item Connectors receive incoming packets, and (usually) transmit them
  118.   to their code{target_}
  119. item Many different types of connectors:
  120.   {footnotesize
  121.   begin{tabularx}{linewidth}{rX}
  122.     Queue & holds a certain number of packets.
  123.     Packets exceeding their queue-size are sent to the queue's drop-target.\
  124.     LinkDelay &  models delay/bandwidth of the link for detailed simulations.\
  125.     TTLChecker &  decrements TTLs on each packet,
  126.                         drops the packet if the TTL becomes zero.\
  127.     DynaLink & transmit packets if the link is up, drop packet otherwise\
  128.        & Other tracing related objects\
  129.   end{tabularx}}
  130. end{itemize}
  131. begin{comment}
  132.   item N way in, one way out.
  133.   item Multiple trace data, and hecne sleep overnight.
  134. end{comment}
  135. foilhead{violet Connector methods}
  136. begin{itemize}
  137. item Add tracing or monitoring:
  138.   begin{sublist}
  139.   item code{trace}
  140.   item code{attach-monitors}
  141.   item code{init-monitor}
  142.   end{sublist}
  143. end{itemize}
  144. begin{comment}
  145. item trace adds enQ, deQ, drpT to trace packet activity
  146. item attach-monitors adds specified snoop agents to link
  147. item init-monitor adds queue length tracking code
  148. end{comment}
  149. foilhead{indigo Topology Generation Resources}
  150. At iurl{http://netweb.usc.edu/daniel/research/sims/}
  151. begin{itemize}
  152. item code{ntg} by Steve Hotz tup{hotz@isi.edu}
  153. item code{GT-ITM} by Ellen Zegura tup{ewz@cc.gatech.edu}, \ Ken
  154.   Calvert tup{calvert@cc.gatech.edu}
  155. item code{TIERS} by Matthew Doar tup{mdoar@nexen.com}
  156. item code{rtg} by Liming Wei tup{lwei@cisco.com}, \ Lee Breslau tup{breslau@parc.xerox.com}
  157. end{itemize}
  158. begin{comment}
  159. item work done by Daniel Zappala
  160. item looks at different types of topology generators and summarises
  161.   them
  162. item very brief look here
  163. end{comment}
  164. foilhead{violet Topology Generation}
  165. begin{tabularx}{linewidth}{rX@{hspace*{1.5em}}X}
  166.  & multicolumn1c{Type of Graph} & multicolumn1c{Edge Models} \[2ex]
  167. code{ntg} & $n$-level hierarchy &  user configurable probability distributions \
  168. code{GT-ITM} & flat random, $n$-level hierarchies, transit-stub
  169. networks & many different edge models \
  170. code{TIERS} & 3-level hierarchy & Minimum spanning tree + random
  171. placement\
  172. code{rtg} & flat random & waxman \
  173. end{tabularx}
  174. begin{comment}
  175. item ntg generates geographic placement
  176. item GT-ITM transit stub appears to match Internet like networks in
  177.   terms of degree of connectivity and other characteristics
  178. item TIERS generates MST and then fills it in
  179. item rtg place nodes, and then allocate edges accord to waxman dist.
  180. item ns tools availabel to convert some of these topologies to ns
  181.   scripts
  182. item some prebuilt topologies alread in distribution in tcl/ex
  183. end{comment}
  184. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  185. foilhead{blue OTcl and C++: The Duality}
  186. placefig{duality}
  187. begin{comment}
  188. item verb|placefig{duality}|
  189. item C++ code and OTcl scripts within ns
  190. item Class hierarchy and protocol programming is often in C++
  191. item OTcl helper scripts and built up primitives in OTcl
  192. item not all hierarchy is in mirrored.  will see examples
  193. item User simulation is scripted (O)Tcl code
  194. end{comment}
  195. keyword{OTcl Linkage}
  196. foilhead{indigo OTcl Linkage}
  197. C++ $iff$ OTcl 
  198. begin{tabularx}{linewidth}{rX}
  199.   class Tcl           & C++ methods to access the OTcl interpreter \
  200.   scriptsize  class TclCommand      & scriptsize Basic script to
  201.                                 provide limited global
  202.                                 commands to the interpreter \
  203.   class EmbeddedTcl     & Container for Tcl scripts that are pre-loaded
  204.                                 at startup \
  205.   class TclObject       & Root of basic object hierarchy in ns \
  206.   class TclClass        & C++ class to set up the TclObject hierarchy \
  207.   scriptsize class InstVar   & scriptsize internal class
  208.                                 to bind C++ member variables
  209.                                 to OTcl instance variables \
  210. end{tabularx}
  211. begin{comment}
  212. item outline slide
  213. item Five classes
  214. end{comment}
  215. foilhead{indigo C++ Methods to Access OTcl}
  216. The class Tcl
  217. begin{list}{--~}{}
  218. item Obtain a handle
  219. item Invoke OTcl procedures
  220. item Retrieve the result from the interpreter
  221. item On invocation, pass a result string to the interpreter
  222. item Return Success/Failure return codes
  223. end{list}
  224. begin{comment}
  225. item Mention preamble, 
  226. item call to
  227. item called from
  228. end{comment}
  229. foilhead[-2ex]{violet class Tcl: C++ Methods to access OTcl}
  230. begin{program}
  231.   Tcl& tcl = {bf{}Tcl::instance}();        * obtain a handle to the interpreter */
  232.   if (argc == 2) {                   * cmd: {rm{}foo now} */
  233.     if (strcmp(argv[1], "now") == 0) {
  234.       {bf{}tcl.resultf}("%g", clock());    * pass back the result */
  235.       return TCL_OK;                 * return success code to interpreter */
  236.     }
  237.     {bf{}tcl.result}("command not understood"); * alternate way of passing result */
  238.     return TCL_ERROR;
  239.   } else if (argc == 3) {            * cmd: {rm{}foo now tup{callback}} */
  240.     if (strcmp(argv[1], "now") != 0) {
  241.       {bf{}tcl.error}("command not understood");  * alternate way to return error */
  242.     }
  243.     char *callback = arv[2];
  244.     {bf{}tcl.eval}(callback);                * invoke an OTcl procedure */
  245.     {bf{}tcl.evalc("puts {hello, world}");}   * another variant */
  246.     char* timestr = {bf{}tcl.result}();   * callback result from the interpreter */
  247.     clock() = atof(timestr);
  248.   } else {
  249.     Interp* ti = {bf{}tcl.interp}();  * access the interpreter directly */
  250.     ldots                                 * ldots to do whatever */
  251. end{program}
  252. begin{comment}
  253. item obtain the reference
  254. item invoke OTcl procedures, one shown, others...
  255. item result handling, all three forms shown
  256. item error handling, differences from returning TCL_ERROR
  257. item Direct access
  258. end{comment}
  259. foilhead{red class TclCommand}
  260. Defines simple commands that execute in global interpreter context
  261. For example, code{ns-version}
  262. begin{comment}
  263. item 1. define the class, derived from TclCommand.
  264. item 2. constructor invokes parent constst. w. name of command as argument
  265. item 3. command function and arguments to do the work
  266. item 4. declare instance.  default instance for ns-version and others
  267.   are declared in init_misc(), in misc.cc, and are called by tclAppInit().
  268. end{comment}
  269. foilhead{indigo class EmbeddedTcl: Adding new OTcl code into ns}
  270. begin{itemize}
  271. item container for scripts pre-loaded at startup
  272.   begin{sublist}
  273.   item Tclf{tcl-object.tcl}
  274.   item nsf{tcl/lib/ns-lib.tcl}
  275.   item scripts recursively sourced by nsf{tcl/lib/ns-lib.tcl}
  276.   end{sublist}
  277. item Tclf{tcl-object.tcl} % $Rightarrow$ code{et_tclobject} hfil
  278.   activated by fcn[]{Tcl::init}
  279.   nsf{tcl/lib/ns-lib.tcl} % $Rightarrow$ code{et_ns_lib} hfil
  280.   activated by fcn[]{Tcl_AppInit}
  281. end{itemize}
  282. begin{comment}
  283. item Don't add your own scripts.  But if you did,
  284. item use tcl2c++ to create the object instance
  285. item  You'd a find a place/mechanism to load the object
  286. end{comment}
  287. foilhead{indigo class TclObject}
  288. begin{itemize}
  289. item Basic object hierarchy in ns
  290. item Hierarchy mirrored in C++ and OTcl
  291. item For example:
  292.   begin{program}small
  293.         set srm [new Agent/SRM/Adaptive]
  294.         $srm set packetSize_ 1024
  295.         $srm traffic-source $s0
  296.   end{program}
  297. end{itemize}
  298. begin{comment}
  299. item creation/deletion
  300. item binding variables
  301. item instproc-likes
  302. end{comment}
  303. foilhead[-2ex]{violet class TclObject: Hierarchy and Shadowing}
  304. placefig{tclobject-hier}
  305. begin{comment}
  306. item verb|placefig{tclobject-hier}|
  307. item object hierarchy
  308. item handle
  309. item relationship to shadow
  310. end{comment}
  311. foilhead[-1.5ex]{violet class TclObject: Creation/Deletion Mechanisms}
  312. begin{itemize}
  313. item global procedure proc[]{new}
  314.   placefig{tclobject-mech}
  315. item global procedure proc[]{delete}
  316. end{itemize}
  317. begin{comment}
  318. item verb|placefig{tclobject-mech}|
  319. item handle and handle equivalence
  320. item constructor calling sequence: self next
  321. item Base class constructr creates shadow...common mistake
  322. item caveat regarding OTcl constructors
  323. item create-shadow
  324. item command method
  325. end{comment}
  326. foilhead[-3ex]{violet class TclObject: Binding Variables}
  327. begin{itemize}
  328. item makes identical C++ member variables to OTcl instance variables
  329. item Syntax
  330.   begin{program}
  331.     ASRMAgent::ASRMAgent() {
  332.       bind("pdistance_", &pdistance_);      * real variable */
  333.       ldots
  334.     }
  335.   end{program}
  336. item Initialisation through OTcl class variables
  337.   begin{program}
  338.       Agent/SRM/Adaptive set pdistance_ 15.0
  339.       Agent/SRM set pdistance_ 10.0
  340.       ldots
  341.   end{program}
  342. item Other methods: fcn[]{bind} (integers),
  343.   fcn[]{bind_time} (time variables),
  344.   fcn[]{bind_bw} (bandwidth variables),
  345.   fcn[]{bind_bool} (boolean variables)
  346. end{itemize}
  347. begin{comment}
  348. item Five different data types supported.
  349. item Usage syntax supports obvious normal forms
  350. item identicality of data
  351. end{comment}
  352. foilhead{violet Examples of Specify Bound variables}
  353. begin{program}
  354.         $object set bwvar 1.5m
  355.         $object set bwvar 1.5mb
  356.         $object set bwvar 1500k
  357.         $object set bwvar 1500kb
  358.         $object set bwvar .1875MB
  359.         $object set bwvar 187.5kB
  360.         $object set bwvar 1.5e6
  361.         $object set timevar 1500m
  362.         $object set timevar 1.5
  363.         $object set timevar 1.5e9n
  364.         $object set timevar 1500e9p
  365.         $object set boolvar t           ; set to true;
  366.         $object set boolvar true
  367.         $object set boolvar 1   ; or any non-zero value;
  368.         $object set boolvar false       ; set to false;
  369.         $object set boolvar junk        
  370.         $object set boolvar 0
  371. end{program}
  372. begin{comment}
  373. item Equivalent b/w spec
  374. item s ignored
  375. item bool spec  wierd
  376. item set terrible is true, but set junk can be false...
  377. item real/int are canonical forms
  378. end{comment}
  379. foilhead{violet class TclObject: fcn[]{command} methods}
  380. begin{itemize}
  381. item shadow object is accessed by a proc[]{cmd} procedure,
  382.   called ``textbf{instproc-like}''
  383. item For example, proc[]{distance?} is an
  384.   ``instance procedure'' of an Adaptive SRM agent
  385.   begin{program}
  386.     int ASRMAgent::command(int argc, const char*const*argv)nb1 {
  387.         Tcl& tcl = Tcl::instance();
  388.         if (argc == 3) {
  389.             if (strcmp(argv[1], "distance?") == 0)nb2 {
  390.                 int sender = atoi(argv[2]);
  391.                 SRMinfo* sp = get_state(sender);
  392.                 tcl.tesultf("%f", sp->distance_);
  393.                 return TCL_OK;nb3
  394.             }
  395.         }
  396.         return (SRMAgent::command(argc, argv));nb4
  397.     }
  398.   end{program}
  399. end{itemize}
  400. begin{comment}
  401. item arguments
  402. item matching
  403. item return code
  404. item parent calling to make instproc-like
  405. end{comment}
  406. foilhead[-3ex]{violet class TclObject: fcn[]{command} methods:
  407.   call sequence}
  408. begin{itemize}
  409. item Usage:
  410.   begin{program}
  411.     $srm distance?        ; instproc-like usage;
  412. {rm{}or}
  413.     $srm cmd distance?    ; explicit usage;
  414.   end{program}
  415.   placefig{tclobject-cmd}
  416. end{itemize}
  417. begin{comment}
  418. item verb|placefig{tclobject-cmd}|
  419. item instproc-like calling sequence
  420. item overloading
  421. item direct executing
  422. item hierarchical resolution
  423. end{comment}
  424. foilhead{indigo class TclClass}
  425. Programmer defines C++ hierarchy that is mirrored in OTcl
  426.   placefig{tclclass}
  427. not all classes are mirrored exactly
  428. begin{comment}
  429.   item verb|placefig{tclclass}|
  430.   item ``/'' as separator character for interpreted hierarchy
  431.   item root of mirrored class hierarchies is TclObject
  432.   item extra C++ classes that are not mirrored in OTcl
  433.   item TclClass is adjunct to mirrored hierarchy
  434. end{comment}
  435. foilhead{violet Class TclClass: Definition}
  436. begin{itemize}
  437. item For example, Adaptive SRM agent class in C++
  438.   is mirrored into Agent/SRM/Adaptive 
  439. begin{program}
  440.     static class AdaptiveSRMAgentClass : public TclClassnb1 {
  441.     public:
  442.       AdaptiveSRMAgentClass() : TclClass("Agent/SRM/Adaptive")nb2 {}
  443.       TclObject* create(int /*argc*/, const char*const* /*argv*/)nb3 {
  444.         return (new AdaptiveSRMAgent())nb4;
  445.       }
  446.     } AdaptiveSRMAgentInstancenb5;
  447. end{program}
  448. end{itemize}
  449. begin{comment}
  450. item 1. class derived from Tclclass, defies only constructor and create method
  451. item 2. constructor invokes tclclass construcotr
  452.   with name of interpreterd class
  453. item 3. class name implicitly defines the hierarchy
  454. item 4. class associated with AdaptiveSRMAgent, 
  455.   returns objects in this associated class
  456. item 5. instance needed to set all this in motion.
  457. item 6.  Usually ignores argument, but check out the TraceClass definition
  458. end{comment}
  459. foilhead{red Class TclClass: Mechanism}
  460. begin{itemize}
  461. item static initialisation by compiler
  462.   placefig{tclclass-static}
  463. item run time activation at startup
  464.   placefig{tclclass-runt}
  465. end{itemize}
  466. begin{comment}
  467. item verb|placefig{tclclass-static}| and verb|placefig{tclclass-runt}|
  468. item object constructor is executed during C++ static instance initialisations
  469. item TclClass constructor builds list of TclClass instances
  470. item fcn[]{Tcl_AppInit} invokes fcn[]{TclClass::bind}
  471.   to create interpreted hierarchies
  472. item fcn[]{bind} invokes proc[]{TclObject::register} for each class in list
  473. item proc[]{register} establishes class hierarchy
  474. item fcn[]{bind} defines instance procedures
  475.   proc[]{create-shadow} and proc[]{delete-shadow}
  476.   for each class registered
  477. end{comment}
  478. foilhead{red class Instvar}
  479. begin{itemize}
  480. item One object per bound variable
  481. item created by fcn[]{TclObject::bind} call
  482. item Constructor activity
  483.   begin{subenum}
  484.   item point to C++ member variable
  485.   item create instance variable for interpreted object
  486.   item enable trap read/writes to instance variable using
  487.     fcn[]{Tcl_TraceVar}
  488.   end{subenum}
  489. end{itemize}
  490. begin{comment}
  491. item list of instvar in TclObject
  492. item method execution context assumption?
  493. item implicit when in create-shadow
  494. item other possibilities include dynamic binding
  495. end{comment}
  496. foilhead{blue OTcl Linkage Summary}
  497. begin{itemize}
  498. item Class Tcl
  499.   begin{sublist}
  500.   item primitives to access the interpreter
  501.   end{sublist}
  502. item Class TclObject: root object for mirrored hierarchies
  503.   begin{sublist}
  504.   item Unifies interpreted and compiled hierarchy
  505.   item Provide seamless access to ns objects in compiled code and
  506.     interpreted scripts
  507.   end{sublist}
  508. item Class TclClass: class that sets up the interpreted hierarchy
  509.   begin{sublist}
  510.   item establish interpreted hierarchy
  511.   item shadowing methods
  512.   end{sublist}
  513. end{itemize}
  514. begin{comment}
  515. item summarise key items to remember in interaction
  516. item goodfullness discussion on what goes in OTcl, and how/why
  517. end{comment}
  518. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  519. %keyword{Routing}
  520. foilhead{blue Unicast Routing}
  521. Compute the forwarding tables at each node in topology
  522. begin{itemize}
  523. item specify
  524.   begin{program}
  525.     $ns rtproto tup{protocol} tup{nodelist}
  526.   end{program}
  527.   begin{sublist}
  528.   item run protocol on nodes listed
  529.   item tup{protocol}: static, session, DVhfill default: static
  530.   item tup{nodelist}:hfill default: entire topology
  531.   end{sublist}
  532. item Tailor behaviour
  533.   begin{program}
  534.     $ns cost $n1 $n2 5
  535.   end{program}
  536.   begin{sublist}
  537.   item assign costs to linkshfill default: cost = 1
  538.   end{sublist}
  539. % item Asymetric Routing, MultiPath Routing
  540. end{itemize}
  541. keyword{Unicast Routing}
  542. begin{comment}
  543. item populates classifier_
  544. item supports multiple route protocols
  545. item centralised vs detailed distinction for DV etc.
  546. end{comment}
  547. foilhead{indigo Centralized Unicast Routing}
  548. Route computation is external to simulation execution
  549. begin{itemize}
  550. item Supported strategies
  551.   begin{sublist}
  552.   item Static Routing:  Routes precomputed prior to start of simulation
  553.   item Session Routing: Static + Routes recomputed on topology change
  554.   end{sublist}
  555. item Dijkstra's All-pairs SPF algorithm
  556. end{itemize}
  557. begin{comment}
  558. item Algorithm used: Dijkstra's all-pairs spf algorithm
  559. end{comment}
  560. foilhead{indigo Detailed Unicast Routing}
  561. Route computation is part of simulation execution
  562. begin{itemize}
  563. item Currently implemented protocols
  564.   Distributed Bellman-Ford (textbf{DV}) routing
  565.   begin{sublist}
  566.   item code{advertInterval} = $2s.$ update interval
  567.   item Split-horizon w/poison reverse advertisments
  568.   item triggered updates on topology change, or new route entries
  569.   end{sublist}
  570. item Possible options such as equal cost multi-path routing
  571. end{itemize}
  572. begin{comment}
  573. item aggressive routing strategy
  574. end{comment}
  575. foilhead{red Class Architecture}
  576. placefig{rtarch}
  577. begin{comment}
  578. item verb|placefig{rtarch}|
  579. item RouteLogic global class for routing, all classes need it thgouh
  580. item Only detail routing needs rtObject and associated strategies
  581. end{comment}
  582. foilhead{red class RouteLogic}
  583. begin{itemize}
  584. item Route Configuration
  585.   placefig{rtlconfig}
  586. item Query Node~$n_1$'s nexthop to Node~$n_2$
  587.   begin{program}
  588.     [$ns get-routelogic] lookup $n1 $n2
  589.   end{program}
  590. item Reconfiguration on Topology Changes
  591.   begin{program}
  592.     [$ns get-routelogic] notify
  593.   end{program}
  594. end{itemize}
  595. begin{comment}
  596. item instance variable array code{rtprotos_}
  597. item centralised routing hookin
  598. item verb|placefig{rtlconfig}|
  599. item lookup is overloaded instproc-lioke, returns node id of next hop.
  600. item invokes proc[]{compute-all} for all unicast routing protocols in simulation.
  601. end{comment}
  602. foilhead{red Dynamic Routing: class rtObject}
  603. Route Controller
  604. begin{tabularx}{linewidth}{rX}
  605.   proc[]{init-all} & Creates code{rtObject} at each node in argument \
  606.   proc[]{add-proto} & Adds tup{protocol} agent to tup{node} \
  607.   proc[]{lookup} & Returns nexthop for tup{dest} handle,
  608.                           -1 if none available \ 
  609.   proc[]{compute-routes} & compute and install best route to
  610.                           destinations; invoke proc[]{send-updates},
  611.                           proc[]{flag-multicast} \
  612.   proc[]{intf-changed} & notify protocol agents; recompute-routes\
  613.   proc[]{dump-routes} & to tup{filehandle} specified \
  614. end{tabularx}
  615. begin{comment}
  616. item other methods to get protocol handle, preference, metric and
  617.   nexthop of installed route.
  618. item special DIRECT route protocol
  619. item prefernece and metric comparison for compute-routes
  620. end{comment}
  621. foilhead{red Dynamic Routing: class Agent/rtProto/DV}
  622. Route Protocol Agent
  623. begin{tabularx}{linewidth}{rX}
  624.   proc[]{init-all} & create protocol agent at each node in argument \
  625.   proc[]{compute-routes} & invoked on startup and after topology change;
  626.                                   compute best route in protocol;
  627.                                   possibly set code{rtsChanged_} \
  628.   proc[]{intf-changed} & called after topology change on incident node \
  629.   proc[]{send-updates} & whenever routes at node change \
  630. end{tabularx}
  631. begin{comment}
  632. item init-all invokes init-all for rtObject, add-proto to each node,
  633.   and find and add peers
  634. item Agent will invoke proc[]{rtObject::compute-routes} when its
  635.   routes change
  636. item on topop change, first invoke intf-changed, then compute-routes.
  637. item extensions for LS
  638. item other internal details, sent-periodic updates, send-to-peer,
  639.   recv-updates
  640. item rtPeer support
  641. end{comment}
  642. foilhead[-3ex]{red Equal Cost Multi-Path Routes}
  643. code{textbf{Node set multiPath_ 1}}
  644. placefig{mpath}
  645. begin{comment}
  646. item one mpath classifier per dest possible
  647. item each one will alternate routes to use all of them
  648. item routes must be from the same protocol and metric
  649. end{comment}
  650. foilhead{red Asymetric Path Routing}
  651. psset{unit=1in}
  652. centerline{
  653.   begin{pspicture}(-1,-1)(1,1)
  654.     cnodeput( 0, 1){r1}{$r_1$}
  655.     cnodeput( 0,-1){r2}{$r_2$}
  656.     cnodeput( 1, 0){n2}{$n_2$}
  657.     cnodeput(-1, 0){n1}{$n_1$}
  658.     ncline{n1}{r1}ncline{r1}{n2}ncline{n2}{r2}ncline{r2}{n1}
  659.     rput[br](-0.75,  0.25){footnotesize2}
  660.     rput[tl]( 0.75, -0.25){footnotesize2}
  661.     rput[br]( 0.25, -0.75){footnotesize3}
  662.   end{pspicture}}
  663. begin{list}{}{}
  664. item 
  665. begin{program}
  666.     $ns cost $n1 $r1 2
  667.     $ns cost $n2 $r2 2
  668.     $ns cost $r2 $n2 3
  669. end{program}
  670. end{list}
  671. begin{comment}
  672. item adjusts costs to get appropriate multipath route effects
  673. item n1 and n2 are asynetric path
  674. end{comment}
  675. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  676. foilhead{blue Multicast Routing: Configuration}
  677. begin{program}small
  678.   Simulator textbf{NumberInterfaces_} 1  ; for some multicast routing protocols;
  679.   Simulator textbf{EnableMcast_} 1
  680.   set ns [new Simulator]
  681.   Node textbf{expandaddr}   ; if #nodes > 128;
  682.   # allocate nodes
  683.   $ns textbf{mrtproto} tup{protocol} tup{nodelist}
  684.   set group [Node textbf{allocaddr}]
  685.   $node textbf{join-group}  $agent $group
  686.   $node textbf{leave-group} $agent $group
  687. end{program}
  688. keyword{Multicast Routing}     % 15
  689. begin{comment}
  690. item separate class eliminated
  691. item class variable flags multicast
  692. item default topology size limited to 128 nodes, 
  693. item no default multicast, must specify protocol
  694. item defautl node list is entire topology
  695. item use allocaddr to allocate addresses portably
  696. end{comment}
  697. foilhead{red Multicast Node Definition}
  698. placefig{mcastNode}
  699. begin{comment}
  700. item Notice the extra replicators in the node
  701. end{comment}
  702. foilhead{violet Multicast Routing Protocols Implemented}
  703. Valid protocols currently implemented:
  704. begin{itemize}
  705. item Centralised protocols:
  706.   begin{tabularx}{linewidth}{crX}
  707.     1. & code{CtrMcast} & Centralised Multicast (Sparse Mode Protocol) \
  708.     2. &  code{DM}  &  Dense Mode \
  709.   end{tabularx}
  710. item Detailed protocols:
  711.   begin{tabularx}{linewidth}{crX}
  712.     1. & code{dynamicDM} &  Dynamic Dense Mode\
  713.     2. & code{pimDM} &  PIM Dense Mode\
  714.   end{tabularx}
  715. end{itemize}
  716. begin{comment}
  717. item PIM sm mode currently WIP
  718. item tradeoffs between implementations
  719. end{comment}
  720. foilhead{indigo Centralised Multicast Configuration}
  721. Sparse Mode implementation of multicast
  722. begin{program}small
  723.             $ctrmcastcomp textbf{compute-mroutes}
  724.             $ctrmcastcomp textbf{switch-treetype} $group
  725. end{program}
  726. Defaults to creating a shared tree.
  727. begin{comment}
  728. item compute-mroutes initialises routing tables at each nodes
  729. item requires unicast routing sanity
  730. item can be invoked anytime required; invoked automatically by netdyn
  731. item switch between shared trees and source specific trees
  732. item does not capture transience well
  733. end{comment}
  734. foilhead{indigo Centralised Dense Mode Configuration}
  735. begin{itemize}
  736. item computes parent-child relationships prior to start of simulation
  737. item Can study membership dynamics
  738. item No response to topology changes
  739. item Only one configuration parameter
  740. begin{program}small
  741.   DM set PruneTimeout tup{newValue} ; default (0.5s.);
  742. end{program}
  743. end{itemize}
  744. begin{comment}
  745. item DVMRP-like 
  746. item works well in conjunction with static unicast routing
  747. end{comment}
  748. foilhead{indigo Dynamic Dense Mode Configuration}
  749. begin{itemize}
  750. item Extension of static dense mode
  751. item As before, computes parent child relationships at start of simulation
  752. item Also recomputes whenever topology changes,
  753.   or unicast route updates are received
  754. item Configuration parameters are:
  755.   begin{program}small
  756.     dynamicDM set PruneTimout tup{newValue} ; default (0.5s.);
  757.     dynamicDM set ReportRouteTimeout tup{newvalue} ; default (1s.);
  758.   end{program}
  759. end{itemize}
  760. begin{comment}
  761. item one object per node
  762. end{comment}
  763. foilhead{indigo PIM Dense Mode Configuration}
  764. begin{itemize}
  765. item Extension of static dense mode
  766. item does not compute parent child relationships
  767. item Configuration parameters are:
  768.   begin{program}small
  769.     pimDM set PruneTimout tup{newValue} ; default (0.5s.);
  770.   end{program}
  771. end{itemize}
  772. begin{comment}
  773. item one object per node
  774. end{comment}
  775. foilhead{indigo Other protocol work in progress}
  776. begin{list}{}{}
  777. item Detailed PIM
  778.   begin{list}{}{}
  779.   item Sparse mode and Dense mode
  780.   end{list}
  781. end{list}
  782. begin{comment}
  783.   item will be a comprehensive implementaiton of PIM
  784. end{comment}
  785. foilhead{red Multicast Classes}
  786. placefig{mcastArch}
  787. begin{comment}
  788. item verb|placefig{mcastArch}|
  789. item mirros unicast route architecture
  790. item global centr mcast comp module
  791. item relies on centr rp compmodule
  792. item default computation for rp
  793. item General Multicast:
  794. McastProtocol      -- mcast protocol mechanism (DM, 
  795. dynamicDM)
  796. McastProtoArbiter  -- mcast arbiter
  797. Classifier/Replicator/Demuxer   -- mcast classifier (parse pkts, get 
  798. (s,g,iif), and forward to (s,g,iif) replicator)
  799. Classifier/Multicast/Replicator -- replicator for each (s,g, iif) (
  800. copy pkts and forward to all oifs)
  801. item Centralized Multicast:
  802. CtrMcast     -- install mcast routing entries per node
  803. CtrMcastComp -- compute mcast trees via unicast routing table
  804. CtrRPComp    -- compute RP Set for shared trees
  805. end{comment}
  806. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  807. foilhead{blue Network Dynamics}
  808. The ability to make elements of topology fail/recover.
  809. begin{itemize}
  810. item Model of failure and recovery
  811.   --- Exponential, Deterministic, Trace driven, Manual (or one-shot)
  812. item Operates on single link
  813.   --- textsl{i.e.} takes link ``down'' or ``up''
  814. item Operation on single node possible, translated into operation
  815.   on collection of links incident on node
  816. end{itemize}
  817. keyword{Network Dynamics}
  818. begin{comment}
  819. item currntly only possible to specify single link or node
  820. item no clustering yet
  821. end{comment}
  822. foilhead{indigo Specification}
  823. begin{itemize}
  824. item Create an instance of tup{model}
  825.   begin{program}
  826.     $ns textbf{rtmodel} tup{model} tup{parameters} tup{node|link}
  827.   end{program}
  828.   Command returns the handle of the model created
  829. item Perform tup{operation} at tup{time} on tup{node|link};
  830.   begin{program}
  831.     $ns textbf{rtmodel-at} tup{time} tup{operation} tup{node|link}
  832.   end{program}
  833.   return handle to newly created instance of model.
  834. item Delete route model specified by tup{handle}
  835.   begin{program}
  836.     $ns textbf{rtmodel-delete} tup{handle}
  837.   end{program}
  838. end{itemize}
  839. begin{comment}
  840. item interface through thte class simulator
  841. item operates only on node and link
  842. item multiple arguments are ignored
  843. end{comment}
  844. foilhead{red Models and Configuration}
  845. begin{enumerate}
  846. item Exponential
  847.   begin{sublist}
  848.   item tup{[startTime], upInterval, downInterval, [endTime]}
  849.   end{sublist}
  850. item Deterministic
  851.   begin{sublist}
  852.   item tup{[startTime], upInterval, downInterval, [endTime]}
  853.   end{sublist}
  854. item Trace (based)
  855.   begin{sublist}
  856.   item tup{fileName}
  857.   end{sublist}
  858. item Manual (or one-shot)
  859.   begin{sublist}
  860.   item tup{operation, time}
  861.   end{sublist}
  862. end{enumerate}
  863. begin{comment}
  864. item time vagaries
  865. item trace file format
  866. item Long form of the code{rtmodel-at}
  867. end{comment}
  868. foilhead{red Defining your Own Model}
  869. Derive model from the base class, code{rtModel}
  870. begin{tabularx}{linewidth}{crX}
  871. 1. & proc[]{set-parms} & process model parameters \
  872. 2. & proc[]{set-first-event} & specify the first event \
  873. 3. & proc[]{up}, proc[]{down} & specify next action \
  874. end{tabularx}
  875. --- Use class rtQueue to schedule events.
  876. --- Instance of queue in rtModel class variable, code{rtq_}
  877. begin{comment}
  878. item comments on each procedure; defaults
  879. item use rtQueue to installe vents
  880. end{comment}
  881. foilhead{red class rtQueue}
  882. Internal class to synchronise topology change activity
  883. begin{tabularx}{linewidth}{rX}
  884. proc[]{insq} & Given tup{time}, tup{object},
  885.         and an instance procedure for that object and arguments,
  886.         will invoke instance procedure of object at specified time. \
  887. proc[]{insq-i} & identical to proc[]{insq}, except tup{time}
  888.         specifies increment when the procedure will be executed\
  889. proc[]{runq} & executed procedures for the specified time;
  890.         finish by invoking proc[]{notify} for each object \
  891. proc[]{delq} & remove event for object at specified time
  892. end{tabularx}
  893. begin{comment}
  894. item need for synchronisation: route advertisement staggerring
  895. item possibly obviated by the timer interface in OTcl
  896. end{comment}
  897. foilhead{red Interface to Unicast Routing}
  898. placefig{uni-nd-intf}
  899. begin{comment}
  900. item Layer of focus in next slide
  901. end{comment}
  902. foilhead{red Interface to Unicast Routing}
  903. placefig{ndactions}
  904. begin{comment}
  905. item verb|placefig{ndactions}|
  906. item sequence of events upto routing interfaces
  907. end{comment}
  908. foilhead{indigo Deficiencies in the Network Dynamics API}
  909. begin{itemize}
  910. item Link centric
  911. item Node failure not consistent with an operation model
  912. item API cannot specify clusters/clouds
  913. end{itemize}
  914. begin{comment}
  915. item no way to specify other than node or link
  916. item node not reset on failure
  917. item node emulation is broken concept
  918. end{comment}
  919. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  920. foilhead{blue Multicast Transport}
  921. Currently, SRM and RTP implemented
  922. begin{itemize}
  923. item goals of implementation:  programmability
  924. item in particular, for SRM: programming timers,
  925. session message handling, loss recovery
  926. item and for RTP, mostly programmed in OTcl, with
  927.   minimalpacket related statistics counters in C++
  928. end{itemize}
  929. keyword{Multicast Transport}    % 20
  930. begin{comment}
  931. item most implementation is in OTcl, limited C++ handling,
  932. item confined to packet level activities
  933. item for RTP, per packet statistics is in C++
  934. item for SRM, packet forwarding, sending/receipt of packets, and
  935. processing session messages
  936. end{comment}
  937. foilhead[-3ex]{indigo Simple SRM configuration}
  938. begin{program}
  939.   set ns [new Simulator]          ; preamble initialization;
  940.   $ns enableMcast
  941.   set node [$ns node]                ; agent to reside on this node;
  942.   set group [$ns allocaddr]           ; multicast group for this agent;
  943.   {bfseries{}set srm [new Agent/SRM]}
  944.   $srm  set dst_ $group            ; configure the SRM agent;
  945.   {bfseries{}$ns attach-agent $node $srm}
  946.   $srm set fid_ 1                ; optional configuration;
  947.   {bfseries{}$srm log [open srmStats.tr w]}   ; log statistics in this file;
  948.   {bfseries{}$srm trace [open srmEvents.tr w]}  ; trace events for this agent;
  949.   set packetSize 210
  950.   # {cf{} configure the traffic generator and traffic source}
  951.   set s0 [new Agent/CBR/UDP]   ; attach traffic generator to application;
  952.   $s0 attach-traffic $exp0
  953.   {bfseries{}$srm(0) traffic-source $s0} ; attach application to SRM agent;
  954.   {bfseries{}$srm(0) set packetSize_ $packetSize} ; to generate repair packets of appropriate size;
  955.   {bfseries{}fcnref{$srm start}{../ns-2/srm.tcl}{Agent/SRM::start}}
  956.   {bfseries{}fcnref{$srm start-source}{../ns-2/srm.tcl}{Agent/SRM::start-source}}
  957. end{program}
  958. begin{comment}
  959. item Acquire and configure agent
  960. item Attach agent to node
  961. item open log and trace files as required
  962. item configure a traffic generator and traffic source
  963. item attqach application to agent
  964. item notice setting packet size
  965. item start agent and traffic source separately
  966. end{comment}
  967. foilhead{indigo Class Hierarchies}
  968. placefig{srmhierarchy}
  969. begin{comment}
  970. item Separate loss recovery objects
  971. item separate session message handling object
  972. item Loss detection is in C++,
  973. item loss recovery is in OTcl
  974. item number of bottlenecks in memory are expected
  975. item wait for scaling issues following
  976. end{comment}
  977. foilhead{indigo Loss Detection}
  978. begin{list}{}{}item
  979. Triggered by receipt of data or control messages
  980. item
  981. begin{program}
  982.   $agent textbf{request} tup{sender} tup{list of messages}
  983. end{program}
  984. item
  985. Actual loss recovery occurs in OTcl through special purpose
  986. loss recovery  objects
  987. end{list}
  988. begin{comment}
  989. item single reqeust helps speedup scheduling
  990. item also help schedule request periods for statis gathering simple
  991. end{comment}
  992. foilhead{indigo Loss Recovery}
  993. begin{itemize}
  994. item Each loss is handled by separate ``SRM'' object.
  995. item Nodes schedule ``request'' or ``repair'' objects following
  996.   a data loss
  997. item Each loss recovery object handles its own scheduling and messaging
  998.   activity
  999. end{itemize}
  1000. begin{comment}
  1001. item each agent also receives its messages
  1002. item relies on agent being able to receive its own messages
  1003. end{comment}
  1004. foilhead{indigo Session messages}
  1005. begin{itemize}
  1006. item One session message handling object per agent
  1007. item Responsible for sending periodic session messages
  1008. item Session message interval controlled by class variable, 
  1009.   code{sessionDelay_}
  1010. item Two types of session functions implemented:
  1011.   begin{subenum}
  1012.   item SRM/Session uses default fixed interval session message sending
  1013.   item SRM/Session/logScaled uses $log({rm groupSize_}) * {rm
  1014.       sessionDelay_}$  to send next advertisement. 
  1015.   end{subenum}
  1016. end{itemize}
  1017. begin{comment}
  1018. item advantages etc.
  1019. end{comment}
  1020. foilhead{indigo Statistics}
  1021. begin{enumerate}
  1022. item Agent---response to Data Loss:  Detection and Recovery
  1023. item Loss Object---Per Loss recovery Statistics 
  1024. end{enumerate}
  1025. begin{comment}
  1026. item data loss measures ave-recovery delay, ave dups
  1027. item used by adaptive algorithm to adjust the recovery parameters
  1028. item Loss recovery objects write out to log file when they terminate
  1029. end{comment}
  1030. foilhead{indigo Tracing}
  1031. begin{itemize}
  1032. item Per event tracing by loss recovery objects
  1033. item Sample trace file is:
  1034. begin{program}
  1035.  3.5543 n 1 m <1:1> r 0 Q DETECT
  1036.  3.5543 n 1 m <1:1> r 1 Q INTERVALS C1 2.0 C2 0.0 d 0.0105 i 1
  1037.  3.5543 n 1 m <1:1> r 1 Q NTIMER at 3.57527
  1038.  ...
  1039.  3.5753 n 1 m <1:1> r 2 Q NACK IGNORE-BACKOFF 3.59627
  1040.  3.5828 n 3 m <1:1> r 0 Q DETECT
  1041.  3.5828 n 3 m <1:1> r 1 Q NTIMER at 3.6468
  1042.  3.5854 n 0 m <1:1> r 0 P NACK from 257
  1043.  3.5854 n 0 m <1:1> r 1 P RTIMER at 3.59586
  1044.  3.5886 n 2 m <1:1> r 2 Q NTIMER at 3.67262
  1045.  3.5886 n 2 m <1:1> r 2 Q NACK IGNORE-BACKOFF 3.63062
  1046.  3.5959 n 0 m <1:1> r 1 P SENDREP
  1047.  ...
  1048. end{program}
  1049. end{itemize}
  1050. begin{comment}
  1051. item done by loss objects
  1052. end{comment}
  1053. foilhead{indigo RTP}
  1054. begin{itemize}
  1055. item Session/RTP tracks incoming data, and sends periodic delivery
  1056.   reports.
  1057. item Agent/CBR/RTP sends data to the group at a specified rate.
  1058. end{itemize}
  1059. begin{comment}
  1060. item need slides on RTP
  1061. item RTPSource adjunct class to set src id, but not clear it if
  1062.   generates
  1063. data.
  1064. item report-interval, session bw etc. can be controlled.
  1065. item CBR agent generates data, and when it recvs from outside
  1066. hands it to session to generate report
  1067. end{comment}
  1068. foilhead[-2ex]{blue Multicast Transport Starter Kit}
  1069. begin{itemize}
  1070. item Code and Documentation:  SRM and RTP
  1071. item Multiple flavours of multicast
  1072.   
  1073.   {small
  1074.   includes Dense mode, Sparse mode, centralised multicast, session level
  1075.   multicast
  1076.   }
  1077. item Multiple flavours of unicast and network dynamics
  1078.   {small
  1079.   Ability to study the problem under dynamic topologies, including
  1080.   partition scenarios
  1081.   }
  1082. item Multiple physical layers including broadcast and wireless LANs
  1083. item building a catalog of canonical topologies
  1084. item Examples in nsf{tcl/ex}
  1085. item test suite in development
  1086. end{itemize}
  1087. begin{comment}
  1088. item vertical slice through code.
  1089. end{comment}
  1090. foilhead{indigo Multicast Transport: Other types}
  1091. begin{itemize}
  1092. item Structured hierarchy mechanisms
  1093.   begin{sublist}footnotesize
  1094.   item Exists Multicast and Network Dynamics
  1095.   item Exists Some of the possible timer mechanisms
  1096.   item Exists Different loss models
  1097.   item Requires building different modules for request/repair
  1098.   item Requires defining the hierarchy and mechanisms
  1099.   item Expect mostly work in OTcl
  1100.   end{sublist}
  1101. item Route Support
  1102.   begin{sublist}footnotesize
  1103.   item Pointers to files for various models of implementation
  1104.   item Exists Multicast and Dynamics
  1105.   item Exists Loss Models
  1106.   item Requires modifying some network layer code
  1107.   item Expect Some minor work in C++, Lots of ``plumbing'' in OTcl
  1108.   end{sublist}
  1109. item Multicast Congestion Control
  1110. end{itemize}
  1111. begin{comment}
  1112. item hints
  1113. item throw open the floow
  1114. end{comment}
  1115. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1116. foilhead{indigo Current NS Scaling}
  1117. NS is currently emph{memory limited} for large simulations.
  1118. To scale, we're taking two approaches:
  1119. begin{itemize}
  1120. item tuning/monitoring detailed simulations (to reduce memory usage)
  1121. item abstract simulations (to remove ``unimportant'' details)
  1122. end{itemize}
  1123. keyword{Scaling Considerations}
  1124. begin{comment}
  1125. item Acknowledge John, Polly
  1126. item tradeoff of extensibility vs scaling
  1127. item memory bottleneck for the types of simulations we are interested in.
  1128. item Other types may be CPU bound, such as packet level tracing via OTcl.Not yet reached this limit
  1129. end{comment}
  1130. foilhead{indigo Detailed Simulations: Limits}
  1131. Some large topology configurations are in the distribution:
  1132. {renewcommand{arraystretch}{1.1}
  1133. begin{tabularx}{linewidth}{cX}
  1134. multicolumn{2}{l}{nsf{tcl/ex/newmcast/cmcast-150.tcl}} \
  1135. 150 nodes, 2200 links & Centralised multicast simulation; Uses
  1136.         $approx$ 53MB \[2ex]
  1137. 2420 nodes, 2465 links & static unicast routing; path computation
  1138.         algorithms; Uses $approx$ 800MB \[2ex]
  1139. 500 nodes, 815 links & sparse multicast group of 80 members; studying
  1140.         scalable session messsages \[2ex]
  1141. end{tabularx}
  1142. }
  1143. begin{comment}
  1144. item the large scale topologies are output from the GT-ITM 
  1145.   topology generation code
  1146. end{comment}
  1147. foilhead{indigo Detailed Simulations: Object Sizes}
  1148. Rough estimates of memory per object
  1149. begin{center}
  1150. begin{tabular}{lr}
  1151. Simulator      & 268makebox[0in][l]{KB} \
  1152. Node            & 2 \
  1153. Multicast Capable Node       & 6 \
  1154. duplex-link     & 9 \
  1155. duplex-link w. interfaces & 14 \
  1156. end{tabular}
  1157. end{center}
  1158. begin{comment}
  1159. item Simulator is O(1) per simulation, not TclObject, only in OTcl
  1160. item Big because of the number of instance procedures etc.
  1161. item Estimates can be used to gather ballpark estimate
  1162.         of memory reqd. per simulation. 
  1163. end{comment}
  1164. foilhead{indigo Hints to reduce memory usage}
  1165. begin{itemize}
  1166. item avoid trace-all
  1167. item use arrays [$a(1), $a(2)ldots] instead of vars [$a1, $a2]
  1168. item other hints at
  1169.   url{http://www-mash.cs.berkeley.edu/ns/ns-debugging.html}
  1170. end{itemize}
  1171. begin{comment}
  1172. item trace-all enables tracing on all links.
  1173. item each link`requires 3 objects for tracing, maybe more
  1174. end{comment}
  1175. foilhead{indigo Further Memory Debugging}
  1176. begin{itemize}
  1177. item purify
  1178.   begin{sublist}
  1179.   item Use purify~3.2 if possible
  1180.   item purify~4.0.2 may cause ns to crash.
  1181.     Try using flags: -staticchecking=false -force-rebuild
  1182.   item Typical call syntax for purify is:
  1183.     begin{program}
  1184.       purify -staticchecking=false -force-reuild -collector=tup{ld} g++ -o ns ldots
  1185.     end{program}
  1186.   end{sublist}
  1187. item Gray Watson tup{gray@letters.com}'s dmalloc library
  1188.   At iurl{http://www.letters.com/dmalloc}
  1189.   begin{sublist}
  1190.   item Link into ns, and analyse memory usage
  1191.   end{sublist}
  1192. end{itemize}
  1193. begin{comment}
  1194. item purify, paid software, lots of nice features,
  1195. item lots of traps for various events
  1196. item dmalloc free software...worth the money you paid for it
  1197. item good statistical summary, but requires post processing
  1198. end{comment}
  1199. foilhead{indigo Sample Dmalloc Summary}
  1200. Sample summary:
  1201. {footnotesize
  1202. begin{verbatim}
  1203.       size      count      gross function
  1204.                172114    6358277 total
  1205.         84      16510    1386840 ra=0x8064846
  1206.   subtotal      42634    1000426 TclObject::bind(char const *, int *) 
  1207.         18         12        216 "
  1208.         19        522       9918 "
  1209.     ...
  1210.         32      30263     968416 StringCreate 
  1211.   subtotal      30158     742472 NewVar 
  1212.         24      30077     721848 "
  1213.         27          1         27 "
  1214.     ...
  1215. end{verbatim}
  1216. }
  1217. begin{comment}
  1218. item top line is total memory used
  1219. item next line ra=0x is function in shared library
  1220. item next line us TclObject::bind-allocated-memory
  1221. item next line are subtotals for different sizes
  1222. item StringCreate only has one size of allocation => no subtotals
  1223. end{comment}
  1224. foilhead{violet Additional Debugging Hints}
  1225. Instructions are at:
  1226. url{http://www-mash.cs.berkeley.edu/ns/ns-debugging.html}
  1227. None of this impacts order of magnitude improvements
  1228. Beyond this, Session Level Simulationsldots
  1229. begin{comment}
  1230. item emphaise order or magnitude scaling is problematic
  1231. end{comment}
  1232. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1233. foilhead{blue Abstract or Session-level Simulations}
  1234. begin{itemize}
  1235. item Why Session-level Packet Distribution? hfil --- Scaling
  1236. begin{program}small
  1237.         before - 150  nodes, 2180 links, ~53 MB
  1238.         after  - 2000 nodes, 8108 links, ~40 MB
  1239. end{program}
  1240. item When to use Session-level Packet Distribution?
  1241.   begin{sublist}
  1242.   item multicast simulations
  1243.   item low source rate (lower than the bottlenect link)
  1244.   item little cross-traffic
  1245.   item eg, SRM sessions
  1246.   end{sublist}
  1247. item emph{textbf{Caveat:  Work in Progress}}
  1248. end{itemize}
  1249. keyword{Session}
  1250. begin{comment}
  1251. item WORK IN PROGRESS
  1252. item cost of just creating the topology
  1253. item ensure no queueing,
  1254. end{comment}
  1255. foilhead{indigo Tradeoff: Accuracy}
  1256. begin{itemize}
  1257. item   ignores queuing delay within the routers
  1258. end{itemize}
  1259. begin{comment}
  1260. item Abstracts out the topology, hence avoids processing delays as well
  1261. end{comment}
  1262. foilhead{indigo Abstractions}
  1263. begin{itemize}
  1264. item Nodes are compacted, only store node id and port id
  1265.   ie, no classifiers, replicators, route tables, etc
  1266. item Links only store bw/delay attributes
  1267.   ie, no queues, delay elements, tracing, classifiers, etc
  1268. item Links get translated into a virtual end-to-end meshldots sorta
  1269. end{itemize}
  1270. begin{comment}
  1271. item node only stores unicast address, no additoinal instance variables
  1272. item link delays and b/w are othe only attributes
  1273. item configuration is identical to normal detail simulation
  1274. end{comment}
  1275. foilhead{indigo Configuration}
  1276. begin{program}small
  1277.   set ns [new textbf{SessionSim}]  ; note difference in simulator;
  1278.   # {cf{}configuration of topology and multicast as usual}
  1279.   
  1280.   # {cf{}configuration source agent as usual}
  1281.   set srcAgent [new Agent/CBR]
  1282.   $srcAgent set dst_ tup{dst}
  1283.   $ns attach-agent $node $srcAgent
  1284.   set sessionHelper [$ns textbf{create-session} $node $srcAgent]
  1285. end{program}
  1286. begin{comment}
  1287. item note very similar configuration mechanisms
  1288. item create-session because no explicit forwarding in node
  1289. end{comment}
  1290. foilhead{red Internal Realisation of a Session}
  1291. placefig{sessionArch}
  1292. begin{comment}
  1293. item notice direct e2e transfer
  1294. item virtual link processing makes this possible
  1295. item creating loss through lossModules
  1296. end{comment}
  1297. foilhead{indigo Realising Loss}
  1298. begin{program}small
  1299.   $node join-group $receiver $group
  1300.   
  1301.   $sessionHelper textbf{insert-loss} $lossModule $receiver
  1302.   $sessionHelper textbf{insert-depended-loss} $receiver $srcAgent $group
  1303. end{program}
  1304. placefig{deploss}
  1305. begin{itemize}
  1306. item Location of loss impacts translation into virtual mesh
  1307. end{itemize}
  1308. begin{comment}
  1309. item Loss modules are created from the loss models separately
  1310. item Loss modules would be attached to the link.
  1311. item translating them to virtual topology is done, but implementation
  1312.   is not in yet.
  1313. end{comment}
  1314. foilhead{red Realisation and Comparisons}
  1315. Comparison of Multicast trees
  1316. begin{minipage}{0.5linewidth}
  1317. placefig{regularTree}
  1318. end{minipage}
  1319. begin{minipage}{0.5linewidth}
  1320. placefig{sessionTree}
  1321. end{minipage}
  1322. begin{comment}
  1323. item 4 node topology, 1 source 3 receivers
  1324. end{comment}
  1325. foilhead{indigo Abstract Simulation Summary}
  1326. begin{itemize}
  1327. item Almost identical configuration
  1328. item Lots of Work still in progress
  1329.   begin{sublist}
  1330.   item Loss Dependency
  1331.   item Queueing approximation models
  1332.   item Calibrating Error
  1333.   item Mixed simulations
  1334.   end{sublist}
  1335. item Completed but not yet checked in:
  1336.   begin{sublist}
  1337.   item Early versions of Loss Dependency completed
  1338.   end{sublist}
  1339. end{itemize}
  1340. begin{comment}
  1341. item two new commands, subclass of Simulator
  1342. item API fpr loss dependency
  1343. end{comment}
  1344. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1345. foilhead{blue  Debugging in ns: Overview}
  1346. begin{itemize}
  1347. item Correctness
  1348. --- tcldebugger
  1349. --- gdb
  1350. item Coexistence of gdb and tcldebugger
  1351. item Support in the Simulator
  1352. end{itemize}
  1353. keyword{Debugging}             % 6
  1354. begin{comment}
  1355. item debugging tips
  1356. item Discusses space debugging earlier
  1357. item Not run nto time scaling yet
  1358. item correctness analysis
  1359. item hard in dual environment, or is it?
  1360. end{comment}
  1361. foilhead{violet Tcl debugger}
  1362. begin{itemize}
  1363. item Don Libes tup{libes@nist.gov}'s Tcl debugger, written in Tcl
  1364. item At iurl{http://expect.nist.gov/tcl-debug/}
  1365. item single stepping through lines of code 
  1366. item supports break points based on procedures, or with arbitrary
  1367.   regular expressions
  1368. end{itemize}
  1369. begin{comment}
  1370. item debugger written in Tcl and is a Tcl parser
  1371. item can be used to add/modify code or data
  1372. item breakpoints by routine or even by reg. exp matching on 
  1373.       code execution
  1374. end{comment}
  1375. foilhead{violet Tcl debugger}
  1376. begin{itemize}
  1377. item Can also trap to debugger from the script, place code{debug 1} 
  1378.   at the appropriate location
  1379. item works with in user's simulation scripts
  1380. item works even through (or in) embeddedTcl code
  1381. item examine and set data or code using Tcl-ish commands
  1382. end{itemize}
  1383. begin{comment}
  1384. item useful to track Tcl level problems. 
  1385. item hard to correlate to C++ code though...
  1386. end{comment}
  1387. foilhead[-3.2ex]{indigo Co-existence Semi-seamless Debugging}
  1388.         begin{program}
  1389.       (gdb) run
  1390.       Starting program: /nfs/prot/kannan/PhD/simulators/ns/ns-2/ns 
  1391.       ldots
  1392.       ^C
  1393.       Program received signal SIGINT, Interrupt.
  1394.       0x102218 in write ()
  1395.       (gdb) {bfseries{}call Tcl::instance().eval("debug 1")}
  1396.       15: lappend auto_path $dbg_library
  1397.       dbg15.3> w
  1398.       *0: application
  1399.        15: lappend auto_path /usr/local/lib/dbg
  1400.       dbg15.4> Simulator info instances
  1401.       _o1
  1402.       dbg15.5> _o1 now
  1403.       0
  1404.       dbg15.6> # and other fun stuff
  1405.       dbg15.7> {bfseries{}c}
  1406.       (gdb) where
  1407.       #0  0x102218 in write ()
  1408.       #1  0xda684 in FileOutputProc ()
  1409.       ldots
  1410.       (gdb) {bfseries{}c}
  1411.         end{program}
  1412. begin{comment}
  1413. item power at your finger tips
  1414. item can be used for other things as well, such as 
  1415.     Scheduler::instance().clock()
  1416. end{comment}
  1417. foilhead[-2ex]{violet textdollar{}ns gen-map output}
  1418. begin{program}
  1419. % {bfseries{}$ns gen-map}
  1420. Node _o6(id 0)
  1421.                 classifier__o7(Classifier/Addr)
  1422.                 dmux_(NULL_OBJECT)
  1423.         Link _o11, fromNode_ _o6(id 0) -> toNode_ _o8(id 1)
  1424.         Components (in order) head first
  1425.                 _o10    Queue/DropTail
  1426.                 _o12    DelayLink
  1427.                 _o14    TTLChecker
  1428. ---
  1429. Node _o8(id 1)
  1430.                 classifier__o9(Classifier/Addr)
  1431.                 dmux_(NULL_OBJECT)
  1432.         Link _o16, fromNode_ _o8(id 1) -> toNode_ _o6(id 0)
  1433.         Components (in order) head first
  1434.                 _o15    Queue/DropTail
  1435.                 _o17    DelayLink
  1436.                 _o19    TTLChecker
  1437. ---
  1438. %
  1439. end{program}
  1440. begin{comment}
  1441. item simple topology of two nodes and one link to illustrate
  1442. end{comment}
  1443. end{document}