Whamcloud - gitweb
- a log analyzer to help us work with the Lustre logs even more easily
authorbraam <braam>
Sun, 10 Nov 2002 21:47:38 +0000 (21:47 +0000)
committerbraam <braam>
Sun, 10 Nov 2002 21:47:38 +0000 (21:47 +0000)
  So far:
   - indentation with spaces for call stack depth
   - select pid
   - --trace (only the call trace)
   - --nonet (leave out networking message)
Written in Perl, very easy to add more features.

lustre/utils/llanalyze [new file with mode: 0644]

diff --git a/lustre/utils/llanalyze b/lustre/utils/llanalyze
new file mode 100644 (file)
index 0000000..97aa5af
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/perl
+
+use Getopt::Long;
+GetOptions("pid=i" => \$pid, 
+           "trace!" => \$trace, 
+           "nonet!" => \$nonet);
+
+# print "$pid\n";
+
+
+$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;
+
+
+$masks->{TRACE} = 1 << 0; # /* ENTRY/EXIT markers */
+$masks->{INODE} = 1 << 1; #
+$masks->{SUPER} = 1 << 2; #
+$masks->{EXT2} = 1 << 3; # /* anything from ext2_debug */
+$masks->{MALLOC} = 1 << 4; # /* print malloc, free information */
+$masks->{CACHE} = 1 << 5; # /* cache-related items */
+$masks->{INFO} = 1 << 6; # /* general information */
+$masks->{IOCTL} = 1 << 7; # /* ioctl related information */
+$masks->{BLOCKS} = 1 << 8; # /* ext2 block allocation */
+$masks->{NET} = 1 << 9; # /* network communications */
+$masks->{WARNING} = 1 << 10; #
+$masks->{BUFFS} = 1 << 11; #
+$masks->{OTHER} = 1 << 12; #
+$masks->{DENTRY} = 1 << 13; #
+$masks->{PORTALS} = 1 << 14; # /* ENTRY/EXIT markers */
+$masks->{PAGE} = 1 << 15; # /* bulk page handling */
+$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 */
+
+
+
+sub extractpid
+{
+    $_ = shift;
+#    print "$_\n";
+    /l. [0-9]* (.*)\):/;
+    return $1;
+}
+
+sub entering
+{
+    $_ = shift;
+    $entering = /Process entered/;
+}
+
+sub leaving
+{
+    $_ = shift;
+    $entering = /Process leaving/;
+}
+
+sub getsubsys
+{
+    my ($subsys, $mask) = split ":";
+    return $subsys;
+}
+
+sub getmask
+{
+    my ($subsys, $mask) = split ":";
+    return $mask;
+}
+
+while (<STDIN>) {
+    $linepid = extractpid($_);
+    $linemask = getmask($_);
+    $linesubsys = getsubsys($_);
+
+#    printf "---> mask %x subsys %x\n", $linemask, $linesubsys;
+
+    if (leaving($_)) {
+        chop $prefix->{$linepid};
+        chop $prefix->{$linepid};
+    }
+    if ( !$pid || $linepid == $pid) {
+        next if ($trace && $linemask != $masks->{TRACE});
+        next if ($nonet && 
+                 (  $linesubsys == $subsys->{RPC} ||
+                    $linesubsys == $subsys->{NET} ||
+                    $linesubsys == $subsys->{PORTALS} ||
+                    $linesubsys == $subsys->{SOCKNAL} ||
+                    $linesubsys == $subsys->{QSWNAL} ||
+                    $linesubsys == $subsys->{GMNAL}));
+
+#        printf "sub/mask: %s - %s\n", getsubsys($_), getmask($_);
+
+        printf "%s%s", $prefix->{$linepid}, $_;
+        last if $count++ > 100;
+    }
+    if (entering($_)) {
+        $prefix->{$linepid} .= '  ';
+    } 
+}
+
+# printf "argv %s pid %d\n", $ARGV[0], extractpid($ARGV[0]);