⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flstats.pl

📁 一个用在mips体系结构中的操作系统
💻 PL
📖 第 1 页 / 共 5 页
字号:
         $remWriteMergeHist[$i] + $localReadConflictHist[$i] +	 $remReadConflictHist[$i] + $localWriteConflictHist[$i] +	 $remWriteConflictHist[$i];   }   printf(STAT "%-40s %8d\n", "Total Request Latencies above 300:", 	  $numLongReqs);   printf(STAT "%-40s %8d\n", "Dirty Local Get Count:", $dirtyLocalGetCount);   printf(STAT "%-40s %8d\n", "Dirty Local GetX Count:", $dirtyLocalGetXCount);   if ($messages_processed == 0) {      return;   }   $hack = 100;   foreach $handler (keys(%count)) {      $count{$handler} = $count{$handler} . $hack++;      $lines{$count{$handler}} = $handler . ',' . 0;   }   printf(STAT "\n%-28s %5s %7s %14s %7s %10s\n", Handler, Cycles, Count, 	  "Frequency (%)",Path,Occupancy);   printf(STAT "-----------------------------------------------------------------------------\n");   foreach $counts (reverse sort numerically keys(%lines)) {      ($handler, $cycleCount) = split(/,/, $lines{$counts});      chop $counts;      chop $counts;      chop $counts;      # Insert tests for certain handlers.  This info used in the      # read breakdown section      if ($handler eq "PILocalGet") {	 $piLocalGetCount = $counts;      }      if ($handler eq "NILocalPut") {	 $niLocalPutCount = $counts;      }      if ($handler eq "NIRemotePut") {	 $niRemotePutCount = $counts;      }      if ($handler eq "NISharingWriteback") {	 $niSharingWritebackCount = $counts;      }      $path = $latencies{$handler};      if ($path) {         if ($counts != 0) {            $path /= $counts;         }      }      else {         $path = "n/a";      }      $occupancy = $occupancies{$handler};      if ($occupancy) {         if ($counts != 0) {            $occupancy /= $counts;         }      }      else {         $occupancy = "n/a";      }      if ($path eq "n/a") {         printf(STAT "%-30s %5d %8d %8.1lf %11s %8s\n", $handler, $cycleCount, $counts,	   ($counts/$messages_processed)*100.0,$path,$occupancy);      }      else {         printf(STAT "%-30s %5d %8d %8.1lf %11.1lf %8.1lf\n", $handler, $cycleCount, $counts,	   ($counts/$messages_processed)*100.0,$path,$occupancy);      }   }   printf(STAT "\nTotals %38d %8.1lf\n", $totalCount, 100.0);   if ($totalCount != $messages_processed) {      print STAT "WARNING: TotalCount != messages_processed ($messages_processed)\n";   }   printf(STAT "\nHandler Calls Per Miss = %5.2lf\n", $totalCount/	($processor_load_misses + $processor_store_misses +         $processor_upgrade_misses +          $processor_pref_misses + $processor_prefx_misses));}sub DO_DDCACHE_STATS {   if ($ddcache_ops == 0) {      return;   }   printf(STAT "Directory Data Cache Statistics\n\n");   printf(STAT "DD\$ Size = %d KB\n", $ddcache_size >> 10);   printf(STAT "DD\$ Associativity = %d\n", $ddcache_assoc);   printf(STAT "DD\$ Replacement Policy = $ddcache_replacement\n\n");   printf(STAT "Hit Rate  = %5.1lf%%\n", ($ddcache_hits/$ddcache_ops) *      100.0);   printf(STAT "Miss Rate = %5.1lf%%\n\n", ($ddcache_misses/$ddcache_ops) *      100.0);   if (($ddcache_hits + $ddcache_misses) != $ddcache_ops) {      printf(STAT "WARNING: Hits + Misses != Total Ops\n");   }   printf(STAT "%-18s %8s %12s\n", Operation, Count, Percentage);    printf(STAT "-----------------------------------------\n");   printf(STAT "%-18s %8d %9.1lf\n", Read, $ddcache_reads, ($ddcache_reads/	$ddcache_ops) * 100.0);   printf(STAT "\n%18s %8d %9.1lf\n", Hits, $ddcache_read_hits, 	($ddcache_read_hits/$ddcache_reads) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", Misses, $ddcache_read_misses,       ($ddcache_read_misses/$ddcache_reads) * 100.0);   if ($ddcache_read_hits + $ddcache_read_misses != $ddcache_reads) {      printf(STAT "WARNING: Read Hits + Read Misses != Total Reads\n");   }   printf(STAT "\n%-18s %8d %9.1lf\n", Write, $ddcache_writes, 	($ddcache_writes/$ddcache_ops) * 100.0);   printf(STAT "\n%18s %8d %9.1lf\n", Hits, $ddcache_write_hits,      ($ddcache_write_hits/$ddcache_writes) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", Misses, $ddcache_write_misses,      ($ddcache_write_misses/$ddcache_writes) * 100.0);   if ($ddcache_write_hits + $ddcache_write_misses != $ddcache_writes) {      printf(STAT "WARNING: Write Hits + Write Misses != Total Writes\n");   }}sub DO_DICACHE_STATS {   if ($dicache_ops == 0) {      return;   }   printf(STAT "Directory Instruction Cache Statistics\n\n");   printf(STAT "DI\$ Size = %d KB\n", $dicache_size >> 10);   printf(STAT "DI\$ Associativity = %d\n", $dicache_assoc);   printf(STAT "DI\$ Replacement Policy = $dicache_replacement\n\n");   printf(STAT "Hit Rate  = %5.1lf%%\n", ($dicache_hits/$dicache_ops) *      100.0);   printf(STAT "Miss Rate = %5.1lf%%\n\n", ($dicache_misses/$dicache_ops) *      100.0);   if (($dicache_hits + $dicache_misses) != $dicache_ops) {      printf(STAT "WARNING: Hits + Misses != Total Ops\n");   }   printf(STAT "%-18s %8s %12s\n", Operation, Count, Percentage);    printf(STAT "-----------------------------------------\n");   printf(STAT "%-18s %8d %9.1lf\n", Read, $dicache_reads, ($dicache_reads/	$dicache_ops) * 100.0);   printf(STAT "\n%18s %8d %9.1lf\n", Hits, $dicache_read_hits, 	($dicache_read_hits/$dicache_reads) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", Misses, $dicache_read_misses,       ($dicache_read_misses/$dicache_reads) * 100.0);   if ($dicache_read_hits + $dicache_read_misses != $dicache_reads) {      printf(STAT "WARNING: Read Hits + Read Misses != Total Reads\n");   }   printf(STAT "\n%-18s %8d %9.1lf\n", Write, $dicache_writes, 	($dicache_writes/$dicache_ops) * 100.0);}sub DO_SW_QUEUE_STATS {   print STAT "Software Queue Statistics\n\n";   if ($swqueue_final != 0) {      print STAT "WARNING: SW Queue final count ($swqueue_final) is not 0!\n";   }   printf(STAT "SW Queue requests returned to queue = %d\n", $swqueue_retries);   printf(STAT "Requests NAKed because SW Queue count is full = %d\n",      $swqueue_cancels);   }sub DO_BUFFER_STATS {   print STAT "Data Buffer Statistics\n\n";   printf(STAT "%-31s %5d\n", "Highest Data Buffer Used:", $greatest_buffer);   printf(STAT "%-31s %5d\n", "Avg Highest Buffer Used:", $greatest_buffer_sum/	$numProcs);   printf(STAT "%-31s %5d\n", "Avg PI Buffer Wait Latency:", 	  $piBufferWaitLatency_sum/($numProcs*$latencyFactor));   printf(STAT "%-31s %5d\n", "Max PI Buffer Wait Latency:", 	  $piBufferWaitLatency_max/$latencyFactor);   printf(STAT "%-31s %5d\n", "Avg NI Req Buffer Wait Latency:", 	  $niReqBufferWaitLatency_sum/($numProcs * $latencyFactor));   printf(STAT "%-31s %5d\n", "Max NI Req Buffer Wait Latency:", 	  $niReqBufferWaitLatency_max/$latencyFactor);   printf(STAT "%-31s %5d\n", "Avg NI Rep Buffer Wait Latency:", 	  $niRepBufferWaitLatency_sum/($numProcs*$latencyFactor));   printf(STAT "%-31s %5d\n", "Max NI Rep Buffer Wait Latency:", 	  $niRepBufferWaitLatency_max/$latencyFactor);}	sub DO_QUEUE_STATS {   print STAT "Queue Statistics\n\n";   printf(STAT "Maximum PI Input Queue Length = %d, Avg of Max = %d\n", 	  $piInputQueue_max, $piInputQueue_max_sum/$numProcs);   printf(STAT "Maximum NI Input Request Queue Length = %d, Avg of Max = %d\n",	  $niInputReqQueue_max, $niInputReqQueue_max_sum/$numProcs);   printf(STAT "Maximum NI Input Reply Queue Length = %d, Avg of Max = %d\n",      $niInputRepQueue_max, $niInputRepQueue_max_sum/$numProcs);   printf(STAT "Maximum NI Output Request Queue Length = %d, Avg of Max = %d\n", $niOutputReqQueue_max, $niOutputReqQueue_max_sum/$numProcs);   printf(STAT "Maximum NI Output Reply Queue Length = %d, Avg of Max = %d\n",      $niOutputRepQueue_max, $niOutputRepQueue_max_sum/$numProcs);   printf(STAT "\nPI Input Queue Histogram\n");   printf(STAT "%2s %5s %4s %4s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);   printf(STAT "----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      foreach $j (0..0) {	 printf(STAT "%5d ", $piInputQueueHist{$i, $j});      }      foreach $j (1..2) {	 printf(STAT "%4d ", $piInputQueueHist{$i, $j});      }      foreach $j (3..15) {	 printf(STAT "%3d ", $piInputQueueHist{$i, $j});      }      printf(STAT "\n");   }   printf(STAT "\nNI Input Request Queue Histogram\n");   printf(STAT "%2s %5s %4s %4s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);   printf(STAT "----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      foreach $j (0..0) {	 printf(STAT "%5d ", $niInputReqQueueHist{$i, $j});      }      foreach $j (1..2) {	 printf(STAT "%4d ", $niInputReqQueueHist{$i, $j});      }      foreach $j (3..15) {	 printf(STAT "%3d ", $niInputReqQueueHist{$i, $j});      }      printf(STAT "\n");   }   printf(STAT "\nNI Input Reply Queue Histogram\n");   printf(STAT "%2s %5s %4s %4s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);   printf(STAT "----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      foreach $j (0..0) {	 printf(STAT "%5d ", $niInputRepQueueHist{$i, $j});      }      foreach $j (1..2) {	 printf(STAT "%4d ", $niInputRepQueueHist{$i, $j});      }      foreach $j (3..15) {	 printf(STAT "%3d ", $niInputRepQueueHist{$i, $j});      }      printf(STAT "\n");   }   printf(STAT "\nNI Output Request Queue Histogram\n");   printf(STAT "%2s %5s %4s %4s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);   printf(STAT "----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      foreach $j (0..0) {	 printf(STAT "%5d ", $niOutputReqQueueHist{$i, $j});      }      foreach $j (1..2) {	 printf(STAT "%4d ", $niOutputReqQueueHist{$i, $j});      }      foreach $j (3..15) {	 printf(STAT "%3d ", $niOutputReqQueueHist{$i, $j});      }      printf(STAT "\n");   }   printf(STAT "\nNI Output Reply Queue Histogram\n");   printf(STAT "%2s %5s %4s %4s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);   printf(STAT "----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      foreach $j (0..0) {	 printf(STAT "%5d ", $niOutputRepQueueHist{$i, $j});      }      foreach $j (1..2) {	 printf(STAT "%4d ", $niOutputRepQueueHist{$i, $j});      }      foreach $j (3..15) {	 printf(STAT "%3d ", $niOutputRepQueueHist{$i, $j});      }      printf(STAT "\n");   }   printf(STAT "\nRequest Network Queue Histogram\n");   printf(STAT "%2s %4s %4s %4s %4s %4s %4s %4s %4s %4s %4s\n",	  P, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20);   printf(STAT "----------------------------------------------------------\n");   for ($i=0; $i < $numProcs; $i++) {      printf(STAT "p%x ", $i);      for ($j=0; $j < 20; $j +=2) {	 printf(STAT "%4d ", $reqNetworkQueueHist{$i, $j} +		$reqNetworkQueueHist{$i, $j+1});      }      printf(STAT "\n");   }   printf(STAT "\nReply Network Queue Histogram\n");   printf(STAT "%2s %4s %4s %4s %4s %4s %4s %4s %4s %4s %4s\n",	  P, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20);   printf(STAT "----------------------------------------------------------\n");   for ($i=0; $i < $numProcs; $i++) {      printf(STAT "p%x ", $i);      for ($j=0; $j < 20; $j +=2) {	 printf(STAT "%4d ", $repNetworkQueueHist{$i, $j} + 		$repNetworkQueueHist{$i, $j+1});      }      printf(STAT "\n");   }}sub DO_MEMORY_STATS {   if ($total_memory_ops_sum == 0) {      return;   }   printf(STAT "Memory Ops\n\n");   printf(STAT "%-18s %8s %12s\n", Source, Count, Percentage);    printf(STAT "-----------------------------------------\n");   printf(STAT "%-18s %8d %9.1lf\n", "Inbox from PI", $pi_memory_ops,      ($pi_memory_ops/$total_memory_ops_sum) * 100.0);   printf(STAT "%-18s %8d %9.1lf\n", "Inbox from NI", $ni_memory_ops,      ($ni_memory_ops/$total_memory_ops_sum) * 100.0);   printf(STAT "%-18s %8d %9.1lf\n", "DP Handler", $dp_memory_ops,      ($dp_memory_ops/$total_memory_ops_sum) * 100.0);   printf(STAT "%-18s %8d %9.1lf\n", "DD\$ Miss", $ddcache_misses,      ($ddcache_misses/$total_memory_ops_sum) * 100.0);   printf(STAT "%-18s %8d %9.1lf\n", "DD\$ Writeback", $ddcache_writebacks,      ($ddcache_writebacks/$total_memory_ops_sum) * 100.0);   printf(STAT "%-18s %8d %9.1lf\n", "DI\$ Miss", $dicache_misses,      ($dicache_misses/$total_memory_ops_sum) * 100.0);   printf(STAT "\nTotals %20d %9.1lf\n\n", $total_memory_ops_sum, 100.0);   if (($pi_memory_ops + $ni_memory_ops + $dp_memory_ops + $ddcache_misses +      $ddcache_writebacks + $dicache_misses) != $total_memory_ops_sum) {      printf(STAT "\nWARNING: Memory Ops do not add to total\n");   }   printf(STAT "%-18s %8s %12s\n", Operation, Count, Percentage);    printf(STAT "-----------------------------------------\n");   printf(STAT "%-18s %8d %9.1lf\n", "Memory Reads", $memory_reads,      ($memory_reads/$total_memory_ops_sum) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", "Useless Reads", $useless_reads,      ($useless_reads/$memory_reads) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", "Appl Reads", $memory_reads -      $useless_reads - $dir_memory_reads, (($memory_reads - $useless_reads -	 $dir_memory_reads)/$memory_reads) * 100.0);   printf(STAT "%18s %8d %9.1lf\n", "Dir Reads", $dir_memory_reads,      ($dir_memory_reads/$memory_reads) * 100.0);   printf(STAT "\n%-18s %8d %9.1lf\n", "Memory Writes", $memory_writes,      ($memory_writes/$total_memory_ops_sum) * 100.0);   if ($memory_writes != 0) {      printf(STAT "%18s %8d %9.1lf\n", "Appl Writes", $memory_writes -	     $dir_memory_writes, (($memory_writes - $dir_memory_writes)/	     $memory_writes) * 100.0);      printf(STAT "%18s %8d %9.1lf\n", "Dir Writes", $dir_memory_writes,	     ($dir_memory_writes/$memory_writes) * 100.0);   }   else {      printf(STAT "%18s %8d %9.1lf\n", "Appl Writes", 0, 0, 0.0);      printf(STAT "%18s %8d %9.1lf\n", "Dir Writes", 0, 0.0);   }   printf(STAT "Avg Memory Latency: %3d\n", $memLatency_sum/($numProcs *							     $latencyFactor));   printf(STAT "Max Memory Latency: %3d\n", $memLatency_max/$latencyFactor);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -