PERFORCE change 166170 for review
Gabor Pali
pgj at FreeBSD.org
Thu Jul 16 18:52:25 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166170
Change 166170 by pgj at 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);
+}
More information about the p4-projects
mailing list