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

通讯编程

开发平台:

Visual C++

  1. # Copyright (C) 2001 by USC/ISI
  2. # All rights reserved.                                            
  3. #                                                                
  4. # Redistribution and use in source and binary forms are permitted
  5. # provided that the above copyright notice and this paragraph are
  6. # duplicated in all such forms and that any documentation, advertising
  7. # materials, and other materials related to such distribution and use
  8. # acknowledge that the software was developed by the University of
  9. # Southern California, Information Sciences Institute.  The name of the
  10. # University may not be used to endorse or promote products derived from
  11. # this software without specific prior written permission.
  12. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  13. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  14. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  15. # An example script that simulates ISI web traffic. 
  16. #
  17. # Some attributes:
  18. # 1. Topology: ~1100 nodes, 960 web clients, 40 web servers
  19. #                           100 ftp clients, 10 ftp servers
  20. # 2. Traffic: approximately 1,700,000 packets, heavy-tailed connection 
  21. #             sizes, throughout 3600 second simulation time
  22. # 3. Simulation scale: ~33 MB memory, ~1 hrs running on Red Hat Linux 7.0
  23. #              Pentium II Xeon 450 MHz PC with 1GB physical memory
  24. #
  25. # Created by Kun-chan Lan (kclang@isi.edu)
  26. global num_node n verbose num_ftp_client num_nonisi_web_client num_isi_server 
  27. set verbose 1
  28. set enableWEB 1
  29. set enableFTP 0
  30. source isitopo.tcl
  31. # Basic ns setup
  32. set ns [new Simulator]
  33. $ns rtproto Manual
  34. create_topology
  35. #trace files setup (isi: inbound traffic  www: all traffic)
  36. $ns trace-queue $n(9) $n(1) [open isi.in w]
  37. $ns trace-queue $n(1) $n(9) [open isi.out w]
  38. $ns trace-queue $n(9) $n([expr $num_node - 1]) [open www.out w]
  39. $ns trace-queue $n([expr $num_node - 1]) $n(9) [open www.in w]
  40. set stopTime 3600.1
  41. set stopTimeW $stopTime
  42. set stopTimeF $stopTime
  43. # Number of Sessions
  44. set numSessionI 3000
  45. set numSessionO 1500
  46. # Random seed at every run
  47. global defaultRNG
  48. $defaultRNG seed 0
  49. if {$enableWEB ==  1} {
  50. #setup Web model
  51. # Create page poolWWW
  52. set poolWWW [new PagePool/EmpWebTraf]
  53. # Setup web servers and clients
  54. $poolWWW set-num-client [llength [$ns set srcW_]]
  55. $poolWWW set-num-server [llength [$ns set dstW_]]
  56. $poolWWW set-num-remote-client $num_nonisi_web_client
  57. $poolWWW set-num-server-lan $num_isi_server
  58. set i 0
  59. foreach s [$ns set srcW_] {
  60. $poolWWW set-client $i $n($s)
  61. incr i
  62. }
  63. set i 0
  64. foreach s [$ns set dstW_] {
  65. $poolWWW set-server $i $n($s)
  66. incr i
  67. }
  68. # Inter-session Interval
  69. set WWWinterSessionO [new RandomVariable/Empirical]
  70. $WWWinterSessionO loadCDF cdf/2pm.dump.www.out.sess.inter.cdf
  71. set WWWinterSessionI [new RandomVariable/Empirical]
  72. $WWWinterSessionI loadCDF cdf/2pm.dump.www.in.sess.inter.cdf
  73. #set WWWinterSessionO [new RandomVariable/Exponential]
  74. #$WWWinterSessionO set avg_ 13.6
  75. #set WWWinterSessionI [new RandomVariable/Exponential]
  76. #$WWWinterSessionI set avg_ 1.6
  77. ## Number of Pages per Session
  78. set WWWsessionSizeO [new RandomVariable/Empirical]
  79. $WWWsessionSizeO loadCDF cdf/2pm.dump.www.out.pagecnt.cdf
  80. set WWWsessionSizeI [new RandomVariable/Empirical]
  81. $WWWsessionSizeI loadCDF cdf/2pm.dump.www.in.pagecnt.cdf
  82. # Create sessions
  83. $poolWWW set-num-session [expr $numSessionI + $numSessionO]
  84. puts "creating WWW outbound session"
  85. set interPage [new RandomVariable/Empirical]
  86. $interPage loadCDF cdf/2pm.dump.www.out.idle.cdf
  87. set pageSize [new RandomVariable/Constant]
  88. $pageSize set val_ 1
  89. set interObj [new RandomVariable/Empirical]
  90. $interObj loadCDF cdf/2pm.dump.www.out.obj.cdf  
  91. set objSize [new RandomVariable/Empirical]
  92. $objSize loadCDF cdf/2pm.dump.www.out.pagesize.cdf
  93. set reqSize [new RandomVariable/Empirical]
  94. $reqSize loadCDF cdf/2pm.dump.www.out.req.cdf
  95. set persistSel [new RandomVariable/Empirical]
  96. $persistSel loadCDF cdf/persist.cdf
  97. set serverSel [new RandomVariable/Empirical]
  98. $serverSel loadCDF cdf/2pm.dump.outbound.server.cdf
  99. set windowS [new RandomVariable/Empirical]
  100. $windowS loadCDF cdf/2pm.dump.www.outbound.wins.cdf
  101. set windowC [new RandomVariable/Empirical]
  102. $windowC loadCDF cdf/2pm.dump.www.outbound.winc.cdf
  103. set mtu [new RandomVariable/Empirical]
  104. $mtu loadCDF cdf/mtu.cdf
  105. set launchTime 0
  106. for {set i 0} {$i < $numSessionO} {incr i} {
  107.         if {$launchTime <=  $stopTimeW} {
  108.    set numPage [$WWWsessionSizeO value]
  109.    puts "Session Outbound $i has $numPage pages $launchTime"
  110.    $poolWWW create-session  $i  
  111.                 $numPage [expr $launchTime + 0.1] 
  112. $interPage $pageSize $interObj $objSize 
  113.                         $reqSize $persistSel $serverSel $windowS $windowC $mtu 1
  114.    set launchTime [expr $launchTime + [$WWWinterSessionO value]]
  115. }
  116. }
  117. puts "creating WWW inbound session"
  118. set interPage [new RandomVariable/Empirical]
  119. $interPage loadCDF cdf/2pm.dump.www.in.idle.cdf
  120. set pageSize [new RandomVariable/Constant]
  121. $pageSize set val_ 1
  122. set interObj [new RandomVariable/Empirical]
  123. $interObj loadCDF cdf/2pm.dump.www.in.obj.cdf  
  124. set objSize [new RandomVariable/Empirical]
  125. $objSize loadCDF cdf/2pm.dump.www.in.pagesize.cdf
  126. set reqSize [new RandomVariable/Empirical]
  127. $reqSize loadCDF cdf/2pm.dump.www.in.req.cdf
  128. set persistSel [new RandomVariable/Empirical]
  129. $persistSel loadCDF cdf/persist.cdf
  130. set serverSel [new RandomVariable/Empirical]
  131. $serverSel loadCDF cdf/2pm.dump.www.inbound.server.cdf
  132. set windowS [new RandomVariable/Empirical]
  133. $windowS loadCDF cdf/2pm.dump.www.inbound.wins.cdf
  134. set windowC [new RandomVariable/Empirical]
  135. $windowC loadCDF cdf/2pm.dump.www.inbound.winc.cdf
  136. set mtu [new RandomVariable/Empirical]
  137. $mtu loadCDF cdf/mtu.cdf
  138. set launchTime 0
  139. for {set i 0} {$i < $numSessionI} {incr i} {
  140.         if {$launchTime <=  $stopTimeW} {
  141.    set numPage [$WWWsessionSizeI value]
  142.    puts "Session Inbound $i has $numPage pages $launchTime"
  143.    $poolWWW create-session [expr $i + $numSessionO] 
  144.                 $numPage [expr $launchTime + 0.1] 
  145. $interPage $pageSize $interObj $objSize 
  146.                         $reqSize $persistSel $serverSel $windowS $windowC $mtu 0
  147.    set launchTime [expr $launchTime + [$WWWinterSessionI value]]
  148.         }
  149. }
  150. }
  151. if {$enableFTP ==  1} {
  152. # setup FTP model
  153. # Create page pool
  154. set poolFTP [new PagePool/EmpFtpTraf]
  155. # Setup FTP servers and clients
  156. $poolFTP set-num-client [llength [$ns set srcF_]]
  157. $poolFTP set-num-server [llength [$ns set dstF_]]
  158. $poolFTP set-num-remote-client $num_ftp_client
  159. $poolFTP set-num-server-lan $num_isi_server
  160. set i 0
  161. foreach s [$ns set srcF_] {
  162.         $poolFTP set-client $i $n($s)
  163.         incr i
  164. }
  165. set i 0
  166. foreach s [$ns set dstF_] {
  167.         $poolFTP set-server $i $n($s)
  168. incr i
  169. }
  170. # Inter-session Interval
  171. set FTPinterSessionO [new RandomVariable/Empirical]
  172. $FTPinterSessionO loadCDF cdf/2pm.dump.ftp.outbound.sess.inter.cdf
  173. set FTPinterSessionI [new RandomVariable/Empirical]
  174. $FTPinterSessionI loadCDF cdf/2pm.dump.ftp.inbound.sess.inter.cdf
  175. ## Number of File per Session
  176. set FTPsessionSizeO [new RandomVariable/Empirical]
  177. $FTPsessionSizeO loadCDF cdf/2pm.dump.ftp.outbound.fileno.cdf
  178. set FTPsessionSizeI [new RandomVariable/Empirical]
  179. $FTPsessionSizeI loadCDF cdf/2pm.dump.ftp.inbound.fileno.cdf
  180. $poolFTP set-num-session [expr $numSessionI + $numSessionO]
  181. puts "creating FTP outbound session"
  182. set interFile [new RandomVariable/Empirical]
  183. $interFile loadCDF cdf/2pm.dump.ftp.outbound.file.inter.cdf
  184. set fileSize [new RandomVariable/Empirical]
  185. $fileSize loadCDF cdf/2pm.dump.ftp.outbound.size.cdf
  186. set serverSel [new RandomVariable/Empirical]
  187. $serverSel loadCDF cdf/2pm.dump.outbound.server.cdf
  188. set windowS [new RandomVariable/Empirical]
  189. $windowS loadCDF cdf/2pm.dump.ftp.outbound.wins.cdf
  190. set windowC [new RandomVariable/Empirical]
  191. $windowC loadCDF cdf/2pm.dump.ftp.outbound.winc.cdf
  192. set launchTime 0
  193. for {set i 0} {$i < $numSessionO} {incr i} {
  194.         if {$launchTime <=  $stopTimeF} {
  195.     set numFile [$FTPsessionSizeO value]
  196.             puts "Session Outbound $i has $numFile files $launchTime"
  197.         $poolFTP create-session  $i  
  198.                          $numFile [expr $launchTime + 0.1] 
  199.          $interFile $fileSize $serverSel $windowS $windowC 1
  200.             set launchTime [expr $launchTime + [$FTPinterSessionO value]]
  201.         }
  202. }
  203. puts "creating FTP inbound session"
  204. set interFile [new RandomVariable/Empirical]
  205. $interFile loadCDF cdf/2pm.dump.ftp.inbound.file.inter.cdf
  206. set fileSize [new RandomVariable/Empirical]
  207. $fileSize loadCDF cdf/2pm.dump.ftp.inbound.size.cdf
  208. set serverSel [new RandomVariable/Empirical]
  209. $serverSel loadCDF cdf/2pm.dump.ftp.inbound.server.cdf
  210. set windowS [new RandomVariable/Empirical]
  211. $windowS loadCDF cdf/2pm.dump.ftp.inbound.wins.cdf
  212. set windowC [new RandomVariable/Empirical]
  213. $windowC loadCDF cdf/2pm.dump.ftp.inbound.winc.cdf
  214. set launchTime 0
  215. for {set i 0} {$i < $numSessionI} {incr i} {
  216.         if {$launchTime <=  $stopTimeF} {
  217.     set numFile [$FTPsessionSizeI value]
  218. puts "Session Inbound $i has $numFile files $launchTime"
  219. $poolFTP create-session [expr $i + $numSessionO] 
  220.                          $numFile [expr $launchTime + 0.1] 
  221.                          $interFile $fileSize $serverSel $windowS $windowC 0
  222.         set launchTime [expr $launchTime + [$FTPinterSessionI value]]
  223.          }
  224. }
  225. }
  226. ## Start the simulation
  227. $ns at $stopTime "finish"
  228. proc finish {} {
  229. global ns gf 
  230. $ns flush-trace
  231. exit 0
  232. }
  233. puts "ns started"
  234. $ns run