X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Fllanalyze;h=5aa8ffd6b5d8c55ac379c66f013592a1eb83e3ba;hb=afe1d3a47bc97525d0f5adf686bb24e848e04755;hp=3061b264abb50bb27e730c39327edb40d02ff797;hpb=1f5c8cf8a6e2aa83f3452d7a83080bc5f57ec32a;p=fs%2Flustre-release.git diff --git a/lustre/utils/llanalyze b/lustre/utils/llanalyze index 3061b26..5aa8ffd 100644 --- a/lustre/utils/llanalyze +++ b/lustre/utils/llanalyze @@ -8,33 +8,37 @@ GetOptions("pid=i" => \$pid, "silent!" => \$silent, "rpctrace!" => \$rpctrace, "nodlm!" => \$nodlm, + "dlm_ns=s" => \$dlm_ns, "noclass!" => \$noclass, - "nonet!" => \$nonet); - -print "pid: $pid, nodlm $nodlm nonet $nonet trace $trace\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; + "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->{OPENIBNAL} = 1 << 22; $masks->{TRACE} = 1 << 0; # /* ENTRY/EXIT markers */ @@ -61,10 +65,41 @@ $masks->{RPCTRACE} = 1 << 19; # /* recovery and failover */ sub extractpid { - $_ = shift; + $line = shift; +# print "$_\n"; + if ($line =~ /(\d+)\:(\d+)\:(\d+)\:(\d+\.\d+)\:(\d+)\:(\d+)\:.*/) { + return $6; + } +} + +sub extracthostpid +{ + $line = shift; # print "$_\n"; - /l. [0-9]* (.*)\):/; - return $1; + if ($line =~ /(\d+)\:(\d+)\:(\d+)\:(\d+\.\d+)\:(\d+)\:(\d+)\:(\d+)\:.*/) { + return $7; + } +} + +sub entering_rpc +{ + $_ = shift; + $entering_rpc = /Handling RPC/; + if($entering_rpc) { + $oldpid=$pid; + $pid = extractpid($_); + $leaving_rpc = 0; + } +} + +sub leaving_rpc +{ + $_ = shift; + $leaving_rpc = /Handled RPC/; + if($leaving_rpc) { + $pid = $oldpid; + $entering_rpc = 0; + } } sub entering @@ -94,8 +129,13 @@ sub getmask sub setcolor { my $linemask = shift; + my $line = shift; if ($linemask == $masks->{TRACE}) { - print color("yellow on_black"); + if(leaving($line)){ + print color("yellow on_black"); + } else { + print color("green on_black"); + } } if ($linemask == $masks->{DLMTRACE}) { print color("magenta on_black"); @@ -207,8 +247,44 @@ sub unmatched_intents { } } -while () { +sub usage +{ + print "Usage : llanalyze LOGFILE\n"; + exit; +} + +if ($ARGV[0]) { + if(!open(LOG, "<$ARGV[0]")){ + print "Cannot open $ARGV[0]\n"; + exit; + } +} else { + usage(); +} +$width = 0; +if ($ARGV[1]) { + $width = $ARGV[1]; +} + +print "nodlm $nodlm, nonet $nonet, trace $trace\n"; +print "pid: $pid, dlm_ns: $dlm_ns\n"; +print "extract_start: $extract_start\n"; +print "extract_end: $extract_end\n"; +while () { + if ($extract_start && $extract_start ne "LLANAYZE_FOUND") { + next if (index($_, $extract_start, 0) == -1); + $extract_start = "LLANAYZE_FOUND"; + } + + if ($extract_end) { + next if ($extract_end eq "LLANAYZE_FOUND"); + if (index($_, $extract_end, 0) != -1) { + $extract_end = "LLANAYZE_FOUND"; + } + } + $linepid = extractpid($_); + $linehpid = extracthostpid($_); $linemask = getmask($_); $linesubsys = getsubsys($_); @@ -226,29 +302,35 @@ while () { study_lock($_); } - if ( !$pid || $linepid == $pid) { - next if ($rpctrace && $linemask != $masks->{RPCTRACE}); + 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 ($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} || $linesubsys == $subsys->{PORTALS} || $linesubsys == $subsys->{SOCKNAL} || $linesubsys == $subsys->{QSWNAL} || + $linesubsys == $subsys->{OPENIBNAL} || $linesubsys == $subsys->{GMNAL})); - + if(!$entering_rpc) {entering_rpc($_);} + if(!$leaving_rpc) {leaving_rpc($_);} # printf "sub/mask: %s - %s\n", getsubsys($_), getmask($_); - if (!$silent) { - setcolor($linemask); - printf("%s%s", $prefix->{$linepid}, $_); + if (!$silent) { + setcolor($linemask, $_); + my $string = $prefix->{$linepid}.$_; + if($width){ + $string = substr($string, 0, $width)."\n"; + } + printf("%s", $string); print color("reset"); } # last if $count++ > 100;