Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Jul 2009 18:52:23 GMT
From:      Gabor Pali <pgj@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 166170 for review
Message-ID:  <200907161852.n6GIqN30016040@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166170

Change 166170 by pgj@petymeg-current on 2009/07/16 18:51:51

	Add support for mbuf(9) statistics:
	- Add mbuf_type ("memory buffer") and its accessors
	- Add netstat_mbuf()
	- Add libmemstat(3) as dependency

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#10 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#25 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#24 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_mbuf.c#1 add
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#27 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#10 (text+ko) ====

@@ -3,7 +3,7 @@
 .include <bsd.own.mk>
 
 LIB=	netstat
-SRCS=	netstat_socket.c netstat_util.c
+SRCS=	netstat_socket.c netstat_mbuf.c netstat_util.c
 
 INCS=	netstat.h
 
@@ -12,8 +12,8 @@
 
 SHLIB_MAJOR=	1
 
-DPADD=	${LIBKVM} ${LIBUTIL}
-LDADD=	-lkvm -lutil
+DPADD=	${LIBKVM} ${LIBMEMSTAT} ${LIBUTIL}
+LDADD=	-lkvm -lmemstat -lutil
 
 WARNS?=	3
 

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#25 (text+ko) ====

@@ -50,6 +50,9 @@
 #define	NETSTAT_SOCKET_KVM	    0x01	/* Use KVM. */
 #define NETSTAT_SOCKET_ALL	    0x02	/* Return all connections. */
 
