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

通讯编程

开发平台:

Visual C++

  1. section{Queue/JoBS}
  2. label{sec:jobsx}
  3. emph{JoBS is developed and contributed by Nicolas Christin <nicolas@cs.virginia.edu>}
  4. This chapter describes the implementation of the Joint Buffer Management 
  5. and Scheduling (JoBS) algorithm in {em ns}. This chapter is in three parts. 
  6. The first part summarizes the objectives of the JoBS algorithm. The second 
  7. part explains how to configure a JoBS queue in {em ns}. The third part 
  8. focuses on the tracing mechanisms implemented for JoBS. 
  9. The procedures and functions described in this chapter can be found in 
  10. ns/jobs.{cc, h}, 
  11. ns/marker.{cc, h}, 
  12. ns/demarker.{cc, h}. 
  13. Example scripts can be found 
  14. in ns/tcl/ex/jobs-{lossdel, cn2002}.tcl. 
  15. noindent Additional information 
  16. can be found at http://qosbox.cs.virginia.edu.
  17. subsection{The JoBS algorithm}
  18. This section gives an overview of the objectives the JoBS algorithm
  19. aims at achieving, and of the mechanisms employed to reach these
  20. objectives. The original JoBS algorithm, as described in
  21. cite{LiCh01}, was using the solution to a non-linear optimization
  22. problem. This {em ns-2} implementation uses the feedback-control
  23. based heuristic described in cite{ChLiAb02a}.
  24. noindent{em Important Note:} 
  25. This {em ns-2} implementation results from the 
  26. merge between old code for {em ns-2.1b5}, and code derived from the 
  27. BSD kernel-level 
  28. implementation of the JoBS algorithm. {bf It is still considered experimental.}
  29. Due to the absence of binding facilities for arrays 
  30. between Tcl and C++ in {em tclcl} at the moment, {em the number of 
  31. traffic classes is 
  32. statically set to 4 and cannot be changed without modifying the C++ code.}
  33. subsubsection{Objective}
  34. The objective of the JoBS algorithm is to provide absolute and
  35. relative (proportional) loss and delay differentiation independently
  36. at each node for {em classes} of traffic. JoBS therefore provides
  37. service guarantees on a {em per-hop} basis.  The set of performance
  38. requirements are specified to the algorithm as a set of per-class
  39. Qualtiy of Service (QoS) constraints.  As an example, for three
  40. classes, the QoS constraints could be of the form:
  41. begin{itemize}
  42. item{$mbox{Class-1 Delay} approx 2 cdot  mbox{Class-2 Delay}$}, 
  43. item{$mbox{Class-2 Loss Rate}  approx 10^{-1} cdotmbox{Class-3 Loss Rate}$, or} 
  44. item{$mbox{Class-3 Delay} leq 5~ms$.} 
  45. end{itemize}
  46. Here, the first two constraints are relative constraints and the last 
  47. one is an absolute constraint. The set of constraints can be 
  48. any mix of relative and absolute constraints. 
  49. More specifically, JoBS supports the five following types of constraints:
  50. begin{itemize}
  51. item{{bf Relative delay constraints (RDC)} specify a proportional 
  52. delay differentiation between classes. As an example, for two classes $1$ and $2$, the RDC enforces a relationship
  53. [
  54. frac{mbox{Delay of Class 2}}{mbox{Delay of Class 1}}approx mbox{constant} .nonumber
  55. ]
  56. }
  57. item{{bf Absolute delay constraints (ADC)}: An ADC on class~$i$ requires that the delays of class~$i$ satisfy a worst-case bound $d_i$.}
  58. item{{bf Relative loss constraints (RLC)} specify a proportional 
  59. loss differentiation between classes.}
  60. item{{bf Absolute loss constraints (ALC)}: An ALC on class~$i$ requires that the loss rate of class~$i$ be bounded by an upper bound $L_i$.}
  61. item{{bf Absolute rate constraints (ARC)}: An ARC on class~$i$ means that the throughput of class~$i$ is bounded by a lower bound $mu_i$.}
  62. end{itemize}
  63. JoBS does not rely on admission control or traffic policing, nor does it 
  64. make any assumption on traffic arrivals. 
  65. Therefore, a system of constraints may become infeasible, and 
  66. some constraints may need to be relaxed. 
  67. QoS constraints are prioritized in the following order.
  68. mbox{ALC} > mbox{ADC, ARC} > mbox{Relative Constraints}  .
  69. ]
  70. That is, if JoBS is unable to satisfy both absolute and relative constraints, 
  71. it will give preference to the absolute constraints.
  72. subsubsection{Mechanisms}
  73. JoBS performs scheduling and buffer management in a 
  74. single pass. JoBS dynamically allocates service rates to 
  75. classes in order to satisfy the delay constraints. The service rates needed 
  76. for enforcing absolute delay constraints 
  77. are allocated upon each packet arrival, 
  78. while service rates derived from 
  79. relative delay constraints are computed only 
  80. every $N$ packet arrivals. If no feasible 
  81. service rate allocation existsfootnote{For instance, 
  82. if the sum of the service 
  83. rates needed is greater than the output link capacity.}, 
  84. or if the packet buffer overflows, 
  85. packets are dropped according to the loss constraints. 
  86. The service rates are translated into packet scheduling decisions by 
  87. an algorithm resembling Deficit Round Robin. That is, the scheduler 
  88. tries to achieve the desired service rates by keeping track of the 
  89. difference between the actual transmission rate for each class and the 
  90. desired service rate for each class. Scheduling in JoBS is work-conserving.
  91. subsection{Configuration}
  92. Running a JoBS simulation requires to create and configure the JoBS 
  93. ``link(s)'', to create and configure the Markers and Demarkers in charge 
  94. of marking/demarking the traffic, to attach an application-level data 
  95. source (traffic generator), and to start the traffic generator.
  96. subsubsection{Initial Setup}
  97. begin{program}
  98. set ns [new Simulator] ; preamble initialization;
  99. {bfseries{}Queue/JoBS set drop_front_ false} ; use drop-tail;
  100. {bfseries{}Queue/JoBS set trace_hop_ true} ; enable statistic traces;
  101. {bfseries{}Queue/JoBS set adc_resolution_type_ 0} ; see ``commands at a glance'';
  102. {bfseries{}Queue/JoBS set shared_buffer_ 1} ; all classes share a common buffer;
  103. {bfseries{}Queue/JoBS set mean_pkt_size_ 4000}; we expect to receive 500-Byte pkts;
  104. {bfseries{}Queue/Demarker set demarker_arrvs1_ 0}; reset arrivals everywhere;
  105. {bfseries{}Queue/Demarker set demarker_arrvs2_ 0}
  106. {bfseries{}Queue/Demarker set demarker_arrvs3_ 0}
  107. {bfseries{}Queue/Demarker set demarker_arrvs4_ 0}
  108. {bfseries{}Queue/Marker set marker_arrvs1_ 0}
  109. {bfseries{}Queue/Marker set marker_arrvs2_ 0}
  110. {bfseries{}Queue/Marker set marker_arrvs3_ 0}
  111. {bfseries{}Queue/Marker set marker_arrvs4_ 0}
  112. set router(1) [$ns node] ; set first router;
  113. set router(2) [$ns node] ; set second router;
  114. set source [$ns node] ; set source;
  115. set sink [$ns node] ; set traffic sink;
  116. set bw 10000000 ; 10 Mbps;
  117. set delay 0.001 ; 1 ms;
  118. set buff 500 ; 500 packets;
  119. end{program}
  120. subsubsection{Creating the JoBS links}
  121. begin{program}
  122. {bfseries{}$ns duplex-link $router(1) $router(2) $bw $delay JoBS} ; Creates the JoBS link;
  123. $ns_ queue-limit $router(1) $router(2) $buff
  124. set l [$ns_ get-link $router(1) $router(2)]
  125. set q [$l queue]
  126. {bfseries{}$q init-rdcs -1 2 2 2} ; Classes 2, 3 and 4 are bound by proportional delay differentiation with a factor of 2;
  127. {bfseries{}$q init-rlcs -1 2 2 2} ; Classes 2, 3 and 4 are bound by proportional loss differentiation with a factor of 2;
  128. {bfseries{}$q init-alcs 0.01 -1 -1 -1} ; Class 1 is provided with a loss rate bound of 1%;
  129. {bfseries{}$q init-adcs 0.005 -1 -1 -1} ; Class 1 is provided with a delay bound of 5 ms;
  130. {bfseries{}$q init-arcs -1 -1 -1 500000} ; Class 4 is provided with a minimumthroughput of 500 Kbps;
  131. {bfseries{}$q link [$l link]} ; The link is attached to the queue (required);
  132. {bfseries{}$q trace-file jobstrace} ; Trace per-hop, per-class metrics to the file jobstrace;
  133. {bfseries{}$q sampling-period 1} ; Reevaluate rate allocation upon each arrival;
  134. {bfseries{}$q id 1}; Assigns an ID of 1 to the JoBS queue;
  135. {bfseries{}$q initialize}; Proceed with the initialization;
  136. end{program}
  137. subsubsection{Marking the traffic}
  138. Marking the traffic is handled by Marker objects. Markers are FIFO queues that 
  139. set the class index of each packet. To ensure accuracy of the simulations, 
  140. it is best to configure these queues to have a very large buffer, so that no 
  141. packets are dropped in the Marker. Demarkers are used to gather end-to-end 
  142. delay statistics.
  143. begin{program}
  144. {bfseries{}$ns_ simplex-link $source $router(1) $bw $delay Marker} ; set-up marker;
  145. $ns_ queue-limit $source $router(1) [expr $buff*10] ; Select huge buffers for markers;
  146. $ns_ queue-limit $router(1) $source [expr $buff*10] ; to avoid traffic drops; 
  147. set q [$ns_ get-queue $source $router(1)] ;in the marker;
  148. {bfseries{}$q marker_type 2} ; Statistical marker;
  149. {bfseries{}$q marker_frc 0.1 0.2 0.3 0.4} ; 10% Class 1, 20% Class 2, 30% Class 3, 40% Class 4.;
  150. {bfseries{}$ns_ simplex-link $router(2) $sink $bw $delay Demarker} ; set-up demarker;
  151. $ns_ queue-limit $router(2) $sink [expr $buff*10] 
  152. {bfseries{}$q trace-file e2e} ; trace end-to-end delays to file e2e;
  153. end{program}
  154. The remaining steps (attaching agents and traffic generators or applications 
  155. to the nodes) are explained in 
  156. Chapters~ref{sec:agents} and ref{chap:applications}, and are handled as 
  157. usual. We refer to these chapters and the example scripts provided with your 
  158. {em ns} distribution. 
  159. subsection{Tracing}
  160. Tracing in JoBS is handled internally, by the scheduler. 
  161. Each JoBS queue can generate a 
  162. trace file containing the following information.  
  163. Each line of the tracefile consists of 17 columns. The first column is the 
  164. simulation time, columns 2 to 5 represent the loss rates over the current busy 
  165. period for classes 1 to 4, columns 6 to 9 represent the delays for each class 
  166. (average over a 0.5 seconds sliding window), columns 10 to 13 represent the 
  167. average service rates allocated to each class over the last 0.5 seconds, and 
  168. columns 14 to 17 represent the instantaneous queue length in packets. 
  169. Additionally, Demarkers can be used to trace end-to-end delays.
  170. subsection{Variables}
  171. This section summarizes the variables that are used by JoBS, Marker and Demarker objects.
  172. subsubsection{JoBS objects}
  173. begin{description}
  174. item[trace_hop_] Can be true or false. If set to true, per-hop, per-class metrics will be traced. (Trace files have then to be specified, using code{<JoBS object> trace-file <filename>}.) Defaults to false.
  175. item[drop_front_] Can be true or false. If set to true, traffic will be dropped from the front of the queue. Defaults to false (drop-tail).
  176. item[adc_resolution_type_] Can be 0 or 1. 
  177. If set to 0, traffic will be dropped from classes that have an ADC if the ADC 
  178. cannot be met by adjusting the service rates. If set to 1, traffic will be 
  179. dropped from all classes. A resolution mode set to 
  180. 1 is therefore fairer, in the sense that the pain is shared by all classes, 
  181. but can lead to more deadline violations. Defaults to 0.
  182. item[shared_buffer_] Can be 0 or 1. If set to 0, all classes use a separate 
  183. per-class 
  184. buffer (which is required if only rate guarantees are to provided). All 
  185. per-class buffers have the same size. 
  186. If set to 
  187. 1, all classes share the same buffer (which is required if loss differentiation
  188. is to be provided). Defaults to 1.
  189. item[mean_pkt_size_] 
  190. Used to set the expected mean packet size of packets arriving at a JoBS link. 
  191. Setting this variable is required to ensure proper delay differentiation.
  192. end{description}
  193. subsubsection{Marker objects}
  194. begin{description}
  195. item[marker_arrvs1_] 
  196. Number of Class-1 packets to have entered a Marker link.
  197. item[marker_arrvs2_] 
  198. Number of Class-2 packets to have entered a Marker link.
  199. item[marker_arrvs3_] 
  200. Number of Class-3 packets to have entered a Marker link.
  201. item[marker_arrvs4_] 
  202. Number of Class-4 packets to have entered a Marker link.
  203. end{description}
  204. subsubsection{Demarker objects}
  205. begin{description}
  206. item[demarker_arrvs1_] 
  207. Number of Class-1 packets to have entered a Demarker link.
  208. item[demarker_arrvs2_] 
  209. Number of Class-2 packets to have entered a Demarker link.
  210. item[demarker_arrvs3_] 
  211. Number of Class-3 packets to have entered a Demarker link.
  212. item[demarker_arrvs4_] 
  213. Number of Class-4 packets to have entered a Demarker link.
  214. end{description}
  215. subsection{Commands at a glance}
  216. The following is a list of commands used to configure the JoBS, Marker and 
  217. Demarker objects.
  218. subsubsection{JoBS objects}
  219. begin{flushleft}
  220. code{set q [new Queue/JoBS]}\
  221. This creates an instance of the JoBS queue. 
  222. code{$q init-rdcs <k1> <k2> <k3> <k4>}\
  223. This assigns the RDCs for the four JoBS classes. For instance, using a value 
  224. of 4 for k2 means that Class-3 delays will be roughly equal to four times 
  225. Class-2 delays. A value of -1 indicates that 
  226. the class is not concerned by RDCs. 
  227. noindent{em Important Note:} Since RDCs bound two classes, one would 
  228. expect only three parameters to be passed (k1, k2, and k3, since k4 
  229. theoretically binds Classes 4 and 5, and Class~5 does not exist). 
  230. However, in this prototype implementation, it is imperative to specify a value 
  231. different from 0 and -1 to k4 if Class~4 is to be concerned by RDCs. 
  232. noindent{em Examples:} code{$q init-rdcs -1 2 1 -1} specifies that classes~2 and 3 
  233. are bound by a delay differentiation factor of 2, code{$q init-rdcs 4 4 4 4} 
  234. specifies that all classes are bound by a delay differentiation factor of 4 and
  235. is equivalent to code{$q init-rdcs 4 4 4 1}, since the last coefficient is 
  236. only used to specify that Class~4 is to be bound by proportional 
  237. differentiation.
  238. code{$q init-rlcs <k'1> <k'2> <k'3> <k'4>}\
  239. This assigns the RLCs for the four JoBS classes. 
  240. For instance, using a value 
  241. of 3 for k1 means that Class-2 loss rates will be roughly equal to four times 
  242. Class-2 loss rates.
  243. A value of -1 indicates that 
  244. the class is not concerned by RLCs. As with RDCs, each RLC binds two classes, 
  245. thus, one would 
  246. expect only three parameters to be passed (k'1, k'2, and k'3, since k'4 
  247. theoretically bounds Classes 4 and 5, and Class~5 does not exist). 
  248. As explained above, it is imperative to specify a value 
  249. different from 0 and -1 to k'4 if Class~4 is to be concerned by RLCs.
  250. code{$q init-alcs <L1> <L2> <L3> <L4>}\
  251. This assigns the absolute loss guarantees (ALCs) to all four classes. L1 to L4 
  252. are given in fraction of 1. For instance, setting L1 to 0.05 means that Class-1
  253. loss rate will be guarantees to be less than 5%. A value of -1 indicates that 
  254. the corresponding class is not subject to an ALC.
  255. code{$q init-adcs <D1> <D2> <D3> <D4>}\
  256. This assigns the absolute loss guarantees (ADCs) to all four classes. D1 to D4 
  257. are given in milliseconds. A value of -1 indicates that 
  258. the corresponding class is not subject to an ADC.
  259. code{$q trace-file <filename>}\
  260. This specifies the trace file for all per-hop metrics. JoBS uses an internal 
  261. module to trace
  262. loss and delays, service rates, and per-class queue lengths in packets. 
  263. If filename is set to {bf null}, no trace will be provided.
  264. code{$q link [<link-object> link]}\
  265. This command is required to bind a link to a JoBS queue. Note that JoBS needs
  266. to know the capacity of the link. Thus, 
  267. this command {bf has to} be issued before 
  268. the simulation is started.
  269. code{$q sampling-period <sampling-interval>}\
  270. This command specifies the sampling interval (in packets) at which the service 
  271. rate adjustments for proportional differentiation will be performed. The 
  272. default is a sampling interval of 1 packet, meaning that the rate allocation 
  273. is reevaluated upon each packet arrival. Larger sampling intervals speed up 
  274. the simulations, but typically result in poorer proportional differentiation.
  275. code{$q id <num_id>}\
  276. This command affects a numerical ID to the JoBS queue. 
  277. code{$q initialize}\
  278. This command is required, and should be run after all configuration operations 
  279. have been performed. 
  280. This command will perform the final checks and configuration of the JoBS queue.
  281. code{$q copyright-info}\ 
  282. Displays authors and copyright information.
  283. A simple example script (with nam output), fully annotated and commented 
  284. can be found in ns/tcl/ex/jobs-lossdel.tcl. 
  285. A more realistic example of a simulation with JoBS queues can be found in 
  286. ns/tcl/ex/jobs-cn2002.tcl. This script is very similar to what was used in 
  287. a simulation presented in cite{LiCh02}. 
  288. Associated tracefiles and {em gnuplot} scripts for visualization (in case you 
  289. favor {em gnuplot} over {em xgraph}
  290. can be found in ns/tcl/ex/jobs-lossdel, and ns/tcl/ex/jobs-cn2002.
  291. end{flushleft}
  292. subsubsection{Marker objects}
  293. code{$q marker_type <1|2>}\
  294. Selects the type of marker. 1 is DETERMINISTIC, 2 is STATISTICAL. 
  295. code{$q marker_class <1|2|3|4>}\
  296. For a deterministic marker, selects which class packets should be marked with.
  297. code{$q marker_frc <f1> <f2> <f3> <f4>}\
  298. For a statistical marker, gives the fraction of packets that should be marked 
  299. from each class. For instance, using 0.1 for f1 means that 10 percent of the 
  300. traffic coming to the Marker link will be marked as Class 1.
  301. subsubsection{Demarker objects}
  302. code{$q trace-file <filename>}\
  303. This command specifies the trace file used for the demarker object. 
  304. filename.1 will contain the end-to-end 
  305. delays of each Class-1 packet to have reached the 
  306. Demarker link, filename.2 will contain the end-to-end 
  307. delays of each Class-2 packet to have reached the 
  308. Demarker link, and so forth. (There will of course be 4 trace files, one 
  309. for each class.)
  310. endinput
  311. ### Local Variables:
  312. ### mode: latex
  313. ### comment-column: 60
  314. ### backup-by-copying-when-linked: t
  315. ### file-precious-flag: nil
  316. ### End: