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

📄 busbw.prl

📁 一个用在mips体系结构中的操作系统
💻 PRL
字号:
#!/usr/local/bin/perl5 -w## Copyright (C) 1996-1998 by the Board of Trustees#    of Leland Stanford Junior University.# # This file is part of the SimOS distribution. # See LICENSE file for terms of the license. #$inputFile = shift;if (!defined($inputFile)) {    $inputFile = "cpu.log";}if (0) {     @fields = ('DUMMY', 'MEM',               'COUNT_IGETS', 'COUNT_LLGETS', 'COUNT_DMAGETS', 'COUNT_DGETS',                'COUNT_DMAGETXS', 'COUNT_GETXS', 'COUNT_SCUPGRADES', 'COUNT_UPGRADES',               'COUNT_WRITEBACKS', 'COUNT_REPLHINTS',               'COUNT_UNCACHEDWRITES', 'COUNT_UNCACHEDACCWRITES', 'COUNT_UNCACHEDREADS',               'COUNT_INVALORDNGRADESENT',               'COUNT_NAKS',               'COUNT_REMOTEDIRTY',               'COUNT_EXCLUSIVEONSHARED',               'COUNT_MEMORYACCESS',               'COUNT_DRAMBUSY');        $i = 0;    foreach $field (@fields) {        $pos{$field} =  $i++;    }    }open(LOG,$inputFile);for $i (0..16) {     for $j (0..30) {        $prevCommon[$i][$j] = 0;        $prevBusUma[$i][$j] = 0;        $sumBusUma[$j] = 0;        $sumCommon[$j]  = 0;    }}    sub PrintRes {    #    # figure out bandwidth    #    $count{'get'} = ($sumCommon[$posCommon{'IGETS'}] +                      $sumCommon[$posCommon{'DGETS'}] +                      $sumCommon[$posCommon{'GETXS'}] +                     $sumCommon[$posCommon{'LLGETS'}] +                     $sumCommon[$posCommon{'DMAGETS'}] +                     $sumCommon[$posCommon{'DMAGETXS'}]);        $count{'victimhits'} = $sumBusUma[$posBusUma{'GET_WBBUF'}];        $count{'wb'}  = $sumCommon[$posCommon{'WRITEBACKS'}];    $count{'upg'} = ($sumCommon[$posCommon{'UPGRADES'}] +                     $sumCommon[$posCommon{'SCUPGRADES'}] -                     $sumBusUma[$posBusUma{'UPG_WBBUF'}]);    $count{'merges'} = $sumBusUma[$posBusUma{'MERGES'}];        $count{'memAccess'} = ($sumCommon[$posCommon{'MEMORYACCESS'}]);        $count{'data'} = ($count{'get'}-$count{'merges'} - $count{'victimhits'});    $count{'busData'} = $sumBusUma[$posBusUma{'BUS_GETRQST'}] +        $sumBusUma[$posBusUma{'BUS_GETREPLY'}];    $count{'busWB'}   = $sumBusUma[$posBusUma{'BUS_WB'}];    $count{'busUPG'}   = $sumBusUma[$posBusUma{'BUS_UPG'}];    $count{'busIdle'} = $sumBusUma[$posBusUma{'BUS_IDLE'}];    $count{'busDiff'} = (4*1024*1024) -        ($count{'busData'} +  $count{'busWB'} +          $count{'busUPG'} + $count{'busIdle'});    ###    ### now, some normalization. Assume 4*1024*1024 cycles    ### between calls    ###        $occup{'data'} = ($count{'data'}) * 2 *        ($occupancy{'arb'} + $occupancy{'trans'});    $occup{'wb'} = $count{'wb'} * 	($occupancy{'arb'} + $occupancy{'trans'});    $occup{'upg'} = $count{'upg'} * 	($occupancy{'arb'} + $occupancy{'trans'});        $occup{'total'} =  $occup{'data'} +$occup{'wb'}+$occup{'upg'};        foreach $a ('busData','busWB','busUPG','busDiff','busIdle') {         printf("%s=%6.1f\%\t",  $a, 100.0 *                $count{$a} / (4*1024*1024));    }    $time = 4* 1024 * 1024 / $config{'CPU.Clock'};    $norm = $config{'CACHE.2Level.L2Line'} / $time;    printf("   |  GET %6.0f MB/s  WB %6.0f MB/s  Merges=%6.0f\% \n",            $norm * $count{'data'},            $norm * $count{'wb'},           ($count{'data'}? 100 * $count{'merges'} / $count{'data'}:0));}while(<LOG>) {     if (/MACHINE (\S+)\t(\S+)/) {         $config{$1} = $2;    }    if (/PARAM (\S+) (\S+)/) {        print "XXX config $1 : $2 \n";        $config{$1} = $2;    }    if (/MEMFields/) {         print "MEMFields found \n";        @arr = split;        for $i (1..$#arr) {            $posCommon{$arr[$i]} = $i+1;        }    }    if (/MEMBUSUMAFields/) {         print "MEMBUSUMA found \n";        @arr = split;        for $i (1..$#arr) {            $posBusUma{$arr[$i]} = $i+1;        }    }    if (/MEMSYS: BusUma - arbitrate: (\d+), transfer: (\d+), memory: (\d+)/){         $occupancy{'arb'} = $1;        $occupancy{'trans'} = $2;        $occupancy{'mem'} = $3;     #   print "YYY $1 $2 $3 \n";    }    if (/^MEM /) {         @arr = split;        for $i (2..$#arr) {            $sumCommon[$i] +=  $arr[$i] - $prevCommon[$arr[1]][$i];            $prevCommon[$arr[1]][$i] = $arr[$i];        }    }    if (/^MEMBUSUMA /) {             @arr = split;        for $i (2..$#arr) {            $sumBusUma[$i] +=  $arr[$i] - $prevBusUma[$arr[1]][$i];            $prevBusUma[$arr[1]][$i] = $arr[$i];        }        if ($arr[1]==$config{'MEMSYS.BusUma.NumMemories'}-1) {             PrintRes();            for $i (0..30) {                $sumCommon[$i] = 0;                $sumBusUma[$i] = 0;            }        }            }}

⌨️ 快捷键说明

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