+/* netstat_mbuf(): */
+#define NETSTAT_MBUF_KVM	    0x01
+
 /* Enum for TCP states: */
 enum tcp_state {
     tcps_Closed,
@@ -74,6 +77,9 @@
 
 struct addr_type;
 
+struct mbuf_type;
+
+
 __BEGIN_DECLS
 const char		    *netstat_strerror(int);
 
@@ -140,4 +146,36 @@
 u_int32_t	netstat_sbt_get_mbmax(const struct sockbuf_type *sbtp);
 __END_DECLS
 
+/* "Memory buffers" */
+struct mbuf_type    *netstat_mbt_alloc(void);
+void		    netstat_mbt_free(struct mbuf_type *);
+int		    netstat_mbt_geterror(const struct mbuf_type *);
+
+int	netstat_mbuf(struct mbuf_type *stats, int flags, void *kvm_handle);
+
+const struct buffer_type *netstat_mbt_get_mbuf(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_cluster(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_packet(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_tag(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_jumbop(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_jumbo9(const struct mbuf_type *);
+const struct buffer_type *netstat_mbt_get_jumbo16(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_bytes_inuse(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_bytes_incache(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_bytes_total(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_drain(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_bufs(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_bufs_peak(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_bufs_inuse(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_iocnt(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_allocfail(const struct mbuf_type *);
+u_int64_t   netstat_mbt_get_sf_allocwait(const struct mbuf_type *);
+
+u_int64_t   netstat_bt_get_count(const struct buffer_type *);
+u_int64_t   netstat_bt_get_bytes(const struct buffer_type *);
+u_int64_t   netstat_bt_get_free(const struct buffer_type *);
+u_int64_t   netstat_bt_get_failures(const struct buffer_type *);
+u_int64_t   netstat_bt_get_size(const struct buffer_type *);
+u_int64_t   netstat_bt_get_limit(const struct buffer_type *);
+
 #endif /* !_NETSTAT_H_ */

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#24 (text+ko) ====

@@ -133,6 +133,42 @@
 	struct socket_type	    *sti_next;
 };
 
+struct buffer_type {
+	u_int64_t	bt_count;
+	u_int64_t	bt_bytes;
+	u_int64_t	bt_free;
+	u_int64_t	bt_failures;
+	u_int64_t	bt_size;
+	u_int64_t	bt_limit;
+};
+
+struct mbuf_type {
+	struct buffer_type  mbt_mbuf;
+	struct buffer_type  mbt_cluster;
+	struct buffer_type  mbt_packet;
+	struct buffer_type  mbt_tag;
+	struct buffer_type  mbt_jumbop;
+	struct buffer_type  mbt_jumbo9;
+	struct buffer_type  mbt_jumbo16;
+
+	u_int64_t	    mbt_bytes_inuse;
+	u_int64_t	    mbt_bytes_incache;
+	u_int64_t	    mbt_bytes_total;
+
+	/* from mbstat */
+	u_int64_t	    mbt_drain; /* times drained protocols for space */
+
+	/* Sendfile stats */
+	u_int64_t	    mbt_sf_bufs; /* number of avail sf_bufs */
+	u_int64_t	    mbt_sf_bufs_peak;  /* peak usage */
+	u_int64_t	    mbt_sf_bufs_inuse; /* in use */
+	u_int64_t	    mbt_sf_iocnt; /* times sf had to do disk I/O */
+	u_int64_t	    mbt_sf_allocfail; /* times sfbuf alloc failed */
+	u_int64_t	    mbt_sf_allocwait; /* times sfbuf alloc waited */
+
+	int		    mbt_error;
+};
+
 int kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
 int kread_string(kvm_t *kvm, u_long kvm_pointer, char *buffer, int buflen);
 

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#27 (text+ko) ====

@@ -551,3 +551,168 @@
 {
 	return (sbtp->sbt_mbmax);
 }
+
+/* Memory buffer type */
+struct mbuf_type *
+netstat_mbt_alloc(void)
+{
+	struct mbuf_type *mbtp;
+
+	mbtp = malloc(sizeof(*mbtp));
+	if (mbtp == NULL)
+		return (NULL);
+
+	bzero(mbtp, sizeof(*mbtp));
+	return (mbtp);
+}
+
+void
+netstat_mbt_free(struct mbuf_type *mbtp)
+{
+	free(mbtp);
+}
+
+int
+netstat_mbt_geterror(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_error);
+}
+
+const struct buffer_type *
+netstat_mbt_get_mbuf(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_mbuf);
+}
+
+const struct buffer_type *
+netstat_mbt_get_cluster(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_cluster);
+}
+
+const struct buffer_type *
+netstat_mbt_get_packet(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_packet);
+}
+
+const struct buffer_type *
+netstat_mbt_get_tag(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_tag);
+}
+
+const struct buffer_type *
+netstat_mbt_get_jumbop(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_jumbop);
+}
+
+const struct buffer_type *
+netstat_mbt_get_jumbo9(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_jumbo9);
+}
+
+const struct buffer_type *
+netstat_mbt_get_jumbo16(const struct mbuf_type *mbtp)
+{
+	return (&mbtp->mbt_jumbo16);
+}
+
+u_int64_t
+netstat_mbt_get_bytes_inuse(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_bytes_inuse);
+}
+
+u_int64_t
+netstat_mbt_get_bytes_incache(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_bytes_incache);
+}
+
+u_int64_t
+netstat_mbt_get_bytes_total(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_bytes_total);
+}
+
+u_int64_t
+netstat_mbt_get_drain(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_drain);
+}
+
+u_int64_t
+netstat_mbt_get_sf_bufs(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_bufs);
+}
+
+u_int64_t
+netstat_mbt_get_sf_bufs_peak(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_bufs_peak);
+}
+
+u_int64_t
+netstat_mbt_get_sf_bufs_inuse(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_bufs_inuse);
+}
+
+u_int64_t
+netstat_mbt_get_sf_iocnt(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_iocnt);
+}
+
+u_int64_t
+netstat_mbt_get_sf_allocfail(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_allocfail);
+}
+
+u_int64_t
+netstat_mbt_get_sf_allocwait(const struct mbuf_type *mbtp)
+{
+	return (mbtp->mbt_sf_allocwait);
+}
+
+/* Buffer type */
+u_int64_t
+netstat_bt_get_count(const struct buffer_type *btp)
+{
+	return (btp->bt_count);
+}
+
+u_int64_t
+netstat_bt_get_bytes(const struct buffer_type *btp)
+{
+	return (btp->bt_bytes);
+}
+
+u_int64_t
+netstat_bt_get_free(const struct buffer_type *btp)
+{
+	return (btp->bt_free);
+}
+
+u_int64_t
+netstat_bt_get_failures(const struct buffer_type *btp)
+{
+	return (btp->bt_failures);
+}
+
+u_int64_t
+netstat_bt_get_size(const struct buffer_type *btp)
+{
+	return (btp->bt_size);
+}
+
+u_int64_t
+netstat_bt_get_limit(const struct buffer_type *btp)
+{
+	return (btp->bt_limit);
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907161852.n6GIqN30016040>