PERFORCE change 113748 for review
Christian S.J. Peron
csjp at FreeBSD.org
Wed Jan 31 06:18:17 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=113748
Change 113748 by csjp at csjp_rnd01 on 2007/01/31 06:17:29
- Add counters for matching packets written to bpf
- Add some additional counters for zero copy to
assist with debugging
Affected files ...
.. //depot/projects/zcopybpf/src/sys/net/bpf.c#6 edit
.. //depot/projects/zcopybpf/src/sys/net/bpfdesc.h#5 edit
Differences ...
==== //depot/projects/zcopybpf/src/sys/net/bpf.c#6 (text+ko) ====
@@ -171,6 +171,7 @@
#ifdef BPF_ZEROCOPY
case BPF_BUFMODE_ZBUF:
+ d->bd_zcopy++;
return (bpf_zerocopy_append_bytes(d, buf, offset, src, len));
#endif
@@ -190,6 +191,7 @@
#ifdef BPF_ZEROCOPY
case BPF_BUFMODE_ZBUF:
+ d->bd_zcopy++;
return (bpf_zerocopy_append_mbuf(d, buf, offset, src, len));
#endif
@@ -795,23 +797,32 @@
int error;
struct sockaddr dst;
- if (d->bd_bif == NULL)
+ d->bd_wcount++;
+ if (d->bd_bif == NULL) {
+ d->bd_wdcount++;
return (ENXIO);
+ }
ifp = d->bd_bif->bif_ifp;
- if ((ifp->if_flags & IFF_UP) == 0)
+ if ((ifp->if_flags & IFF_UP) == 0) {
+ d->bd_wdcount++;
return (ENETDOWN);
+ }
- if (uio->uio_resid == 0)
+ if (uio->uio_resid == 0) {
+ d->bd_wdcount++;
return (0);
+ }
bzero(&dst, sizeof(dst));
error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, ifp->if_mtu,
&m, &dst, d->bd_wfilter);
- if (error)
+ if (error) {
+ d->bd_wdcount++;
return (error);
-
+ }
+ d->bd_wfcount++;
if (d->bd_hdrcmplt)
dst.sa_family = pseudo_AF_HDRCMPLT;
@@ -822,6 +833,8 @@
#endif
NET_LOCK_GIANT();
error = (*ifp->if_output)(ifp, m, &dst, NULL);
+ if (error)
+ d->bd_wdcount++;
NET_UNLOCK_GIANT();
/*
* The driver frees the mbuf.
@@ -848,6 +861,10 @@
d->bd_rcount = 0;
d->bd_dcount = 0;
d->bd_fcount = 0;
+ d->bd_wcount = 0;
+ d->bd_wfcount = 0;
+ d->bd_wdcount = 0;
+ d->bd_zcopy = 0;
}
/*
@@ -1921,6 +1938,10 @@
strlcpy(d->bd_ifname,
bd->bd_bif->bif_ifp->if_xname, IFNAMSIZ);
d->bd_locked = bd->bd_locked;
+ d->bd_wcount = bd->bd_wcount;
+ d->bd_wdcount = bd->bd_wdcount;
+ d->bd_wfcount = bd->bd_wfcount;
+ d->bd_zcopy = bd->bd_zcopy;
}
static int
==== //depot/projects/zcopybpf/src/sys/net/bpfdesc.h#5 (text+ko) ====
@@ -94,6 +94,10 @@
pid_t bd_pid; /* PID which created descriptor */
int bd_locked; /* true if descriptor is locked */
u_int bd_bufmode; /* Current buffer mode. */
+ u_long bd_wcount; /* number of packets written */
+ u_long bd_wfcount; /* number of packets that matched write filter */
+ u_long bd_wdcount; /* number of packets dropped during a write */
+ u_long bd_zcopy; /* number of zero copy operations */
};
/* Values for bd_state */
@@ -127,6 +131,10 @@
pid_t bd_pid;
char bd_ifname[IFNAMSIZ];
int bd_locked;
+ u_long bd_wcount;
+ u_long bd_wfcount;
+ u_long bd_wdcount;
+ u_long bd_zcopy;
};
#define BPFIF_LOCK(bif) mtx_lock(&(bif)->bif_mtx)
More information about the p4-projects
mailing list