Whamcloud - gitweb
* Merged in b_devel again
authoreeb <eeb>
Thu, 12 Jun 2003 17:34:24 +0000 (17:34 +0000)
committereeb <eeb>
Thu, 12 Jun 2003 17:34:24 +0000 (17:34 +0000)
lnet/include/linux/kp30.h
lustre/portals/include/linux/kp30.h
lustre/utils/llobdstat.pl [new file with mode: 0755]

index afb2104..bd963d7 100644 (file)
@@ -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)
 
index afb2104..bd963d7 100644 (file)
@@ -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 (executable)
index 0000000..ec95f89
--- /dev/null
@@ -0,0 +1,159 @@
+#!/usr/bin/perl
+
+my $pname = $0;
+
+my $defaultpath = "/proc/fs/lustre";
+my $obdstats = "stats";
+
+sub usage()
+{
+    print STDERR "Usage: $pname <stats_file> [<interval>]\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 (<CPUINFO>) {
+       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 (<STATS>) {
+               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;
+