modelCDF
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. open(IDLEI,"> idle.in.dat");
  3. open(IDLEO,"> idle.out.dat");
  4. open(REQI,"> request.in.dat");
  5. open(REQO,"> request.out.dat");
  6. open(NUMPAGEI,"> numpage.in.dat");
  7. open(NUMPAGEO,"> numpage.out.dat");
  8. open(PAGESIZEI,"> pagesize.in.dat");
  9. open(PAGESIZEO,"> pagesize.out.dat");
  10. open(SESSINTERI,"> sessinter.in.dat");
  11. open(SESSINTERO,"> sessinter.out.dat");
  12. open(SERVER,"> server.dat");
  13. open(SERVERCDF,"> server.dat.cdf");
  14. $numServer = 0;
  15. $oldtimeI = 0;
  16. $oldtimeO = 0;
  17. $oldT = 0;
  18. $oldclnt = "";
  19. print "start processing model outputn";
  20. while (<>) {
  21.         ($type,$fld1,$fld2,$fld3,$fld4,$fld5,$fld6,$fld7,$fld8,$fld9) = split(' ',$_);
  22. $fld3="";
  23. $fld7="";
  24.         if ($type eq "req") {
  25.    if ($fld2 eq $oldclnt) {
  26.      $idle = $fld5 - $oldT; 
  27.              if ($fld4 eq "7") {
  28.                print IDLEI "$idlen";
  29.              } else {
  30.                print IDLEO "$idlen";
  31.      }
  32.    }
  33.            if ($fld4 eq "7") {
  34.                print REQI "$fld8n";
  35.                print PAGESIZEI "$fld9n";
  36.            } else {
  37.                print REQO "$fld8n";
  38.                print PAGESIZEO "$fld9n";
  39.                $server[$numServer] = $fld4;
  40.                $numServer++;
  41.    }
  42.    $oldclnt = $fld2;
  43.    $oldT = $fld5;
  44.         }
  45.         if ($type eq "Session") {
  46.            if ($fld1 eq "Inbound") {
  47.               print NUMPAGEI "$fld4n";
  48.       $inter = $fld6 - $oldtimeI;
  49.       print SESSINTERI "$intern";
  50.       $oldtimeI = $fld6;
  51.    }
  52.            if ($fld1 eq "Outbound") {
  53.               print NUMPAGEO "$fld4n";
  54.       $inter = $fld6 - $oldtimeO;
  55.       print SESSINTERO "$intern";
  56.       $oldtimeO = $fld6;
  57.    }
  58. }
  59. }
  60. print "sort arrayn";
  61. @serverSorted = sort @server;
  62. print "done sortingn";
  63. $old = "";
  64. $serverCnt = 1;
  65. $ns = 0;
  66. $nsSum = 0;
  67. foreach $j (0 .. $#serverSorted) {
  68.   if ($serverSorted[$j] ne $old) {
  69.      if ($old ne "") {
  70.         print SERVER "$serverCntn";
  71.         $svr[$ns] = $serverCnt;
  72.         $ns++;
  73.         $nsSum = $nsSum + $serverCnt;
  74.         $serverCnt = 1;
  75.      }
  76.   }
  77.   else {
  78.     $serverCnt++;
  79.   }
  80.   $old = $serverSorted[$j];
  81. }
  82. print SERVER "$serverCntn";
  83. $svr[$ns] = $serverCnt;
  84. $nsSum = $nsSum + $serverCnt;
  85. @svrS = sort numerically @svr;
  86. $tmp = 0;
  87. foreach $j (0 .. $#svrS) {
  88.   $tmp = $tmp + $svrS[$j];
  89.   $prob = $tmp/$nsSum;
  90.   $j1 = $j+1;
  91.   print SERVERCDF "$j1 $tmp $probn";
  92. }
  93. close(IDLEI);
  94. close(IDLEO);
  95. close(REQI);
  96. close(REQO);
  97. close(NUMPAGEI);
  98. close(NUMPAGEO);
  99. close(PAGESIZEI);
  100. close(PAGESIZEO);
  101. close(SESSINTERI);
  102. close(SESSINTERO);
  103. close(SERVER);
  104. close(SERVERCDF);
  105. #compute CDF
  106. &outputCDF(1,1,1,"request.in.dat");
  107. &outputCDF(1,1,1,"request.out.dat");
  108. &outputCDF(1,1,1,"numpage.in.dat");
  109. &outputCDF(1,1,1,"numpage.out.dat");
  110. &outputCDF(1,1,1,"pagesize.in.dat");
  111. &outputCDF(1,1,1,"pagesize.out.dat");
  112. &outputCDF(0,0.01,1,"sessinter.in.dat");
  113. &outputCDF(0,0.01,1,"sessinter.out.dat");
  114. &outputCDF(1,0.1,1,"idle.in.dat");
  115. &outputCDF(1,0.1,1,"idle.out.dat");
  116. sub numerically { $a <=> $b; }
  117. sub outputCDF {
  118. local($cur_epoch,$incr,$dividend,$tfile) = @_;
  119. local(@data);
  120. local(@dataS);
  121. local(@epoch);
  122. local(@cum);
  123. open(ORIG,$tfile);
  124. $tfileS = join('.',$tfile,"cdf");
  125. $newtfile = join(' ',">",$tfileS);
  126. open(CDF,$newtfile);
  127. $count = 0;
  128. $cur_time = 0;
  129. $i = 0;
  130. while ($line = <ORIG>) {
  131.   chop $line;
  132.   $data[$i] = $line;
  133.   $i++;
  134. }
  135. close(ORIG);
  136. if ($i eq 0) { exit; }
  137. @dataS = sort numerically @data;
  138. $i = 0;
  139. $sum = 0;
  140. foreach $j (0 .. $#dataS) {
  141. $cur_time = $dataS[$j];
  142. if ($cur_time > $cur_epoch) {
  143.    while ($cur_epoch < $cur_time) {
  144.      $epoch[$i] = $cur_epoch;
  145.      $sum = $sum + $count;
  146.      $cum[$i] = $sum;
  147.      $i++;
  148.      $cur_epoch = $cur_epoch + $incr;
  149.      $count=0;
  150.    }
  151.    if ($cur_time <= $cur_epoch) {
  152.       $count = 1;
  153.    } else {
  154.       $count = 0;
  155.    }
  156. } else {
  157.    $count++;
  158. }
  159. }
  160. $epoch[$i] = $cur_epoch;
  161. $sum = $sum + $count;
  162. $cum[$i] = $sum;
  163. $oldcum = 0;
  164. foreach $j (0 .. $#epoch) {
  165.   $prob = $cum[$j]/$cum[$#cum];
  166.   $e = $epoch[$j]/$dividend;
  167.   if ($cum[$j] ne $oldcum) {
  168.      print CDF "$e $cum[$j] $probn";
  169.   }
  170.   $oldcum = $cum[$j];
  171. }
  172. close(CDF);
  173. }