* patch: nfsstat signed counter bug
@ 2007-06-29 21:45 Gabriel Barazer
0 siblings, 0 replies; only message in thread
From: Gabriel Barazer @ 2007-06-29 21:45 UTC (permalink / raw)
To: nfs
[-- Attachment #1: Type: text/plain, Size: 1421 bytes --]
Hello,
This is not a critical bug as it is about an informational only tool,
but I observed a counter bug in nfsstat :
# nfsstat -s
Server rpc stats:
calls badcalls badauth badclnt xdrcall
1647216427 0 0 0 0
Server nfs v3:
null getattr setattr lookup access readlink
3668 0% 1642587440 27% 1636642 0% 160803697 2% -219165970 68%
54477 0%
read write create mkdir symlink mknod
39195344 0% 8113663 0% 3336779 0% 36784 0% 0 0%
0 0%
remove rmdir rename link readdir readdirplus
3981274 0% 37602 0% 310174 0% 220157 0% 1180237 0%
1907416 0%
fsstat fsinfo pathconf commit
43 0% 1841 0% 0 0% 644317 0%
---------
It is very clear that counters are looping and displaying negative
values after counting 2^31 calls even on x86_64 platform with 64-bit Linux.
Looking at the code shows some printf's with incorrect format such as %-8d
Attached patch against nfs-utils 1.1.0 corrects this behavior to allow
numbers with a length of 11, and reformats the display (align numbers
and headers on the right, much easier to read). Now, up to 99 billions
can be counted on 64-bit systems (2^32 on 32-bit), which is a very
higher limit than ~2 billions on a moderate used NFS client/server.
Gabriel
[-- Attachment #2: nfs-utils-1.1.0-nfsstat-format.diff --]
[-- Type: text/plain, Size: 2493 bytes --]
--- nfs-utils-1.1.0.orig/utils/nfsstat/nfsstat.c 2007-05-11 05:40:57.000000000 +0200
+++ nfs-utils-1.1.0/utils/nfsstat/nfsstat.c 2007-06-29 23:10:13.982044000 +0200
@@ -335,7 +335,7 @@
if (opt_prt & PRNT_NET) {
print_numbers(
"Server packet stats:\n"
- "packets udp tcp tcpconn\n",
+ " packets udp tcp tcpconn\n",
svcnetinfo, 4
);
printf("\n");
@@ -343,7 +343,7 @@
if (opt_prt & PRNT_RPC) {
print_numbers(
"Server rpc stats:\n"
- "calls badcalls badauth badclnt xdrcall\n",
+ " calls badcalls badauth badclnt xdrcall\n",
svcrpcinfo, 5
);
printf("\n");
@@ -351,7 +351,7 @@
if (opt_prt & PRNT_RC) {
print_numbers(
"Server reply cache:\n"
- "hits misses nocache\n",
+ " hits misses nocache\n",
svcrcinfo, 3
);
printf("\n");
@@ -373,12 +373,12 @@
print_numbers(
"Server file handle cache:\n"
- "lookup anon ncachedir ncachedir stale\n",
+ " lookup anon ncachedir ncachedir stale\n",
svcfhinfo + 1, 5);
} else /* < 2.4 */
print_numbers(
"Server file handle cache:\n"
- "lookup anon ncachedir ncachedir stale\n",
+ " lookup anon ncachedir ncachedir stale\n",
svcrcinfo + 3, 5);
printf("\n");
}
@@ -410,7 +410,7 @@
if (opt_prt & PRNT_NET) {
print_numbers(
"Client packet stats:\n"
- "packets udp tcp tcpconn\n",
+ " packets udp tcp tcpconn\n",
cltnetinfo, 4
);
printf("\n");
@@ -418,7 +418,7 @@
if (opt_prt & PRNT_RPC) {
print_numbers(
"Client rpc stats:\n"
- "calls retrans authrefrsh\n",
+ " calls retrans authrefrsh\n",
cltrpcinfo, 3
);
printf("\n");
@@ -465,7 +465,7 @@
fputs(hdr, stdout);
for (i = 0; i < nr; i++)
- printf("%s%-8d", i? " " : "", info[i]);
+ printf("%s%11u", i ? " " : "", info[i]);
printf("\n");
}
@@ -484,11 +484,11 @@
total = 1;
for (i = 0; i < nr; i += 6) {
for (j = 0; j < 6 && i + j < nr; j++)
- printf("%-13s", names[i+j]);
+ printf("%s%11s", j ? " " : "", names[i+j]);
printf("\n");
for (j = 0; j < 6 && i + j < nr; j++) {
pct = ((unsigned long long) info[i+j]*100)/total;
- printf("%-8d%3llu%% ", info[i+j], pct);
+ printf("%s%11u%3llu%%", j ? " " : "", info[i+j], pct);
}
printf("\n");
}
[-- Attachment #3: Type: text/plain, Size: 286 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
[-- Attachment #4: Type: text/plain, Size: 140 bytes --]
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-06-29 21:45 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-29 21:45 patch: nfsstat signed counter bug Gabriel Barazer
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.