From: braam Date: Sun, 10 Nov 2002 21:47:38 +0000 (+0000) Subject: - a log analyzer to help us work with the Lustre logs even more easily X-Git-Tag: 0.5.17~35 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=ed6e1e27ebdcc0a17b5c75788a53d1165c197a3f;p=fs%2Flustre-release.git - a log analyzer to help us work with the Lustre logs even more easily 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. --- diff --git a/lustre/utils/llanalyze b/lustre/utils/llanalyze new file mode 100644 index 0000000..97aa5af --- /dev/null +++ b/lustre/utils/llanalyze @@ -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 () { + $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]);