summaryrefslogtreecommitdiffstats
path: root/usr.bin/netstat
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2013-07-15 06:16:57 +0000
committerae <ae@FreeBSD.org>2013-07-15 06:16:57 +0000
commit6f8e41d6cbe4a6159abeaba412a9adbc4bd819ee (patch)
tree5932d71f2b8a3afd2e76291fe74b70726eac9ee1 /usr.bin/netstat
parent1a49123d7477a3a956dfa33644d7f1483b56dbc2 (diff)
downloadFreeBSD-src-6f8e41d6cbe4a6159abeaba412a9adbc4bd819ee.zip
FreeBSD-src-6f8e41d6cbe4a6159abeaba412a9adbc4bd819ee.tar.gz
Introduce new structure sfstat for collecting sendfile's statistics
and remove corresponding fields from struct mbstat. Use PCPU counters and SFSTAT_INC() macro for update these statistics. Discussed with: glebius
Diffstat (limited to 'usr.bin/netstat')
-rw-r--r--usr.bin/netstat/main.c4
-rw-r--r--usr.bin/netstat/mbuf.c22
2 files changed, 15 insertions, 11 deletions
diff --git a/usr.bin/netstat/main.c b/usr.bin/netstat/main.c
index 249650a..569c394 100644
--- a/usr.bin/netstat/main.c
+++ b/usr.bin/netstat/main.c
@@ -184,6 +184,8 @@ static struct nlist nl[] = {
{ .n_name = "_arpstat" },
#define N_UNP_SPHEAD 56
{ .n_name = "unp_sphead" },
+#define N_SFSTAT 57
+ { .n_name = "_sfstat"},
{ .n_name = NULL },
};
@@ -543,7 +545,7 @@ main(int argc, char *argv[])
if (mflag) {
if (!live) {
if (kread(0, NULL, 0) == 0)
- mbpr(kvmd, nl[N_MBSTAT].n_value);
+ mbpr(kvmd, nl[N_SFSTAT].n_value);
} else
mbpr(NULL, 0);
exit(0);
diff --git a/usr.bin/netstat/mbuf.c b/usr.bin/netstat/mbuf.c
index 401a03c..d32304d 100644
--- a/usr.bin/netstat/mbuf.c
+++ b/usr.bin/netstat/mbuf.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mbuf.h>
#include <sys/protosw.h>
+#include <sys/sf_buf.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/sysctl.h>
@@ -81,7 +82,7 @@ mbpr(void *kvmd, u_long mbaddr)
uintmax_t jumbo16_failures, jumbo16_sleeps, jumbo16_size;
uintmax_t bytes_inuse, bytes_incache, bytes_total;
int nsfbufs, nsfbufspeak, nsfbufsused;
- struct mbstat mbstat;
+ struct sfstat sfstat;
size_t mlen;
int error;
@@ -308,20 +309,21 @@ mbpr(void *kvmd, u_long mbaddr)
&mlen, NULL, 0))
printf("%d/%d/%d sfbufs in use (current/peak/max)\n",
nsfbufsused, nsfbufspeak, nsfbufs);
- mlen = sizeof(mbstat);
- if (sysctlbyname("kern.ipc.mbstat", &mbstat, &mlen, NULL, 0)) {
- warn("kern.ipc.mbstat");
+ mlen = sizeof(sfstat);
+ if (sysctlbyname("kern.ipc.sfstat", &sfstat, &mlen, NULL, 0)) {
+ warn("kern.ipc.sfstat");
goto out;
}
} else {
- if (kread(mbaddr, (char *)&mbstat, sizeof mbstat) != 0)
+ if (kread_counters(mbaddr, (char *)&sfstat, sizeof sfstat) != 0)
goto out;
}
- printf("%lu requests for sfbufs denied\n", mbstat.sf_allocfail);
- printf("%lu requests for sfbufs delayed\n", mbstat.sf_allocwait);
- printf("%lu requests for I/O initiated by sendfile\n",
- mbstat.sf_iocnt);
- printf("%lu calls to protocol drain routines\n", mbstat.m_drain);
+ printf("%ju requests for sfbufs denied\n",
+ (uintmax_t)sfstat.sf_allocfail);
+ printf("%ju requests for sfbufs delayed\n",
+ (uintmax_t)sfstat.sf_allocwait);
+ printf("%ju requests for I/O initiated by sendfile\n",
+ (uintmax_t)sfstat.sf_iocnt);
out:
memstat_mtl_free(mtlp);
}
OpenPOWER on IntegriCloud