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

📄 flstats.pl

📁 一个用在mips体系结构中的操作系统
💻 PL
📖 第 1 页 / 共 5 页
字号:
sub DO_PROCESSOR_STATS {   print STAT "Processor Statistics\n\n";   printf(STAT "\n%11s %8s %8s %8s %8s %8s %9s\n", "Busy", 'Pref', "Read", 	  "Write", "Fence", "Synch", "Total");   printf(STAT "-------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      $totalSynchronizationTime[$i] = $barWaitTimeArray[$i] + 	 $lockWaitTimeArray[$i] + $spinLockWaitTimeArray[$i] +	 $pauseWaitTimeArray[$i] + $delayWaitTimeArray[$i] +          $getsubWaitTimeArray[$i] + $waitForWaitTimeArray[$i];      $busy = (($executionTimeSinceReset[$i] - 	      ($processorCacheStallTimeArray[$i] +	      $localReadMissLatencyArray[$i] + $remReadMissLatencyArray[$i] +	      $localReadMergeLatencyArray[$i] + $remReadMergeLatencyArray[$i] +	      $localReadConflictLatencyArray[$i] + 	      $remReadConflictLatencyArray[$i] + $writeStallTimeArray[$i] +	      $syncWaitTimeArray[$i] + $totalSynchronizationTime[$i]))/              $executionTimeSinceReset[$i]) * 100.0;      $busy_sum += $busy;      printf(STAT "p%x %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %10.0lf\n", $i, 	     $busy,	     ($processorCacheStallTimeArray[$i]/$executionTimeSinceReset[$i])	     * 100.0,	     (($localReadMissLatencyArray[$i] + $remReadMissLatencyArray[$i] +	       $localReadMergeLatencyArray[$i] + $remReadMergeLatencyArray[$i]	       + $localReadConflictLatencyArray[$i] + 	       $remReadConflictLatencyArray[$i])/$executionTimeSinceReset[$i])	     * 100.0, 	     ($writeStallTimeArray[$i]/$executionTimeSinceReset[$i]) * 100.0,	     ($syncWaitTimeArray[$i]/	     $executionTimeSinceReset[$i]) * 100.0, 	     ($totalSynchronizationTime[$i]/	     $executionTimeSinceReset[$i]) * 100.0, 	     $executionTimeSinceReset[$i]/$latencyFactor);   }   printf(STAT "\n");   printf(STAT "Avg. Processor Utilization: %4.1lf%%\n", $busy_sum/$numProcs);   printf(STAT "\nPer Processor Invalidation Histogram\n\n");   if ($numProcs <= 16) {      printf(STAT "%2s %5s %5s %4s %3s %3s %3s %3s %3s %3s %3s %3s %2s %2s %2s %2s %2s %3s\n", P, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, "16+");   }   else {      printf(STAT "%2s %5s %5d %4d %3d %3d %3d %3d %3d %3d %3d %3d %2d %2d %2d %2d %2d %3d+\n", P, 0, $numProcs/16, 2*$numProcs/16, 3*$numProcs/16, 4*$numProcs/16, 5*$numProcs/16, 6*$numProcs/16, 7*$numProcs/16, 8*$numProcs/16, 9*$numProcs/16, 10*$numProcs/16, 11*$numProcs/16, 12*$numProcs/16, 13*$numProcs/16, 14*$numProcs/16, 15*$numProcs/16, $numProcs);   }   printf(STAT "-----------------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x ", $i);      $lastbin = 0;      if ($numProcs <= 16) {	 foreach $j (0..1) {	    printf(STAT "%5d ", $invalHist{$i, $j});	    $totalInvals += $invalHist{$i, $j} * $j;	 }	 foreach $j (2..2) {	    printf(STAT "%4d ", $invalHist{$i, $j});	    $totalInvals += $invalHist{$i, $j} * $j;	 }	 foreach $j (3..10) {	    printf(STAT "%3d ", $invalHist{$i, $j});	    $totalInvals += $invalHist{$i, $j} * $j;	 }	 foreach $j (11..19) {	    if ($j < 16) {	       printf(STAT "%2d ", $invalHist{$i, $j});	       $totalInvals += $invalHist{$i, $j} * $j;	    }	    else {	       $lastbin += $invalHist{$i, $j};	    }	 }      }      else {	 foreach $j (0..1) {	    $subtotal = 0;	    $binStart = 4*$j;	    $binEnd = ($numProcs/16) - 1 + (4*$j);	    foreach $k ($binStart..$binEnd) {	       $subtotal += $invalHist{$i, $k};	       $totalInvals += $invalHist{$i, $k} * $k;	    }	    printf(STAT "%5d ", $subtotal);	 }	 foreach $j (2..2) {	    $subtotal = 0;	    $binStart = 4*$j;	    $binEnd = ($numProcs/16) - 1 + (4*$j);	    foreach $k ($binStart..$binEnd) {	       $subtotal += $invalHist{$i, $k};	       $totalInvals += $invalHist{$i, $k} * $k;	    }	    printf(STAT "%4d ", $subtotal);	 }	 foreach $j (3..10) {	    $subtotal = 0;	    $binStart = 4*$j;	    $binEnd = ($numProcs/16) - 1 + (4*$j);	    foreach $k ($binStart..$binEnd) {	       $subtotal += $invalHist{$i, $k};	       $totalInvals += $invalHist{$i, $k} * $k;	    }	    printf(STAT "%3d ", $subtotal);	 }	 foreach $j (11..19) {	    $subtotal = 0;	    $temp = ($numProcs/16) - 1 + (4*$j);	    $binStart = 4*$j;	    $binEnd = ($numProcs/16) - 1 + (4*$j);	    if ($binEnd < $numProcs) {	       foreach $k ($binStart..$binEnd) {		  $subtotal += $invalHist{$i, $k};		  $totalInvals += $invalHist{$i, $k} * $k;	       }	       printf(STAT "%2d ", $subtotal);	    }	    else {	       foreach $k ($binStart..$binEnd) {		  $lastbin += $invalHist{$i, $k};		  $totalInvals += $invalHist{$i, $k} * $k;	       }	    }	 }      }      printf(STAT "%2d ", $lastbin);      printf(STAT "\n");   }   printf(STAT "Total Invalidations = %d\n", $totalInvals);      printf(STAT "\n%11s %8s %8s %8s %8s %8s %8s\n", "Barriers", "Locks", 	  "Spin", "GetSub", "Delay", "Pause", "WaitFor");   printf(STAT "-----------------------------------------------------------------\n");   foreach $i (0..$numProcs-1) {      if ($totalSynchronizationTime[$i] == 0) { 	 next;      }      printf(STAT "p%x %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n", $i,	     ($barWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($lockWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($spinLockWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($getsubWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($delayWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($pauseWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0,	     ($waitForWaitTimeArray[$i]/$totalSynchronizationTime[$i])*100.0);   }   printf(STAT "\nHere merges are included in all colums\n");   printf(STAT "%14s %6s\n", "Insts", "CPI");   printf(STAT "--------------------------\n");   foreach $i (0..$numProcs-1) {      printf(STAT "p%x %12.0lf %7.2lf\n", $i, $numInstructions[$i], $CPI[$i]);   }   printf(STAT "\n");   if ($localReadMisses + $remReadMisses + $localReadConflicts +        $remReadConflicts != $processor_load_misses) {      printf(STAT "WARNING: localReadMisses + remReadMisses != total\n");      printf(STAT "Total misses = %d, local = %d, remote = %d, merges = %d\n",	     $processor_load_misses, $localReadMisses, $remReadMisses,	     $localReadMerges + $remReadMerges);   }   if ($localWriteMisses + $remWriteMisses + $localWriteConflicts +        $remWriteConflicts !=        ($processor_store_misses + $processor_upgrade_misses)) {      printf(STAT "WARNING: localWriteMisses + remWriteMisses != total\n");      printf(STAT "Total misses = %d, local = %d, remote = %d, merges = %d\n",	     $processor_store_misses + $processor_upgrade_misses, 	     $localWriteMisses, $remWriteMisses, $localWriteMerges +	     $remWriteMerges);   }   printf(STAT "Total Read Miss Stall Time = %d\n", ($localReadMissLatency +	  $remReadMissLatency)/$latencyFactor);   printf(STAT "Local Read Miss Stall Time = %d\n", $localReadMissLatency/	  $latencyFactor);   printf(STAT "Remote Read Miss Stall Time = %d\n", $remReadMissLatency/	  $latencyFactor);   if ($processor_load_misses != 0) {      printf(STAT "\nAvg Read Miss Latency = %d\n", 	  ($localReadMissLatency + $remReadMissLatency)/	  ($processor_load_misses * $latencyFactor));   }   else {      printf(STAT "Avg Read Miss Latency = 0\n");   }   if ($localReadMisses == 0) {      printf(STAT "Avg Local ReadMissLatency = 0\n");   }   else {      printf(STAT "Avg Local Read Miss Latency = %d\n",	     $localReadMissLatency/($localReadMisses * $latencyFactor));   }   if ($remReadMisses == 0) {      printf(STAT "Avg Remote Read Miss Latency = 0\n");   }   else {      printf(STAT "Avg Remote Read Miss Latency = %d\n",	     $remReadMissLatency/($remReadMisses * $latencyFactor));   }   if ($processor_load_misses != 0) {      printf(STAT "%-25s %.2lf\n", "Avg Read Bus ID Wait Time:", 	     $readBusIDWaitTime/($processor_load_misses * $latencyFactor));   }   else {      printf(STAT "%-25s %.2lf\n", "Avg Read Bus ID Wait Time:", 0.0);   }   if (($processor_store_misses + $processor_upgrade_misses) > 0) {      printf(STAT "%-25s %.2lf\n", "Avg Write Bus ID Wait Time:", 	  $writeBusIDWaitTime/(($processor_store_misses + 				$processor_upgrade_misses) * $latencyFactor));   }   else {      printf(STAT "%-25s %.2lf\n", "Avg Write Bus ID Wait Time:", 0);    }   printf(STAT "Avg SysADBus Occupancy = %4.1lf%%\n", $sysADBusOccupancy_sum/	  $numProcs);   printf(STAT "Max SysADBus Occupancy = %4.1lf%%\n", $sysADBusOccupancy_max);   if ($totalSysADReadRequests != 0) {      printf(STAT "\nAvg Read-SysADBus Stall Time = %.2lf\n",	  $readSysADStallTime/($totalSysADReadRequests * $latencyFactor));   }   else {      printf(STAT "\nAvg Read-SysADBus Stall Time = %.2lf\n", 0.0);   }   if ($totalSysADWriteRequests != 0) {      printf(STAT "Avg Write-SysADBus Stall Time = %.2lf\n",	  $writeSysADStallTime/($totalSysADWriteRequests * $latencyFactor));   }   else {      printf(STAT "Avg Write-SysADBus Stall Time = %.2lf\n", 0.0);   }   if ($totalSysADReplyRequests != 0) {      printf(STAT "\nAvg Reply-SysADBus Stall Time = %.2lf\n",	  $replySysADStallTime/($totalSysADReplyRequests * $latencyFactor));   }   else {      printf(STAT "\nAvg Reply-SysADBus Stall Time = %.2lf\n", 0.0);   }   if ($totalSysADPIRequests != 0) {      printf(STAT "Avg PI-SysAD Stall Time = %.2lf\n", 	  $piSysADStallTime/($totalSysADPIRequests * $latencyFactor));   }   else {      printf(STAT "Avg PI-SysAD Stall Time = %.2lf\n", 0.0);   }   if ($HISTMODE) {      printf(STAT "\nHistogram of Read misses\n");      if ($readHistMax != 0) {	 foreach $i (0 .. $#localReadHist) {	    printf(STAT "Bin %3d %9d %-22s\n", $i * 10,	     $localReadHist[$i] + $remReadHist[$i], "*"x((($localReadHist[$i]+	     $remReadHist[$i])/$readHistMax)*30.0));	 }      }   }#   printf(STAT "\nHistogram of Remote Read misses\n");#   foreach $i (0 .. $#remReadHist) {#      printf(STAT "Bin %3d %9d\n", $i * 10, $remReadHist[$i]);#   }      if ($localReadMerges + $remReadMerges == 0) {      printf(STAT "No Read Merges\n");   }   else {      printf(STAT "Total Read Merge Stall Time = %d\n", 	     ($localReadMergeLatency +	      $remReadMergeLatency)/$latencyFactor);      printf(STAT "Local Read Merge Stall Time = %d\n", $localReadMergeLatency/	     $latencyFactor);      printf(STAT "Remote Read Merge Stall Time = %d\n", $remReadMergeLatency/	     $latencyFactor);      printf(STAT "\nAvg Read Merge Latency = %d\n", 	  ($localReadMergeLatency + $remReadMergeLatency)/	  (($localReadMerges + $remReadMerges) * $latencyFactor));      if ($localReadMerges == 0) {	 printf(STAT "Avg Local ReadMergeLatency = 0\n");      }      else {	 printf(STAT "Avg Local Read Merge Latency = %d\n",	     $localReadMergeLatency/($localReadMerges * $latencyFactor));      }      if ($remReadMerges == 0) {	 printf(STAT "Avg Remote Read Merge Latency = 0\n");      }      else {	 printf(STAT "Avg Remote Read Merge Latency = %d\n",		$remReadMergeLatency/($remReadMerges * $latencyFactor));      }      if ($HISTMODE) {	 printf(STAT "\nHistogram of Read merges\n");	 foreach $i (0 .. $#localReadMergeHist) {	    printf(STAT "Bin %3d %9d %-22s\n", $i * 10,	     $localReadMergeHist[$i] + $remReadMergeHist[$i], 	     "*"x((($localReadMergeHist[$i]+	     $remReadMergeHist[$i])/$readMergeHistMax)*30.0));	 }      }   }   if ($localReadConflicts + $remReadConflicts == 0) {      printf(STAT "\nNo Read Conflicts\n");   }   else {      printf(STAT "Total Read Conflict Stall Time = %d\n", 	     ($localReadConflictLatency +	      $remReadConflictLatency)/$latencyFactor);      printf(STAT "Local Read Conflict Stall Time = %d\n",	     $localReadConflictLatency/$latencyFactor);      printf(STAT "Remote Read Conflict Stall Time = %d\n", 	     $remReadConflictLatency/$latencyFactor);      printf(STAT "\nAvg Read Conflict Latency = %d\n", 	  ($localReadConflictLatency + $remReadConflictLatency)/	  (($localReadConflicts + $remReadConflicts) * $latencyFactor));      if ($localReadConflicts == 0) {	 printf(STAT "Avg Local ReadConflictLatency = 0\n");      }      else {	 printf(STAT "Avg Local Read Conflict Latency = %d\n",	     $localReadConflictLatency/($localReadConflicts * $latencyFactor));      }      if ($remReadConflicts == 0) {	 printf(STAT "Avg Remote Read Conflict Latency = 0\n");      }      else {	 printf(STAT "Avg Remote Read Conflict Latency = %d\n",		$remReadConflictLatency/($remReadConflicts * $latencyFactor));      }      if ($HISTMODE) {	 printf(STAT "\nHistogram of Read conflicts\n");	 foreach $i (0 .. $#localReadConflictHist) {	    printf(STAT "Bin %3d %9d %-22s\n", $i * 10,	     $localReadConflictHist[$i] + $remReadConflictHist[$i], 	     "*"x((($localReadConflictHist[$i]+	     $remReadConflictHist[$i])/$readConflictHistMax)*30.0));	 }    

⌨️ 快捷键说明

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