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

通讯编程

开发平台:

Visual C++

  1. #! /usr/local/bin/tclsh
  2. #set pdrop_opt {-null -null "-recn -rdrop" "-pdrop" "-recn -rdrop -pdrop"}
  3. #set tcptype_opt {-fack -fackfs -fackfs -fackfs -fackfs}
  4. #set pdrop_opt {-null -null "-null -nofrt" "-null -nofrt -noflr" -pdrop "-pdrop -nofrt" "-pdrop -nofrt -noflr"}
  5. #set tcptype_opt {-newreno -newrenofs -newrenofs -newrenofs -newrenofs -newrenofs -newrenofs}
  6. #set pdrop_opt {-null -null -pdrop "-pdrop -nofrt" "-pdrop -nofrt -noflr"}
  7. #set tcptype_opt {-newreno -newrenofs -newrenofs -newrenofs -newrenofs}
  8. set pdrop_opt {-null -pdrop}
  9. set tcptype_opt {-newreno -newrenofs}
  10. #initial values
  11. set tick 0.1
  12. set maxnumconn 4
  13. set numburstconn 1
  14. set tcptype newreno
  15. set burstonly 3
  16. set bulkCrossTraffic 1
  17. set burstsize 50
  18. set qsize 20
  19. set delay 50ms
  20. set firstburstsize 0
  21. set window 32
  22. set burstwin 32
  23. set redwt 0.002
  24. set pause 30
  25. set duration 59
  26. set burstStartTime 0
  27. set burstEndTime 1
  28. set bulkStartTime 5
  29. set bulkEndTime 10
  30. set fbw 1.5Mb
  31. set dir "."
  32. set opt(tk) tick
  33. set opt(nc) maxnumconn
  34. set opt(nbc) numburstconn
  35. set opt(tt) tcptype
  36. set opt(bo) burstonly
  37. set opt(bulk) bulkCrossTraffic
  38. set opt(bs) burstsize
  39. set opt(q) qsize
  40. set opt(del) delay 
  41. set opt(fbs) firstburstsize
  42. set opt(win) window
  43. set opt(bwin) burstwin
  44. set opt(redwt) redwt
  45. set opt(pause) pause
  46. set opt(dur) duration
  47. set opt(burststart) burstStartTime
  48. set opt(burstend) burstEndTime
  49. set opt(bulkstart) bulkStartTime
  50. set opt(bulkend) bulkEndTime
  51. set opt(dir) dir
  52. set opt(fbw) fbw
  53. proc getopt {argc argv} {
  54. global opt
  55. for {set i 0} {$i < $argc} {incr i} {
  56. set arg [lindex $argv $i]
  57. if {[string range $arg 0 0] != "-"} continue
  58. set name [string range $arg 1 end]
  59. if {[info exists opt($name)]} {
  60. eval "global $opt($name)"
  61. eval "set $opt($name) [lindex $argv [incr i]]"
  62. }
  63. }
  64. }
  65. # Compute results for a combination of bulk transfers and Web-like transfers
  66. proc BulkWebComputeResults { } {
  67. global pause burstStartTime fid errfid cmd iter qsize delay j
  68. global tcptype_opt pdrop_opt
  69. global dir
  70. global numconn
  71. global burstsize
  72. set thruputsum 0
  73. set thruputs [exec gawk {BEGIN {s="";} {if (index($1,"0,") == 0) { sum += $7; s = sprintf("%s %d", s, $7);}} END {printf "%s %d", s, sum;}} thruput]
  74. set thruputsum [exec gawk {{if (index($1,"0,") == 0) { sum += $7;}} END {printf "%d", sum;}} thruput]
  75. for {set src 0} {$src < 2} {incr src} {
  76. set responseTimeSum($src) 0
  77. set responseTimeCount($src) 0
  78. set responseTimeAvg($src) 0
  79. }
  80. foreach burstfile [glob $dir/{burst*.out}] {
  81. set src [exec gawk {{if (NR == 1) print $1;}} $burstfile]
  82. set responseTime($src) [exec gawk -v start=[expr $burstStartTime+$pause] -v end=[expr $burstStartTime+$pause+1] {{if (($5 >= start) && ($5 <= end)) {flag = 1; print $6 - $5; }} END {if (flag==0) print -1;}} $burstfile]
  83. if {$responseTime($src) == -1} {
  84. puts $errfid "$cmd"
  85. flush $errfid
  86. set responseTimeAvg($src) -1
  87. break
  88. }
  89. set responseTimeSum($src) [expr $responseTimeSum($src)+$responseTime($src)]
  90. incr responseTimeCount($src)
  91. }
  92. for {set src 0} {$src < 2} {incr src} {
  93. if {$responseTimeAvg($src) != -1 && $responseTimeCount($src) != 0} {
  94. set responseTimeAvg($src) [expr $responseTimeSum($src)/$responseTimeCount($src)]
  95. }
  96. }
  97. set dropcount [exec gawk -v start=[expr $burstStartTime+$pause] -v end=[expr $burstStartTime+$pause+5] {BEGIN {drops[0] = 0; drops[1] = 0;} {if ($1 == "d" && $2 >= start && $2 <= end) drops[int($9)]++;} END {print drops[0], drops[1]}} $dir/out.tr]
  98. set outstr [format "%2s %11s %26s %3d %6s %2d %8s %8s %10s" $iter [lindex $tcptype_opt $j] [lindex $pdrop_opt $j] $qsize $delay $numconn $thruputsum $responseTimeAvg(0) $dropcount]
  99. puts $fid "$outstr"
  100. flush $fid
  101. # puts "$outstr"
  102. }
  103. # Compute results for just one set of Web-like transfers
  104. proc WebOnlyComputeResults { } {
  105. global pause burstStartTime fid errfid cmd iter qsize delay j
  106. global tcptype_opt pdrop_opt
  107. global dir
  108. for {set src 0} {$src < 2} {incr src} {
  109. set responseTimeSum($src) 0
  110. set responseTimeCount($src) 0
  111. set responseTimeAvg($src) 0
  112. }
  113. foreach burstfile [glob $dir/{burst*.out}] {
  114. set src [exec gawk {{if (NR == 1) print $1;}} $burstfile]
  115. set responseTime($src) [exec gawk -v start=[expr $burstStartTime+$pause] -v end=[expr $burstStartTime+$pause+1] {{if (($5 >= start) && ($5 <= end)) {flag = 1; print $6 - $5; }} END {if (flag==0) print -1;}} $burstfile]
  116. if {$responseTime($src) == -1} {
  117. puts $errfid "$cmd"
  118. flush $errfid
  119. set responseTimeAvg($src) -1
  120. break
  121. }
  122. set responseTimeSum($src) [expr $responseTimeSum($src)+$responseTime($src)]
  123. incr responseTimeCount($src)
  124. }
  125. for {set src 0} {$src < 2} {incr src} {
  126. if {$responseTimeAvg($src) != -1 && $responseTimeCount($src) != 0} {
  127. set responseTimeAvg($src) [expr $responseTimeSum($src)/$responseTimeCount($src)]
  128. }
  129. }
  130. set dropcount [exec gawk -v start=[expr $burstStartTime+$pause] {BEGIN {drops[0] = 0; drops[1] = 0;} {if ($1 == "d" && $2 >= start) drops[int($9)]++;} END {print drops[0], drops[1]}} $dir/out.tr]
  131. set outstr [format "%2s %11s %26s %3d %6s 0 %8s %8s %10s" $iter [lindex $tcptype_opt $j] [lindex $pdrop_opt $j] $qsize $delay $responseTimeAvg(0) $responseTimeAvg(1) $dropcount]
  132. puts $fid "$outstr"
  133. flush $fid
  134. # puts "$outstr"
  135. }
  136. getopt $argc $argv
  137. set fid [open "$tcptype-$maxnumconn-$numburstconn.res" w]
  138. set errfid [open "err-$tcptype-$maxnumconn-$numburstconn.res" w]
  139. set cmdfid [open "cmd-$tcptype-$maxnumconn-$numburstconn.res" w]
  140. #set numconn $maxnumconn
  141. for {set iter 0} {$iter < 3} {incr iter} {
  142. for {set numconn $maxnumconn} {$numconn <= $maxnumconn} {incr numconn} { 
  143. set seed [expr int([exec rand 0 1000])]
  144. # puts -nonewline $cmdfid "$iter "
  145. for {set k 0} {$k < $numburstconn} {incr k} {
  146. # set cmd1_rand($k) [exec rand 0 10]
  147. set cmd1_start($k) [exec rand $burstStartTime $burstEndTime]
  148. set cmd1_rand($k) [exec rand 0 1]
  149. # puts -nonewline $cmdfid " $cmd1_rand($k)"
  150. }
  151. set cmd2 ""
  152. if { $numconn > 0 } {
  153. append cmd2 " -src 01 -dst 31"
  154. }
  155. for {set k 0} {$k < $numconn} {incr k} {
  156. if {$bulkCrossTraffic} {
  157. append cmd2 " -$tcptype [exec rand $bulkStartTime $bulkEndTime]"
  158. } else {
  159. append cmd2 " -burst -$tcptype [exec rand $bulkStartTime $bulkEndTime] -rand [exec rand 0 1]"
  160. }
  161. }
  162. # puts $cmdfid "$cmd2"
  163. # flush $cmdfid
  164. # foreach qsize {200} {
  165. # foreach delay {200ms} {
  166. # for {set burstsize 10} {$burstsize < 200} {incr burstsize 10} {
  167. for {set j 0} {$j < [llength $pdrop_opt]} {incr j} {
  168. set cmd1 ""
  169. if {[lindex $tcptype_opt $j] == "-null"} {
  170. append cmd1 " -pause 100"
  171. }
  172. append cmd1 " -src 00 -dst 30"
  173. for {set k 0} {$k < $numburstconn} {incr k} {
  174. append cmd1 " -burst [lindex $tcptype_opt $j] $cmd1_start($k) -rand $cmd1_rand($k)"
  175. }
  176. if {[file exists "thruput"]} {
  177. exec rm "thruput"
  178. }
  179. foreach f [glob -nocomplain $dir/{burst*.out}] {
  180. exec rm $f
  181. }
  182. set cmd "../../../../ns.bsdi ../test1.tcl [lindex $pdrop_opt $j] -seed $seed -overhead 0.001 -tk $tick -fp -dur $duration -fbw $fbw -del $delay -nonfifo -sred -redwt $redwt -q $qsize -mb 4 -bs $burstsize -fbs $firstburstsize -pause $pause -ton [expr $burstStartTime+$pause] -toff [expr $burstStartTime+$pause+5] -win $window -bwin $burstwin -dir $dir"
  183. # set cmd "../../../../ns.solaris ../test1.tcl [lindex $pdrop_opt $j] -seed $seed -overhead 0.001 -tk $tick -fp -dur $duration -del $delay -nonfifo -sred -redwt $redwt -q $qsize -mb 4 -bs $burstsize -fbs $firstburstsize -pause $pause -ton [expr $burstStartTime+$pause] -toff [expr $burstStartTime+$pause+5] -win $window -bwin $burstwin -dir $dir"
  184. append cmd $cmd1
  185. append cmd $cmd2
  186. puts -nonewline $cmdfid "$iter "
  187. puts $cmdfid "$cmd"
  188. flush $cmdfid
  189. # puts $cmd
  190. eval "exec $cmd"
  191. if {$bulkCrossTraffic} {
  192. BulkWebComputeResults
  193. } else {
  194. WebOnlyComputeResults
  195. }
  196. }
  197. # }
  198. # }
  199. # }
  200. }
  201. }
  202. close $fid
  203. close $errfid
  204. close $cmdfid
  205. proc oldComputeResults { } {
  206. global dir
  207. set thruputs [exec gawk {BEGIN {s="";} {if (index($1,"(0,") == 0) { sum += $7; s = sprintf("%s %d", s, $7);}} END {printf "%s %d", s, sum;}} thruput]
  208. for {set src 0} {$src < 2} {incr src} {
  209. set responseTimeSum($src) 0
  210. set responseTimeCount($src) 0
  211. set responseTimeAvg($src) 0
  212. }
  213. set otherDropsSum 0
  214. set otherDropsCount 0
  215. set otherDropsAvg 0
  216. set fsDropsSum 0
  217. set fsDropsCount 0
  218. set fsDropsAvg 0
  219. foreach burstfile [glob $dir/{burst*.out}] {
  220. set src [exec gawk {{if (NR == 1) print $1;}} $burstfile]
  221. set responseTime($src) [exec gawk {{if ($5 >= 30 && $5 <= 31) {flag = 1; print $6 - $5; }} END {if (!flag) print -1;}} $burstfile]
  222. if {$responseTime($src) == -1} {
  223. puts $errfid "$cmd"
  224. flush $errfid
  225. set responseTimeAvg($src) -1
  226. set otherDropsAvg -1
  227. set fsDropsAvg -1
  228. break
  229. }
  230. set responseTimeSum($src) [expr $responseTimeSum($src)+$responseTime($src)]
  231. incr responseTimeCount($src)
  232. set startTime [exec gawk {{if (NR == 2) print $5;} END {if (NR < 2) print -1;}} $burstfile]
  233. set endTime [exec gawk {{if (NR == 2) print $6;} END {if (NR < 2) print -1;}} $burstfile]
  234. if {$startTime != -1 && $endTime != -1} {
  235. set drops [exec gawk -v startTime=$startTime -v endTime=$endTime -f ../drop.awk $dir/out.tr]
  236. set otherDrops [lindex $drops 0]
  237. set otherDropsSum [expr $otherDropsSum+$otherDrops]
  238. incr otherDropsCount
  239. set fsDrops [lindex $drops 1]
  240. set fsDropsSum [expr $fsDropsSum+$fsDrops]
  241. incr fsDropsCount
  242. } else {
  243. set otherDropsAvg -1
  244. set fsDropsAvg -1
  245. break
  246. }
  247. }
  248. for {set src 0} {$src < 2} {incr src} {
  249. if {$responseTimeAvg($src) != -1} {
  250. set responseTimeAvg($src) [expr $responseTimeSum($src)/$responseTimeCount($src)]
  251. set otherDropsAvg [expr $otherDropsSum/$otherDropsCount]
  252. set fsDropsAvg [expr $fsDropsSum/$fsDropsCount]
  253. }
  254. }
  255. # set outstr [format "%2s %11s %20s %3d %6s %8s %25s %4s %4s" $i [lindex $tcptype_opt $j] [lindex $pdrop_opt $j] $qsize $delay $responseTimeAvg(0) $thruputs $otherDropsAvg $fsDropsAvg]
  256. set outstr [format "%2s %11s %20s %3d %6s %8s %8s" $i [lindex $tcptype_opt $j] [lindex $pdrop_opt $j] $qsize $delay $responseTimeAvg(0) $responseTimeAvg(1)]
  257. puts $fid "$outstr"
  258. flush $fid
  259. puts "$outstr"
  260. }