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

通讯编程

开发平台:

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: ~1000 nodes, 960 web clients, 40 web servers
  19. # 2. Traffic: approximately 1,700,000 packets, heavy-tailed connection 
  20. #             sizes, throughout 3600 second simulation time
  21. # 3. Simulation scale: ~33 MB memory, ~1 hrs running on Red Hat Linux 7.0
  22. #              Pentium II Xeon 450 MHz PC with 1GB physical memory
  23. #
  24. # Created by Kun-chan Lan (kclang@isi.edu)
  25. global num_node n verbose lan_client lan_server 
  26. set verbose 1
  27. source isitopo.tcl
  28. # Basic ns setup
  29. set ns [new Simulator]
  30. $ns rtproto Manual
  31. puts "creating topology"
  32. create_topology
  33. #trace files setup (isi: inbound traffic  www: all traffic)
  34. $ns trace-queue $n(7) $n(1) [open isi.in w]
  35. $ns trace-queue $n(1) $n(7) [open isi.out w]
  36. $ns trace-queue $n(7) $n([expr $num_node - 1]) [open www.out w]
  37. $ns trace-queue $n([expr $num_node - 1]) $n(7) [open www.in w]
  38. # Create page pool
  39. set pool [new PagePool/EmpWebTraf]
  40. # Setup servers and clients
  41. $pool set-num-client [llength [$ns set src_]]
  42. $pool set-num-server [llength [$ns set dst_]]
  43. $pool set-num-client-lan $other_client
  44. $pool set-num-server-lan $lan_server
  45. set i 0
  46. foreach s [$ns set src_] {
  47. $pool set-client $i $n($s)
  48. incr i
  49. }
  50. set i 0
  51. foreach s [$ns set dst_] {
  52. $pool set-server $i $n($s)
  53. incr i
  54. }
  55. set stopTime 3600.1
  56. # Number of Sessions
  57. set numSessionI 3000
  58. set numSessionO 1500
  59. # Inter-session Interval
  60. set interSessionO [new RandomVariable/Empirical]
  61. $interSessionO loadCDF cdf/2pm.www.out.sess.inter.cdf
  62. set interSessionI [new RandomVariable/Empirical]
  63. $interSessionI loadCDF cdf/2pm.www.in.sess.inter.cdf
  64. #set interSessionO [new RandomVariable/Exponential]
  65. #$interSessionO set avg_ 13.6
  66. #set interSessionI [new RandomVariable/Exponential]
  67. #$interSessionI set avg_ 1.6
  68. ## Number of Pages per Session
  69. set sessionSizeO [new RandomVariable/Empirical]
  70. $sessionSizeO loadCDF cdf/2pm.www.out.pagecnt.cdf
  71. set sessionSizeI [new RandomVariable/Empirical]
  72. $sessionSizeI loadCDF cdf/2pm.www.in.pagecnt.cdf
  73. # Random seed at every run
  74. global defaultRNG
  75. $defaultRNG seed 0
  76. # Create sessions
  77. $pool set-num-session [expr $numSessionI + $numSessionO]
  78. puts "creating outbound session"
  79. set interPage [new RandomVariable/Empirical]
  80. $interPage loadCDF cdf/2pm.www.out.idle.cdf
  81. set pageSize [new RandomVariable/Constant]
  82. $pageSize set val_ 1
  83. set interObj [new RandomVariable/Empirical]
  84. $interObj loadCDF cdf/2pm.www.out.obj.cdf  
  85. set objSize [new RandomVariable/Empirical]
  86. $objSize loadCDF cdf/2pm.www.out.pagesize.cdf
  87. set reqSize [new RandomVariable/Empirical]
  88. $reqSize loadCDF cdf/2pm.www.out.req.cdf
  89. set persistSel [new RandomVariable/Empirical]
  90. $persistSel loadCDF cdf/persist.cdf
  91. set serverSel [new RandomVariable/Empirical]
  92. $serverSel loadCDF cdf/outbound.server.cdf
  93. set launchTime 0
  94. for {set i 0} {$i < $numSessionO} {incr i} {
  95.         if {$launchTime <=  $stopTime} {
  96.    set numPage [$sessionSizeO value]
  97.    puts "Session Outbound $i has $numPage pages $launchTime"
  98.    $pool create-session  $i  
  99.                 $numPage [expr $launchTime + 0.1] 
  100. $interPage $pageSize $interObj $objSize 
  101.                         $reqSize $persistSel $serverSel 1
  102.    set launchTime [expr $launchTime + [$interSessionO value]]
  103. }
  104. }
  105. puts "creating inbound session"
  106. set interPage [new RandomVariable/Empirical]
  107. $interPage loadCDF cdf/2pm.www.in.idle.cdf
  108. set pageSize [new RandomVariable/Constant]
  109. $pageSize set val_ 1
  110. set interObj [new RandomVariable/Empirical]
  111. $interObj loadCDF cdf/2pm.www.in.obj.cdf  
  112. set objSize [new RandomVariable/Empirical]
  113. $objSize loadCDF cdf/2pm.www.in.pagesize.cdf
  114. set reqSize [new RandomVariable/Empirical]
  115. $reqSize loadCDF cdf/2pm.www.in.req.cdf
  116. set persistSel [new RandomVariable/Empirical]
  117. $persistSel loadCDF cdf/persist.cdf
  118. set serverSel [new RandomVariable/Empirical]
  119. $serverSel loadCDF cdf/inbound.server.cdf
  120. set launchTime 0
  121. for {set i 0} {$i < $numSessionI} {incr i} {
  122.         if {$launchTime <=  $stopTime} {
  123.    set numPage [$sessionSizeI value]
  124.    puts "Session Inbound $i has $numPage pages $launchTime"
  125.    $pool create-session [expr $i + $numSessionO] 
  126.                 $numPage [expr $launchTime + 0.1] 
  127. $interPage $pageSize $interObj $objSize 
  128.                         $reqSize $persistSel $serverSel 0
  129.    set launchTime [expr $launchTime + [$interSessionI value]]
  130.         }
  131. }
  132. ## Start the simulation
  133. $ns at $stopTime "finish"
  134. proc finish {} {
  135. global ns gf 
  136. $ns flush-trace
  137. exit 0
  138. }
  139. puts "ns started"
  140. $ns run