X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Frouterstat.c;h=99bc59b0e105432c5616ff7fdb5601fa3a9c8113;hb=5a63afa17b94d652460586dc16ce0dff0165eb05;hp=37da12c79fa27e1a873e9c1ffeaaaf4e9aa34cc8;hpb=84ae053eaa9c16b17389da746c56000adb17bbbe;p=fs%2Flustre-release.git diff --git a/lnet/utils/routerstat.c b/lnet/utils/routerstat.c index 37da12c..99bc59b 100644 --- a/lnet/utils/routerstat.c +++ b/lnet/utils/routerstat.c @@ -21,12 +21,15 @@ do_stat (int fd) { static char buffer[1024]; static double last = 0.0; + static unsigned long long old_bytes; + static unsigned long old_packets; + static unsigned long old_errors; double now; double t; - long long bytes; - long packets; - long errors; - long depth; + unsigned long long new_bytes, bytes; + unsigned long new_packets, packets; + unsigned long new_errors, errors; + unsigned long depth; int n; lseek (fd, 0, SEEK_SET); @@ -39,7 +42,8 @@ do_stat (int fd) } buffer[n] = 0; - n = sscanf (buffer, "%Ld %ld %ld %ld", &bytes, &packets, &errors, &depth); + n = sscanf (buffer, "%Lu %lu %lu %lu", + &new_bytes, &new_packets, &new_errors, &depth); if (n < 3) { @@ -48,27 +52,44 @@ do_stat (int fd) } if (last == 0.0) - printf ("%Ld bytes, %ld packets (sz %Ld) %ld errors", - bytes, packets, (long long)((packets == 0) ? 0LL : bytes/packets), errors); + printf ("%llu bytes, %lu packets (sz %lld), %lu errors", + new_bytes, new_packets, + (long long)((new_packets == 0) ? 0LL : new_bytes/new_packets), + new_errors); else { t = now - last; - printf ("%9Ld (%7.2fMb/s), %7ld packets (sz %5Ld, %5ld/s) %ld errors (%ld/s)", + if (new_bytes < old_bytes) + bytes = -1ULL - old_bytes + new_bytes + 1; + else + bytes = new_bytes - old_bytes; + if (new_packets < old_packets) + packets = -1UL - old_packets + new_packets + 1; + else + packets = new_packets - old_packets; + if (new_errors < old_errors) + errors = -1UL - old_errors + new_errors + 1; + else + errors = new_errors - old_errors; + + printf ("%9llu bytes (%7.2fMb/s), %7lu packets (sz %5lld, %5ld/s), %lu errors (%ld/s)", bytes, ((double)bytes)/((1<<20) * t), packets, (long long)((packets == 0) ? 0LL : bytes/packets), (long)(packets/t), errors, (long)(errors/t)); } + old_bytes = new_bytes; + old_packets = new_packets; + old_errors = new_errors; if (n == 4) - printf (" (%ld)\n", depth); + printf (", depth (%ld)\n", depth); else printf ("\n"); fflush (stdout); lseek (fd, 0, SEEK_SET); - write (fd, "\n", 1); last = timenow(); } @@ -80,7 +101,7 @@ int main (int argc, char **argv) if (argc > 1) interval = atoi (argv[1]); - fd = open ("/proc/sys/portals/router", O_RDWR); + fd = open ("/proc/sys/portals/router", O_RDONLY); if (fd < 0) { fprintf (stderr, "Can't open stat: %s\n", strerror (errno));