From: Sepherosa Ziehau Date: Wed, 2 Apr 2008 14:18:55 +0000 (+0000) Subject: - Save statistics X-Git-Tag: v2.0.1~889 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/db161a1950cf4fe4908a0b22d7b35ea52f16715c?hp=9deadd02c50008ce77a1e8950ca2c541ebb33269 - Save statistics - Factor out common routine to end threads --- diff --git a/tools/tools/netrate/pktgen/pktgen.c b/tools/tools/netrate/pktgen/pktgen.c index 00ebc06f2d..78e7c0e3e8 100644 --- a/tools/tools/netrate/pktgen/pktgen.c +++ b/tools/tools/netrate/pktgen/pktgen.c @@ -31,7 +31,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/tools/tools/netrate/pktgen/pktgen.c,v 1.3 2008/04/02 13:27:24 sephe Exp $ + * $DragonFly: src/tools/tools/netrate/pktgen/pktgen.c,v 1.4 2008/04/02 14:18:55 sephe Exp $ */ #define _IP_VHL @@ -68,6 +68,11 @@ struct pktgen { uint32_t pktg_flags; /* PKTG_F_ */ int pktg_refcnt; + uint64_t pktg_tx_cnt; + uint64_t pktg_err_cnt; + struct timeval pktg_start; + struct timeval pktg_end; + struct callout pktg_stop; int pktg_duration; int pktg_cpuid; @@ -98,6 +103,7 @@ static int pktgen_modevent(module_t, int, void *); static int pktgen_config(struct pktgen *, const struct pktgen_conf *); static int pktgen_start(struct pktgen *, int); +static void pktgen_thread_exit(struct pktgen *, uint64_t, uint64_t); static void pktgen_stop_cb(void *); static void pktgen_udp_thread(void *); static void pktgen_udp_thread1(void *); @@ -356,7 +362,6 @@ pktgen_udp_thread1(void *arg) uint64_t err_cnt, cnt; in_addr_t saddr, daddr; u_short sport, dport; - struct timeval start, end; rel_mplock(); /* Don't need MP lock */ @@ -381,7 +386,7 @@ pktgen_udp_thread1(void *arg) sport = pktg->pktg_sport; dport = pktg->pktg_dport; - microtime(&start); + microtime(&pktg->pktg_start); while ((pktg->pktg_flags & PKTG_F_STOP) == 0) { m = m_getl(len, MB_WAIT, MT_DATA, M_PKTHDR, NULL); m->m_len = m->m_pkthdr.len = len; @@ -446,22 +451,9 @@ pktgen_udp_thread1(void *arg) dport = pktg->pktg_dport + (r % pktg->pktg_ndport); } } - microtime(&end); - - timevalsub(&end, &start); - kprintf("cnt %llu, err %llu, time %ld.%ld\n", cnt, err_cnt, - end.tv_sec, end.tv_usec); - - pktg->pktg_flags &= ~(PKTG_F_STOP | PKTG_F_CONFIG | PKTG_F_RUNNING); - - KKASSERT(pktg->pktg_refcnt > 0); - if (--pktg->pktg_refcnt == 0) - kfree(pktg, M_PKTGEN); /* XXX */ - - KKASSERT(pktgen_refcnt > 0); - pktgen_refcnt--; + microtime(&pktg->pktg_end); - lwkt_exit(); + pktgen_thread_exit(pktg, cnt, err_cnt); } static void @@ -480,7 +472,6 @@ pktgen_udp_thread(void *arg) uint64_t err_cnt, cnt; in_addr_t saddr, daddr; u_short sport, dport; - struct timeval start, end; rel_mplock(); /* Don't need MP lock */ @@ -506,7 +497,7 @@ pktgen_udp_thread(void *arg) sw_csum = (CSUM_UDP | CSUM_IP) & ~ifp->if_hwassist; csum_flags = (CSUM_UDP | CSUM_IP) & ifp->if_hwassist; - microtime(&start); + microtime(&pktg->pktg_start); while ((pktg->pktg_flags & PKTG_F_STOP) == 0) { m = m_getl(len, MB_WAIT, MT_DATA, M_PKTHDR, NULL); m->m_len = m->m_pkthdr.len = len; @@ -564,11 +555,23 @@ pktgen_udp_thread(void *arg) } } } - microtime(&end); + microtime(&pktg->pktg_end); + + pktgen_thread_exit(pktg, cnt, err_cnt); +} + +static void +pktgen_thread_exit(struct pktgen *pktg, uint64_t tx_cnt, uint64_t err_cnt) +{ + struct timeval end; + + pktg->pktg_tx_cnt = tx_cnt; + pktg->pktg_err_cnt = err_cnt; - timevalsub(&end, &start); - kprintf("cnt %llu, err %llu, time %ld.%06ld\n", cnt, err_cnt, - end.tv_sec, end.tv_usec); + end = pktg->pktg_end; + timevalsub(&end, &pktg->pktg_start); + kprintf("cnt %llu, err %llu, time %ld.%06ld\n", + pktg->pktg_tx_cnt, pktg->pktg_err_cnt, end.tv_sec, end.tv_usec); pktg->pktg_flags &= ~(PKTG_F_STOP | PKTG_F_CONFIG | PKTG_F_RUNNING);