Whamcloud - gitweb
add lmvtrace for llanalyze
[fs/lustre-release.git] / lustre / utils / llanalyze
index 97c691a..40166a5 100644 (file)
@@ -7,35 +7,41 @@ GetOptions("pid=i" => \$pid,
            "trace!" => \$trace, 
            "silent!" => \$silent, 
            "rpctrace!" => \$rpctrace, 
+           "lmvtrace!" => \$lmvtrace, 
            "nodlm!" => \$nodlm,
+           "dlm_ns=s" => \$dlm_ns,
            "noclass!" => \$noclass,
-           "nonet!" => \$nonet);
-
-
-
-$subsys->{UNDEFINED} = 0;
-$subsys->{MDC} = 1;
-$subsys->{MDS} = 2;
-$subsys->{OSC} = 3;
-$subsys->{OST} = 4;
-$subsys->{CLASS} = 5;
-$subsys->{OBDFS} = 6;
-$subsys->{LLITE} = 7;
-$subsys->{RPC} = 8;
-$subsys->{EXT2OBD} = 9;
-$subsys->{PORTALS} = 10;
-$subsys->{SOCKNAL} = 11;
-$subsys->{QSWNAL} = 12;
-$subsys->{PINGER} = 13;
-$subsys->{FILTER} = 14;
-$subsys->{TRACE} = 15; # obdtrace, not to be confused with D_TRACE */
-$subsys->{ECHO} = 16;
-$subsys->{LDLM} = 17;
-$subsys->{LOV} = 18;
-$subsys->{GMNAL} = 19;
-$subsys->{PTLROUTER} = 20;
-$subsys->{COBD} = 21;
-$subsys->{IBNAL} = 22;
+           "nonet!" => \$nonet,
+           "extract_start=s" => \$extract_start,
+           "extract_end=s" => \$extract_end);
+
+$subsys->{UNDEFINED} = 1 << 0;
+$subsys->{MDC} = 1 << 1;
+$subsys->{MDS} = 1 << 2;
+$subsys->{OSC} = 1 << 3;
+$subsys->{OST} = 1 << 4;
+$subsys->{CLASS} = 1 << 5;
+$subsys->{LOG} = 1 << 6;
+$subsys->{LLITE} = 1 << 7;
+$subsys->{RPC} = 1 << 8;
+$subsys->{MGMT} = 1 << 9;
+$subsys->{PORTALS} = 1 << 10;
+$subsys->{SOCKNAL} = 1 << 11;
+$subsys->{QSWNAL} = 1 << 12;
+$subsys->{PINGER} = 1 << 13;
+$subsys->{FILTER} = 1 << 14;
+$subsys->{PTLBD} = 1 << 15;
+$subsys->{ECHO} = 1 << 16;
+$subsys->{LDLM} = 1 << 17;
+$subsys->{LOV} = 1 << 18;
+$subsys->{GMNAL} = 1 << 19;
+$subsys->{PTLROUTER} = 1 << 20;
+$subsys->{COBD} = 1 << 21;
+$subsys->{IBNAL} = 1 << 22;
+$subsys->{SM} = 1 << 23;
+$subsys->{ASOBD} = 1 << 24;
+$subsys->{LMV} = 1 << 25;
+$subsys->{CMOBD} = 1 << 26;
 
 
 $masks->{TRACE} = 1 << 0; # /* ENTRY/EXIT markers */
@@ -58,13 +64,13 @@ $masks->{DLMTRACE} = 1 << 16; #
 $masks->{ERROR} = 1 << 17; # /* CERROR} = ...) == CDEBUG} = D_ERROR, ...) */
 $masks->{EMERG} = 1 << 18; # /* CEMERG} = ...) == CDEBUG} = D_EMERG, ...) */
 $masks->{HA} = 1 << 19; # /* recovery and failover */
-$masks->{RPCTRACE} = 1 << 19; # /* recovery and failover */
+$masks->{RPCTRACE} = 1 << 20; # /* recovery and failover */
 
 sub extractpid
 {
     $line = shift;
 #    print "$_\n";
-    if ($line =~ m/\d+:\d+:\d+:\d+\.\d+:\d+:\d+:*$/) {
+    if ($line =~ m/(\d+):(\d+):(\d+):(\d+\.\d+):(\d+):(\d+):.*$/) {
        return $6;
     }
 }
@@ -73,10 +79,27 @@ sub extracthostpid
 {
     $line = shift;
 #    print "$_\n";
-    if ($line =~ m/\d+:\d+:\d+:\d+\.\d+:\d+:\d+:\d+:*$/) {
+    if ($line =~ m/(\d+):(\d+):(\d+):(\d+\.\d+):(\d+):(\d+):(\d+):.*$/) {
        return $7;
     }
 }
+sub extractsubsys
+{
+    $line = shift;
+#    print "$_\n";
+    if ($line =~ m/(\d+):(\d+):(\d+):(\d+\.\d+):(\d+):(\d+):(\d+):.*$/) {
+       return hex($1);
+    }
+}
+
+sub extractmask
+{
+    $line = shift;
+#    print "$_\n";
+    if ($line =~ m/(\d+):(\d+):(\d+):(\d+\.\d+):(\d+):(\d+):(\d+):.*$/) {
+       return hex($2);
+    }
+}
 
 sub entering_rpc
 {
@@ -263,14 +286,28 @@ if ($ARGV[1]) {
    $width = $ARGV[1];
 }
 
-print "pid: $pid, nodlm $nodlm nonet $nonet trace $trace\n";
+print "nodlm $nodlm, nonet $nonet, trace $trace lmvtrace $lmvtrace\n";
+print "pid: $pid, dlm_ns: $dlm_ns\n";
+print "extract_start: $extract_start\n";
+print "extract_end:   $extract_end\n";
 while (<LOG>) {
+    if ($extract_start && $extract_start != LLANAYZE_FOUND) {
+        next if (index($_, $extract_start, 0) == -1);
+        $extract_start = LLANAYZE_FOUND;
+    }
+
+    if ($extract_end) {
+        next if ($extract_end == LLANAYZE_FOUND);
+        if (index($_, $extract_end, 0) != -1) {
+             $extract_end = LLANAYZE_FOUND;
+        }
+    }
+
     $linepid = extractpid($_);
-    $linehpid = extracthostpid($_);
-    $linemask = getmask($_);
-    $linesubsys = getsubsys($_);
 
-#    printf "---> mask %x subsys %x\n", $linemask, $linesubsys;
+    $linehpid = extracthostpid($_);
+    $linesubsys = extractsubsys($_);
+    $linemask = extractmask($_);
 
     if (leaving($_)) {
         chop $prefix->{$linepid};
@@ -287,13 +324,15 @@ while (<LOG>) {
     if ( !$pid || $linepid == $pid || $linehpid == $pid) {
         next if (!$entering_rpc && $rpctrace && $linemask != $masks->{RPCTRACE});
         next if ($trace && $linemask != $masks->{TRACE});
-
-
         next if ($nodlm && 
                  (  $linesubsys == $subsys->{LDLM}));
+        next if ($lmvtrace && 
+                 (  $linesubsys != $subsys->{LMV}));
+        next if ($dlm_ns &&
+                 (  $linesubsys != $subsys->{LDLM}));
+        next if (($found_dlm_ns = index( $_, $dlm_ns, 0)) == -1);
         next if ($noclass && 
                  (  $linesubsys == $subsys->{CLASS}));
-
         next if ($nonet && 
                  (  $linesubsys == $subsys->{RPC} ||
                     $linesubsys == $subsys->{NET} ||