kstats

来自「一个用在mips体系结构中的操作系统」· 代码 · 共 868 行 · 第 1/2 页

TXT
868
字号
        foreach $i (0 .. $#subcategories) {            $sstring = "$s:" . $subcategories[$i];            if (defined($comp->{$sstring})) {                $subcatval[$i] = $comp->{$sstring}{"lattotal"};            } else {                $subcatval[$i] = 0;            }            $totsubcats += $subcatval[$i];        }        $comptotal = $comp->{"$s:ROOT"}{'comptotal'};        $lattotal = $comp->{"$s:ROOT"}{'lattotal'};        $exc = $lattotal - ($comptotal + $totsubcats);                $n = $comp->{"$s:ROOT"}{'n'};        if ($n == 0) {            printf "%-16s no entries\n", $s;            next;        }                if (($lattotal / ($n * $clock)) > 2) {            printf "%-20s %9.0f %9.0f %9.0f   ",             $s,            $lattotal / ($n * $clock),            $comp->{"$s:ROOT"}{'latmin'} / $clock,            $comp->{"$s:ROOT"}{'latmax'} / $clock;        } else {            printf "%-20s  %8dc %8dc %8dc  ",             $s,            $lattotal / $n,            $comp->{"$s:ROOT"}{'latmin'},            $comp->{"$s:ROOT"}{'latmax'};        }        PrintFraction2($comptotal, $lattotal);        PrintFraction2($exc, $lattotal);        foreach $i (0 .. $#subcategories) {            PrintFraction2($subcatval[$i], $lattotal);        }        print "\n";    }}###### TABLE 3###### table 3 is memory system behavior of kernel services sorted by cpi###if (!defined(%showTable) || defined($showTable{"3"})) {    print "\n";    print "+-----------------------------------------+\n";    print "| 3: memory system performance by service |\n";    print "+-----------------------------------------+\n\n";        printf "%-16s %7s %7s %7s   %9s %9s %9s\n",    "service", "MCPI", "dMCPI", "iMCPI",    "cold", "cap", "inv";        print "------------------------------------------------------------------------\n";        $n = 0;        foreach $s (@services) {        $n++;                if (!printService($s, $n)) {            next;        }                printf "%-16s %7.2f %7.2f %7.2f   %9d %9d %9d\n", $s,        $comp->{"$s:ROOT"}{"dMCPI"} + $comp->{"$s:ROOT"}{"iMCPI"},        $comp->{"$s:ROOT"}{"dMCPI"},        $comp->{"$s:ROOT"}{"iMCPI"},        $comp->{"$s:ROOT"}{"read.ice"} +  $comp->{"$s:ROOT"}{"read.cold"} +            $comp->{"$s:ROOT"}{"write.ice"} +  $comp->{"$s:ROOT"}{"write.cold"} +            $comp->{"$s:ROOT"}{"instr.ice"} +  $comp->{"$s:ROOT"}{"instr.cold"},        $comp->{"$s:ROOT"}{"read.cap"} +            $comp->{"$s:ROOT"}{"write.cap"} + $comp->{"$s:ROOT"}{"instr.cap"},        $comp->{"$s:ROOT"}{"read.inv"} +  $comp->{"$s:ROOT"}{"read.capinv"} +            $comp->{"$s:ROOT"}{"write.inv"} +  $comp->{"$s:ROOT"}{"write.capinv"} +            $comp->{"$s:ROOT"}{"instr.inv"} +  $comp->{"$s:ROOT"}{"instr.capinv"};    }}print "\n";######## subroutines####sub bycomp {    my($totcompa, $totcompb, $sync);    $sync = (defined($comp->{"$a:sync"}))         ? $comp->{"$a:sync"}{"comptotal"} : 0;    $totcompa = $comp->{"$a:ROOT"}{"comptotal"} + $sync;    $sync = (defined($comp->{"$b:sync"}))         ? $comp->{"$b:sync"}{"comptotal"} : 0;    $totcompb = $comp->{"$b:ROOT"}{"comptotal"} + $sync;    if ($hive) {        $fastRPC = (defined($comp->{"$a:fastRPC"}))             ? $comp->{"$a:fastRPC"}{"comptotal"} : 0;        $totcompa += $fastRPC;        $fastRPC = (defined($comp->{"$b:fastRPC"})) ?             $comp->{"$b:fastRPC"}{"comptotal"} : 0;        $totcompb += $fastRPC;    }            $totcompb <=> $totcompa;}sub printService {    my($serviceName, $serviceNum) = @_;    if (($numServices != -1) && defined(%showService)) {        if (($serviceNum > $numServices) && !defined($showService{$serviceName})) {            return 0;        }            } elsif (($numServices != -1) && ($serviceNum > $numServices)) {        return 0;            } elsif (defined(%showService) && !defined($showService{$serviceName})) {        return 0;    }    return 1;}###### tables of constants###sub SetupConstants {    @kernel_states = (                      # pseudo processes                      "bootproc",                      "idleproc",                      "startup",                      "runqproc",                      # kernel processes                      "vhand",                      "bdflush",                      "pdflush",                      "sched",                      # Hive kernel processes                      "dspatch",                      "PING",                      "LSET",                      "RECV",                      "RBOT",                      "BALANCE",                      "hrpcServer",                      # named exception entry points                      # (numbered done in loop below)                      "utlb",                      "pfault",                      "vfault",                      "COW_fault",                      "demand_zero",                      # Hive named exceptions                      "rem_pfault",                      "rem_vfault",                      "rem_COW_fault",                      # Named interrupt entry points                      "intrdisp",                      "timein",                      "netintr",                      "simscsi_intr",                      "if_etintr",                      "du_poll",                      "level4_intr",                      "clock",                      "cpuintr",                      "ackkgclock",                      "buserror_intr",                      # Hive named interrupts                      "hrpcRequestInterrupt",                      # Process creation entry point                      "fork"                      );    $syscallName[1000] = "syscall";    $syscallName[1001] = "exit";    $syscallName[1002] = "fork";    $syscallName[1003] = "read";    $syscallName[1004] = "write";    $syscallName[1005] = "open";    $syscallName[1006] = "close";    $syscallName[1007] = "fork";    $syscallName[1008] = "creat";    $syscallName[1009] = "link";    $syscallName[1010] = "unlink";    $syscallName[1011] = "execv";    $syscallName[1012] = "chdir";    $syscallName[1013] = "time";    $syscallName[1014] = "NULL";    $syscallName[1015] = "chmod";    $syscallName[1016] = "chown";    $syscallName[1017] = "brk";    $syscallName[1018] = "stat";    $syscallName[1019] = "lseek";    $syscallName[1020] = "getpid";    $syscallName[1021] = "mount";    $syscallName[1022] = "umount";    $syscallName[1023] = "setuid";    $syscallName[1024] = "getuid";    $syscallName[1025] = "stime";    $syscallName[1026] = "ptrace";    $syscallName[1027] = "alarm";    $syscallName[1028] = "NULL";    $syscallName[1029] = "pause";    $syscallName[1030] = "utime";    $syscallName[1031] = "NULL";    $syscallName[1032] = "NULL";    $syscallName[1033] = "access";    $syscallName[1034] = "nice";    $syscallName[1035] = "statfs";    $syscallName[1036] = "sync";    $syscallName[1037] = "kill";    $syscallName[1038] = "fstatfs";    $syscallName[1039] = "setpgrp";    $syscallName[1040] = "syssgi";    $syscallName[1041] = "dup";    $syscallName[1042] = "pipe";    $syscallName[1043] = "times";    $syscallName[1044] = "profil";    $syscallName[1045] = "plock";    $syscallName[1046] = "setgid";    $syscallName[1047] = "getgid";    $syscallName[1048] = "NULL";    $syscallName[1049] = "msgsys";    $syscallName[1050] = "sysmips";    $syscallName[1051] = "acct";    $syscallName[1052] = "shmsys";    $syscallName[1053] = "semsys";    $syscallName[1054] = "ioctl";    $syscallName[1055] = "uadmin";    $syscallName[1056] = "sysmp";    $syscallName[1057] = "utssys";    $syscallName[1058] = "NULL";    $syscallName[1059] = "execve";    $syscallName[1060] = "umask";    $syscallName[1061] = "chroot";    $syscallName[1062] = "fcntl";    $syscallName[1063] = "ulimit";    $syscallName[1064] = "NULL";    $syscallName[1065] = "NULL";    $syscallName[1066] = "NULL";    $syscallName[1067] = "NULL";    $syscallName[1068] = "NULL";    $syscallName[1069] = "NULL";    $syscallName[1070] = "NULL";    $syscallName[1071] = "NULL";    $syscallName[1072] = "NULL";    $syscallName[1073] = "NULL";    $syscallName[1074] = "NULL";    $syscallName[1075] = "NULL";    $syscallName[1076] = "NULL";    $syscallName[1077] = "NULL";    $syscallName[1078] = "NULL";    $syscallName[1079] = "rmdir";    $syscallName[1080] = "mkdir";    $syscallName[1081] = "getdents";    $syscallName[1082] = "sginap";    $syscallName[1083] = "sgikopt";    $syscallName[1084] = "sysfs";    $syscallName[1085] = "getmsg";    $syscallName[1086] = "putmsg";    $syscallName[1087] = "poll";    $syscallName[1088] = "sigreturn";    $syscallName[1089] = "accept";    $syscallName[1090] = "bind";    $syscallName[1091] = "connect";    $syscallName[1092] = "gethostid";    $syscallName[1093] = "getpeername";    $syscallName[1094] = "getsockname";    $syscallName[1095] = "getsockopt";    $syscallName[1096] = "listen";    $syscallName[1097] = "recv";    $syscallName[1098] = "recvfrom";    $syscallName[1099] = "recvmsg";    $syscallName[1100] = "select";    $syscallName[1101] = "end";    $syscallName[1102] = "sendmsg";    $syscallName[1103] = "sendto";    $syscallName[1104] = "sethostid";    $syscallName[1105] = "setsockopt";    $syscallName[1106] = "shutdown";    $syscallName[1107] = "socket";    $syscallName[1108] = "gethostname";    $syscallName[1109] = "sethostname";    $syscallName[1110] = "getdomainname";    $syscallName[1111] = "setdomainname";    $syscallName[1112] = "truncate";    $syscallName[1113] = "ftruncate";    $syscallName[1114] = "rename";    $syscallName[1115] = "symlink";    $syscallName[1116] = "readlink";    $syscallName[1117] = "NULL";    $syscallName[1118] = "NULL";    $syscallName[1119] = "nfssvc";    $syscallName[1120] = "getfh";    $syscallName[1121] = "async";    $syscallName[1122] = "exportfs";    $syscallName[1123] = "setregid";    $syscallName[1124] = "setreuid";    $syscallName[1125] = "getitimer";    $syscallName[1126] = "setitimer";    $syscallName[1127] = "adjtime";    $syscallName[1128] = "BSD";    $syscallName[1129] = "sproc";    $syscallName[1130] = "prctl";    $syscallName[1131] = "procblk";    $syscallName[1132] = "sprocsp";    $syscallName[1133] = "NULL";    $syscallName[1134] = "mmap";    $syscallName[1135] = "munmap";    $syscallName[1136] = "mprotect";    $syscallName[1137] = "msync";    $syscallName[1138] = "madvise";    $syscallName[1139] = "pagelock";    $syscallName[1140] = "getpagesize";    $syscallName[1141] = "quotactl";    $syscallName[1142] = "NULL";    $syscallName[1143] = "BSDgetpgrp";    $syscallName[1144] = "BSDsetpgrp";    $syscallName[1145] = "vhangup";    $syscallName[1146] = "fsync";    $syscallName[1147] = "fchdir";    $syscallName[1148] = "getrlimit";    $syscallName[1149] = "setrlimit";    $syscallName[1150] = "cacheflush";    $syscallName[1151] = "cachectl";    $syscallName[1152] = "fchown";    $syscallName[1153] = "fchmod";    $syscallName[1154] = "NULL";    $syscallName[1155] = "socketpair";    $syscallName[1156] = "sysinfo";    $syscallName[1157] = "nuname";    $syscallName[1158] = "xstat";    $syscallName[1159] = "lxstat";    $syscallName[1160] = "fxstat";    $syscallName[1161] = "xmknod";    $syscallName[1162] = "ksigaction";    $syscallName[1163] = "sigpending";    $syscallName[1164] = "sigprocmask";    $syscallName[1165] = "sigsuspend";    $syscallName[1166] = "sigpoll";    $syscallName[1167] = "swapctl";    $syscallName[1168] = "getcontext";    $syscallName[1169] = "setcontext";    $syscallName[1170] = "waitsys";    $syscallName[1171] = "sigstack";    $syscallName[1172] = "sigaltstack";    $syscallName[1173] = "sigsendset";    $syscallName[1174] = "statvfs";    $syscallName[1175] = "fstatvfs";    $syscallName[1176] = "getpmsg";    $syscallName[1177] = "putpmsg";    $syscallName[1178] = "lchown";    $syscallName[1179] = "priocntl";    $syscallName[1180] = "ksigqueue";    $excName[0] = "ERROR";    $excName[1] = "tlb_mod";    $excName[2] = "tlb_miss";    $excName[3] = "tlb_miss";    $excName[4] = "unaligned";    $excName[5] = "unaligned";    $excName[6] = "bus_error";    $excName[7] = "bus_error";    $excName[8] = "ERROR";    $excName[9] = "breakpoint";    $excName[10] = "reserved_inst";    $excName[11] = "cop_unusable";    if ($hive) {        $fmethodName[1] = "hmf_qrpc_invoc";        $fmethodName[2] = "hmf_qrpc_result";        $fmethodName[4] = "hmf_child_status";        $fmethodName[5] = "hmf_child_demise";        $fmethodName[6] = "hmf_child_group";        $fmethodName[7] = "hmf_reparent_child";        $fmethodName[8] = "hmf_joinpg";        $fmethodName[9] = "hmf_leavepg";        $fmethodName[10] = "hmf_pgmembers";        $fmethodName[11] = "hmf_getpgrp";        $fmethodName[12] = "hmf_join_sess";        $fmethodName[15] = "hmf_hvm_validate";        $fmethodName[16] = "hmf_hvm_release";        $fmethodName[17] = "hmf_hvm_loan";        $fmethodName[18] = "hmf_hvm_free";        $fmethodName[19] = "hmf_hvm_access";        $fmethodName[20] = "hmf_hvm_blockloan	";        $fmethodName[26] = "hmf_crash_cell";        $fmethodName[27] = "hmf_crash_cell_in_rpc";        $fmethodName[28] = "hmf_barrier";        $fmethodName[29] = "hmf_ping";        $fmethodName[30] = "hmf_flood";        $fmethodName[31] = "hmf_test_stub";        $qmethodName[1] = "hmq_psignal_hive";        $qmethodName[2] = "hmq_sigsendproc_full";        $qmethodName[3] = "hmq_set_pgrp_sess";        $qmethodName[4] = "hmq_leave_sess_full";        $qmethodName[8] = "hmq_swapin";        $qmethodName[9] = "hmq_anon_free";        $qmethodName[10] = "hmq_reserve_child";        $qmethodName[11] = "hmq_init_child";        $qmethodName[12] = "hmq_run_child";        $qmethodName[13] = "hmq_abort_remfork";        $qmethodName[32] = "hmq_cell_nfs_server";        $qmethodName[60] = "hmq_crash_cell";        $qmethodName[61] = "hmq_queued_test_stub";        $qmethodName[62] = "hmq__cantq__";        $qmethodName[63] = "hmq__piggy__";    }}

⌨️ 快捷键说明

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