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

通讯编程

开发平台:

Visual C++

  1. #! /usr/sww/bin/tclsh
  2. set burstsize 30
  3. set firstburstsize 0
  4. set pause 50
  5. set duration 99
  6. set redwt 0.002
  7. set window 32
  8. set qsize 30
  9. set rqsize 30
  10. set acksz 6
  11. set dir "."
  12. set tcptype newreno
  13. set opt(bs) burstsize
  14. set opt(fbs) firstburstsize
  15. set opt(pause) pause
  16. set opt(dur) duration
  17. set opt(redwt) redwt
  18. set opt(win) window
  19. set opt(q) qsize
  20. set opt(rq) rqsize
  21. set opt(acksz) acksz
  22. set opt(dir) dir
  23. set opt(tt) tcptype
  24. proc getopt {argc argv} {
  25. global opt
  26. for {set i 0} {$i < $argc} {incr i} {
  27. set arg [lindex $argv $i]
  28. if {[string range $arg 0 0] != "-"} continue
  29. set name [string range $arg 1 end]
  30. if {[info exists opt($name)]} {
  31. eval "global $opt($name)"
  32. eval "set $opt($name) [lindex $argv [incr i]]"
  33. }
  34. }
  35. }
  36. proc Asym2WayComputeResults { } {
  37. global pause burstStartTime fid errfid cmd iter j rqsize
  38. global tcptype_opt rgw_opt dir 
  39. set thruputsum 0
  40. 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]
  41. set thruputsum [exec gawk {{if (match($1,"^0,") == 0) { sum += $7;}} END {printf "%g", sum;}} thruput]
  42. for {set src 0} {$src < 2} {incr src} {
  43. set responseTimeSum($src) 0
  44. set responseTimeCount($src) 0
  45. set responseTimeAvg($src) 0
  46. }
  47. foreach burstfile [glob $dir/{burst*.out}] {
  48. set src [exec gawk {{if (NR == 1) print $1;}} $burstfile]
  49. 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]
  50. if {$responseTime($src) == -1} {
  51. puts $errfid "$cmd"
  52. flush $errfid
  53. set responseTimeAvg($src) -1
  54. break
  55. }
  56. set responseTimeSum($src) [expr $responseTimeSum($src)+$responseTime($src)]
  57. incr responseTimeCount($src)
  58. }
  59. for {set src 0} {$src < 2} {incr src} {
  60. if {$responseTimeAvg($src) != -1 && $responseTimeCount($src) != 0} {
  61. set responseTimeAvg($src) [expr $responseTimeSum($src)/$responseTimeCount($src)]
  62. }
  63. }
  64. set outstr [format "%2s %11s %26s %3d %6s %2d %8s %8s" $iter [lindex $tcptype_opt $j] [lindex $rgw_opt $j] $rqsize - 1 $thruputsum $responseTimeAvg(0)]
  65. puts $fid "$outstr"
  66. flush $fid
  67. }
  68. set rgw_opt {-null -null -acksfirst -acksfirst}
  69. set tcptype_opt {-newreno -newrenofs -newreno -newrenofs}
  70. getopt $argc $argv
  71. set fid [open "$tcptype.res" w]
  72. set errfid [open "err-tcptype.res" w]
  73. for {set iter 0} {$iter < 30} {incr iter} {
  74. set seed [expr int([exec rand 0 1000])]
  75. set burstStartTime [exec rand 0 5]
  76. foreach rqsize {20 30} {
  77. for {set j 0} {$j < [llength $tcptype_opt]} {incr j} {
  78. set cmd "../../../../ns.solaris ../test1.tcl -fp -nonfifo -sred -topo asym -mb 4 -bs $burstsize -fbs $firstburstsize -pause $pause -dur $duration -redwt $redwt -win $window -seed $seed -overhead 0.001 -q $qsize -rq $rqsize -acksz $acksz -ton [expr $burstStartTime+$pause] -toff [expr $burstStartTime+$pause+5] -dir $dir [lindex $rgw_opt $j] -dn -burst [lindex $tcptype_opt $j] $burstStartTime -up -$tcptype 40 -up -$tcptype 41 -up -$tcptype 42 -up -$tcptype 43"
  79. eval "exec $cmd"
  80. Asym2WayComputeResults
  81. }
  82. }
  83. }
  84. close $fid
  85. close $errfid