Whamcloud - gitweb
e3e21d6336308bd3cb10742207245b2ead0ebabe
[fs/lustre-release.git] / lustre / utils / llanalyze
1 #!/usr/bin/perl
2
3 use Getopt::Long;
4 GetOptions("pid=i" => \$pid, 
5            "trace!" => \$trace, 
6            "nodlm!" => \$nodlm,
7            "nonet!" => \$nonet);
8
9 print "pid: $pid, nodlm $nodlm nonet $nonet trace $trace\n";
10
11 $subsys->{UNDEFINED} = 0;
12 $subsys->{MDC} = 1;
13 $subsys->{MDS} = 2;
14 $subsys->{OSC} = 3;
15 $subsys->{OST} = 4;
16 $subsys->{CLASS} = 5;
17 $subsys->{OBDFS} = 6;
18 $subsys->{LLITE} = 7;
19 $subsys->{RPC} = 8;
20 $subsys->{EXT2OBD} = 9;
21 $subsys->{PORTALS} = 10;
22 $subsys->{SOCKNAL} = 11;
23 $subsys->{QSWNAL} = 12;
24 $subsys->{PINGER} = 13;
25 $subsys->{FILTER} = 14;
26 $subsys->{TRACE} = 15; # obdtrace, not to be confused with D_TRACE */
27 $subsys->{ECHO} = 16;
28 $subsys->{LDLM} = 17;
29 $subsys->{LOV} = 18;
30 $subsys->{GMNAL} = 19;
31 $subsys->{PTLROUTER} = 20;
32
33
34 $masks->{TRACE} = 1 << 0; # /* ENTRY/EXIT markers */
35 $masks->{INODE} = 1 << 1; #
36 $masks->{SUPER} = 1 << 2; #
37 $masks->{EXT2} = 1 << 3; # /* anything from ext2_debug */
38 $masks->{MALLOC} = 1 << 4; # /* print malloc, free information */
39 $masks->{CACHE} = 1 << 5; # /* cache-related items */
40 $masks->{INFO} = 1 << 6; # /* general information */
41 $masks->{IOCTL} = 1 << 7; # /* ioctl related information */
42 $masks->{BLOCKS} = 1 << 8; # /* ext2 block allocation */
43 $masks->{NET} = 1 << 9; # /* network communications */
44 $masks->{WARNING} = 1 << 10; #
45 $masks->{BUFFS} = 1 << 11; #
46 $masks->{OTHER} = 1 << 12; #
47 $masks->{DENTRY} = 1 << 13; #
48 $masks->{PORTALS} = 1 << 14; # /* ENTRY/EXIT markers */
49 $masks->{PAGE} = 1 << 15; # /* bulk page handling */
50 $masks->{DLMTRACE} = 1 << 16; #
51 $masks->{ERROR} = 1 << 17; # /* CERROR} = ...) == CDEBUG} = D_ERROR, ...) */
52 $masks->{EMERG} = 1 << 18; # /* CEMERG} = ...) == CDEBUG} = D_EMERG, ...) */
53 $masks->{HA} = 1 << 19; # /* recovery and failover */
54
55
56
57 sub extractpid
58 {
59     $_ = shift;
60 #    print "$_\n";
61     /l. [0-9]* (.*)\):/;
62     return $1;
63 }
64
65 sub entering
66 {
67     $_ = shift;
68     $entering = /Process entered/;
69 }
70
71 sub leaving
72 {
73     $_ = shift;
74     $entering = /Process leaving/;
75 }
76
77 sub getsubsys
78 {
79     my ($subsys, $mask) = split ":";
80     return hex($subsys);
81 }
82
83 sub getmask
84 {
85     my ($subsys, $mask) = split ":";
86     return hex($mask);
87 }
88
89 while (<STDIN>) {
90     $linepid = extractpid($_);
91     $linemask = getmask($_);
92     $linesubsys = getsubsys($_);
93
94 #    printf "---> mask %x subsys %x\n", $linemask, $linesubsys;
95
96     if (leaving($_)) {
97         chop $prefix->{$linepid};
98         chop $prefix->{$linepid};
99     }
100     if ( !$pid || $linepid == $pid) {
101         next if ($trace && $linemask != $masks->{TRACE});
102         next if ($nodlm && 
103                  (  $linesubsys == $subsys->{LDLM}));
104         next if ($nonet && 
105                  (  $linesubsys == $subsys->{RPC} ||
106                     $linesubsys == $subsys->{NET} ||
107                     $linesubsys == $subsys->{PORTALS} ||
108                     $linesubsys == $subsys->{SOCKNAL} ||
109                     $linesubsys == $subsys->{QSWNAL} ||
110                     $linesubsys == $subsys->{GMNAL}));
111
112 #        printf "sub/mask: %s - %s\n", getsubsys($_), getmask($_);
113
114         printf "%s%s", $prefix->{$linepid}, $_;
115         last if $count++ > 100;
116     }
117     if (entering($_)) {
118         $prefix->{$linepid} .= '  ';
119     } 
120 }
121
122 # printf "argv %s pid %d\n", $ARGV[0], extractpid($ARGV[0]);