From 93fdfe0f8f5a166517e4d84a9ac7f4a260c0939c Mon Sep 17 00:00:00 2001 From: eeb Date: Thu, 12 Jun 2003 17:34:24 +0000 Subject: [PATCH] * Merged in b_devel again --- lnet/include/linux/kp30.h | 42 +++++----- lustre/portals/include/linux/kp30.h | 42 +++++----- lustre/utils/llobdstat.pl | 159 ++++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+), 44 deletions(-) create mode 100755 lustre/utils/llobdstat.pl diff --git a/lnet/include/linux/kp30.h b/lnet/include/linux/kp30.h index afb2104..bd963d7 100644 --- a/lnet/include/linux/kp30.h +++ b/lnet/include/linux/kp30.h @@ -265,28 +265,27 @@ do { \ #define PORTAL_ALLOC(ptr, size) \ do { \ - long s = size; \ LASSERT (!in_interrupt()); \ - if (s > PORTAL_VMALLOC_SIZE) \ - (ptr) = vmalloc(s); \ + if ((size) > PORTAL_VMALLOC_SIZE) \ + (ptr) = vmalloc(size); \ else \ - (ptr) = kmalloc(s, GFP_NOFS); \ + (ptr) = kmalloc((size), GFP_NOFS); \ if ((ptr) == NULL) \ - CERROR("PORTALS: out of memory at %s:%d (tried to alloc" \ - " '" #ptr "' = %ld)\n", __FILE__, __LINE__, s); \ + CERROR("PORTALS: out of memory at %s:%d (tried to alloc '"\ + #ptr "' = %d)\n", __FILE__, __LINE__, (int)(size));\ else { \ - portal_kmem_inc((ptr), s); \ - memset((ptr), 0, s); \ + portal_kmem_inc((ptr), (size)); \ + memset((ptr), 0, (size)); \ } \ - CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %d at %p (tot %d).\n", \ + (int)(size), (ptr), atomic_read (&portal_kmemory)); \ } while (0) #define PORTAL_FREE(ptr, size) \ do { \ - long s = (size); \ + int s = (size); \ if ((ptr) == NULL) { \ - CERROR("PORTALS: free NULL '" #ptr "' (%ld bytes) at " \ + CERROR("PORTALS: free NULL '" #ptr "' (%d bytes) at " \ "%s:%d\n", s, __FILE__, __LINE__); \ break; \ } \ @@ -295,39 +294,38 @@ do { \ else \ kfree(ptr); \ portal_kmem_dec((ptr), s); \ - CDEBUG(D_MALLOC, "kfreed '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \ + s, (ptr), atomic_read(&portal_kmemory)); \ } while (0) #define PORTAL_SLAB_ALLOC(ptr, slab, size) \ do { \ - long s = (size); \ - LASSERT (!in_interrupt()); \ + LASSERT(!in_interrupt()); \ (ptr) = kmem_cache_alloc((slab), SLAB_KERNEL); \ if ((ptr) == NULL) { \ CERROR("PORTALS: out of memory at %s:%d (tried to alloc" \ " '" #ptr "' from slab '" #slab "')\n", __FILE__, \ __LINE__); \ } else { \ - portal_kmem_inc((ptr), s); \ - memset((ptr), 0, s); \ + portal_kmem_inc((ptr), (size)); \ + memset((ptr), 0, (size)); \ } \ CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + (int)(size), (ptr), atomic_read(&portal_kmemory)); \ } while (0) #define PORTAL_SLAB_FREE(ptr, slab, size) \ do { \ - long s = (size); \ + int s = (size); \ if ((ptr) == NULL) { \ - CERROR("PORTALS: free NULL '" #ptr "' (%ld bytes) at " \ + CERROR("PORTALS: free NULL '" #ptr "' (%d bytes) at " \ "%s:%d\n", s, __FILE__, __LINE__); \ break; \ } \ memset((ptr), 0x5a, s); \ kmem_cache_free((slab), ptr); \ portal_kmem_dec((ptr), s); \ - CDEBUG(D_MALLOC, "kfreed '" #ptr "': %ld at %p (tot %d).\n", \ + CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \ s, (ptr), atomic_read (&portal_kmemory)); \ } while (0) diff --git a/lustre/portals/include/linux/kp30.h b/lustre/portals/include/linux/kp30.h index afb2104..bd963d7 100644 --- a/lustre/portals/include/linux/kp30.h +++ b/lustre/portals/include/linux/kp30.h @@ -265,28 +265,27 @@ do { \ #define PORTAL_ALLOC(ptr, size) \ do { \ - long s = size; \ LASSERT (!in_interrupt()); \ - if (s > PORTAL_VMALLOC_SIZE) \ - (ptr) = vmalloc(s); \ + if ((size) > PORTAL_VMALLOC_SIZE) \ + (ptr) = vmalloc(size); \ else \ - (ptr) = kmalloc(s, GFP_NOFS); \ + (ptr) = kmalloc((size), GFP_NOFS); \ if ((ptr) == NULL) \ - CERROR("PORTALS: out of memory at %s:%d (tried to alloc" \ - " '" #ptr "' = %ld)\n", __FILE__, __LINE__, s); \ + CERROR("PORTALS: out of memory at %s:%d (tried to alloc '"\ + #ptr "' = %d)\n", __FILE__, __LINE__, (int)(size));\ else { \ - portal_kmem_inc((ptr), s); \ - memset((ptr), 0, s); \ + portal_kmem_inc((ptr), (size)); \ + memset((ptr), 0, (size)); \ } \ - CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %d at %p (tot %d).\n", \ + (int)(size), (ptr), atomic_read (&portal_kmemory)); \ } while (0) #define PORTAL_FREE(ptr, size) \ do { \ - long s = (size); \ + int s = (size); \ if ((ptr) == NULL) { \ - CERROR("PORTALS: free NULL '" #ptr "' (%ld bytes) at " \ + CERROR("PORTALS: free NULL '" #ptr "' (%d bytes) at " \ "%s:%d\n", s, __FILE__, __LINE__); \ break; \ } \ @@ -295,39 +294,38 @@ do { \ else \ kfree(ptr); \ portal_kmem_dec((ptr), s); \ - CDEBUG(D_MALLOC, "kfreed '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \ + s, (ptr), atomic_read(&portal_kmemory)); \ } while (0) #define PORTAL_SLAB_ALLOC(ptr, slab, size) \ do { \ - long s = (size); \ - LASSERT (!in_interrupt()); \ + LASSERT(!in_interrupt()); \ (ptr) = kmem_cache_alloc((slab), SLAB_KERNEL); \ if ((ptr) == NULL) { \ CERROR("PORTALS: out of memory at %s:%d (tried to alloc" \ " '" #ptr "' from slab '" #slab "')\n", __FILE__, \ __LINE__); \ } else { \ - portal_kmem_inc((ptr), s); \ - memset((ptr), 0, s); \ + portal_kmem_inc((ptr), (size)); \ + memset((ptr), 0, (size)); \ } \ CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %ld at %p (tot %d).\n", \ - s, (ptr), atomic_read (&portal_kmemory)); \ + (int)(size), (ptr), atomic_read(&portal_kmemory)); \ } while (0) #define PORTAL_SLAB_FREE(ptr, slab, size) \ do { \ - long s = (size); \ + int s = (size); \ if ((ptr) == NULL) { \ - CERROR("PORTALS: free NULL '" #ptr "' (%ld bytes) at " \ + CERROR("PORTALS: free NULL '" #ptr "' (%d bytes) at " \ "%s:%d\n", s, __FILE__, __LINE__); \ break; \ } \ memset((ptr), 0x5a, s); \ kmem_cache_free((slab), ptr); \ portal_kmem_dec((ptr), s); \ - CDEBUG(D_MALLOC, "kfreed '" #ptr "': %ld at %p (tot %d).\n", \ + CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \ s, (ptr), atomic_read (&portal_kmemory)); \ } while (0) diff --git a/lustre/utils/llobdstat.pl b/lustre/utils/llobdstat.pl new file mode 100755 index 0000000..ec95f89 --- /dev/null +++ b/lustre/utils/llobdstat.pl @@ -0,0 +1,159 @@ +#!/usr/bin/perl + +my $pname = $0; + +my $defaultpath = "/proc/fs/lustre"; +my $obdstats = "stats"; + +sub usage() +{ + print STDERR "Usage: $pname []\n"; + print STDERR "example: $pname help (to get help message)\n"; + print STDERR "example: $pname ost1 1 (monitor /proc/fs/lustre/ost1/obd_stats once per second\n"; + exit 1; +} + +my $statspath = "None"; +my $interval = 0; + +if (($#ARGV < 0) || ($#ARGV > 1)) { + usage(); +} else { + if ( $ARGV[0] =~ /help$/ ) { + usage(); + } + if ( -f $ARGV[0] ) { + $statspath = $ARGV[0]; + } elsif ( -f "$ARGV[0]/$obdstats" ) { + $statspath = "$ARGV[0]/$obdstats"; + } else { + my $st = `ls $defaultpath/*/$ARGV[0]/$obdstats 2> /dev/null`; + chop $st; + if ( -f "$st" ) { + $statspath = $st; + } + } + if ( $statspath =~ /^None$/ ) { + die "Cannot locate stat file for: $ARGV[0]\n"; + } + if ($#ARGV == 1) { + $interval = $ARGV[1]; + } +} + +print "$pname on $statspath\n"; + +my %cur; +my %last; +my $mhz = 0; +my ($read_bytes, $read, $write_bytes, $write, $getattr, $setattr, $open, $close, $create, $destroy, $statfs, $punch, $snapshot_time) = + ("read_bytes", "read", "write_bytes", "write", "getattr", "setattr", "open", "close", "create", "destroy", "statfs", "punch", "snapshot_time"); + +my @extinfo = ($setattr, $open, $close, $create, $destroy, $statfs, $punch); +my %shortname = ($setattr => "sa", $open => "op", $close => "cl", + $create => "cx", $destroy => "dx", $statfs => "st", $punch => "pu"); + +sub get_cpumhz() +{ + my $cpu_freq; + my $itc_freq; # On Itanium systems use this + if (open(CPUINFO, "/proc/cpuinfo")==0) { + return; + } + while () { + if (/^cpu MHz\s+:\s*([\d\.]+)/) { $cpu_freq=$1; } + elsif (/^itc MHz\s+:\s*([\d\.]+)/) { $itc_freq=$1; } + } + if (defined($itc_freq)) { $mhz = $itc_freq; } + elsif (defined($cpu_freq)) { $mhz = $cpu_freq; } + else { $mhz = 1; } + close CPUINFO; +} + +get_cpumhz(); +print "Processor counters run at $mhz MHz\n"; + +sub readall() +{ + my $prevcount; + my @iodata; + + seek STATS, 0, 0; + while () { + chop; +# ($name, $cumulcount, $samples, $unit, $min, $max, $sum, $sumsquare) + @iodata = split(/\s+/, $_); + my $name = $iodata[0]; + + $prevcount = $cur{$name}; + if (defined($prevcount)) { + $last{$name} = $prevcount; + } + if ($name =~ /^read_bytes$/ || $name =~ /^write_bytes$/) { + $cur{$name} = $iodata[6]; + } + elsif ($name =~ /^snapshot_time$/) { +# $cumulcount =~ /(\d+)/; + $cur{$name} = $iodata[1]; + } + else { + $cur{$name} = $iodata[1]; + } + } +} +sub process_stats() +{ + my $delta; + my $data; + my $last_time = $last{$snapshot_time}; + if (!defined($last_time)) { + printf "R %-g/%-g W %-g/%-g attr %-g/%-g open %-g/%-g create %-g/%-g stat %-g punch %-g\n", + $cur{$read_bytes}, $cur{$read}, + $cur{$write_bytes}, $cur{$write}, + $cur{$getattr}, $cur{$setattr}, + $cur{$open}, $cur{$close}, + $cur{$create}, $cur{$destroy}, + $cur{$statfs}, $cur{$punch}; + } + else { + my $timespan = $cur{$snapshot_time} - $last{$snapshot_time}; + + my $rdelta = $cur{$read} - $last{$read}; + my $rvdelta = int ($rdelta / $timespan); + my $rrate = ($cur{$read_bytes} - $last{$read_bytes}) / + ($timespan * ( 1 << 20 )); + my $wdelta = $cur{$write} - $last{$write}; + my $wvdelta = int ($wdelta / $timespan); + my $wrate = ($cur{$write_bytes} - $last{$write_bytes}) / + ($timespan * ( 1 << 20 )); + printf "R %6lu (%5lu %6.2fMb)/s W %6lu (%5lu %6.2fMb)/s", + $rdelta, $rvdelta, $rrate, + $wdelta, $wvdelta, $wrate; + + $delta = $cur{$getattr} - $last{$getattr}; + if ( $delta != 0 ) { + $rdelta = int ($delta/$timespan); + print " ga:$delta,$rdelta/s"; + } + + for $data ( @extinfo ) { + $delta = $cur{$data} - $last{$data}; + if ($delta != 0) { + print " $shortname{$data}:$delta"; + } + } + print "\n"; + } +} + +open(STATS, $statspath) || die "Cannot open $statspath: $!\n"; +do { + readall(); + process_stats(); + if ($interval) { + sleep($interval); + %last = %cur; + } +} while ($interval); +close STATS; + -- 1.8.3.1