Module Name: src Committed By: rmind Date: Tue Sep 24 02:44:20 UTC 2013
Modified Files: src/usr.sbin/npf/npftest: npftest.c npftest.h src/usr.sbin/npf/npftest/libnpftest: npf_perf_test.c npf_test.h Log Message: npftest: add a choice of "rule" or "state" for -b option. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/npf/npftest/npftest.c cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/npf/npftest/npftest.h cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/npf/npftest/libnpftest/npf_test.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/npf/npftest/npftest.c diff -u src/usr.sbin/npf/npftest/npftest.c:1.11 src/usr.sbin/npf/npftest/npftest.c:1.12 --- src/usr.sbin/npf/npftest/npftest.c:1.11 Tue Sep 24 02:04:21 2013 +++ src/usr.sbin/npf/npftest/npftest.c Tue Sep 24 02:44:20 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npftest.c,v 1.11 2013/09/24 02:04:21 rmind Exp $ */ +/* $NetBSD: npftest.c,v 1.12 2013/09/24 02:44:20 rmind Exp $ */ /* * NPF testing framework. @@ -137,12 +137,12 @@ arc4random(void) int main(int argc, char **argv) { - bool benchmark, test, ok, fail, tname_matched; - char *config, *interface, *stream, *testname; + bool test, ok, fail, tname_matched; + char *benchmark, *config, *interface, *stream, *testname; unsigned nthreads = 0; int idx = -1, ch; - benchmark = false; + benchmark = NULL; test = false; tname_matched = false; @@ -154,10 +154,10 @@ main(int argc, char **argv) verbose = false; quiet = false; - while ((ch = getopt(argc, argv, "bqvc:i:s:tT:Lp:")) != -1) { + while ((ch = getopt(argc, argv, "b:qvc:i:s:tT:Lp:")) != -1) { switch (ch) { case 'b': - benchmark = true; + benchmark = optarg; break; case 'q': quiet = true; @@ -204,7 +204,7 @@ main(int argc, char **argv) * interface should be specified. If benchmark, then the * config should be loaded. */ - if (benchmark == test && (stream && !interface)) { + if ((benchmark != NULL) == test && (stream && !interface)) { usage(); } if (benchmark && (!config || !nthreads)) { @@ -276,7 +276,12 @@ main(int argc, char **argv) } if (benchmark) { - rumpns_npf_test_conc(nthreads); + if (strcmp("rule", benchmark) == 0) { + rumpns_npf_test_conc(false, nthreads); + } + if (strcmp("state", benchmark) == 0) { + rumpns_npf_test_conc(true, nthreads); + } } rump_unschedule(); Index: src/usr.sbin/npf/npftest/npftest.h diff -u src/usr.sbin/npf/npftest/npftest.h:1.8 src/usr.sbin/npf/npftest/npftest.h:1.9 --- src/usr.sbin/npf/npftest/npftest.h:1.8 Tue Sep 24 02:04:21 2013 +++ src/usr.sbin/npf/npftest/npftest.h Tue Sep 24 02:44:20 2013 @@ -17,7 +17,7 @@ unsigned rumpns_npf_test_getif(const cha int rumpns_npf_test_statetrack(const void *, size_t, unsigned, bool, int64_t *); -void rumpns_npf_test_conc(unsigned); +void rumpns_npf_test_conc(bool, unsigned); bool rumpns_npf_nbuf_test(bool); bool rumpns_npf_bpf_test(bool); Index: src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c diff -u src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c:1.1 src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c:1.2 --- src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c:1.1 Tue Sep 24 02:04:21 2013 +++ src/usr.sbin/npf/npftest/libnpftest/npf_perf_test.c Tue Sep 24 02:44:20 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: npf_perf_test.c,v 1.1 2013/09/24 02:04:21 rmind Exp $ */ +/* $NetBSD: npf_perf_test.c,v 1.2 2013/09/24 02:44:20 rmind Exp $ */ /* * NPF benchmarking. @@ -16,24 +16,30 @@ #include "npf_impl.h" #include "npf_test.h" -#define NSECS 1 /* seconds */ +#define NSECS 10 /* seconds */ static volatile int run; static volatile int done; +static uint64_t * npackets; +static bool stateful; + static struct mbuf * -fill_packet(void) +fill_packet(unsigned i) { struct mbuf *m; struct ip *ip; - struct tcphdr *th; + struct udphdr *uh; + char buf[32]; + + m = mbuf_construct(IPPROTO_UDP); + uh = mbuf_return_hdrs(m, false, &ip); - m = mbuf_construct(IPPROTO_TCP); - th = mbuf_return_hdrs(m, false, &ip); + snprintf(buf, sizeof(buf), "192.0.2.%u", i + i); ip->ip_src.s_addr = inet_addr(PUB_IP1); - ip->ip_dst.s_addr = inet_addr(LOCAL_IP3); - th->th_sport = htons(80); - th->th_dport = htons(15000); + ip->ip_dst.s_addr = inet_addr(stateful ? LOCAL_IP2 : LOCAL_IP3); + uh->uh_sport = htons(80); + uh->uh_dport = htons(15000 + i); return m; } @@ -41,8 +47,9 @@ static void worker(void *arg) { ifnet_t *ifp = ifunit(IFNAME_INT); - uint64_t n = 0, *npackets = arg; - struct mbuf *m = fill_packet(); + unsigned int i = (uintptr_t)arg; + struct mbuf *m = fill_packet(i); + uint64_t n = 0; while (!run) /* spin-wait */; @@ -53,28 +60,29 @@ worker(void *arg) KASSERT(error == 0); n++; } - *npackets = n; + npackets[i] = n; kthread_exit(0); } void -npf_test_conc(unsigned nthreads) +npf_test_conc(bool st, unsigned nthreads) { - uint64_t total = 0, *npackets; + uint64_t total = 0; int error; lwp_t **l; - npackets = kmem_zalloc(sizeof(uint64_t) * nthreads, KM_SLEEP); - l = kmem_zalloc(sizeof(lwp_t *) * nthreads, KM_SLEEP); - printf("THREADS\tPKTS\n"); + stateful = st; done = false; run = false; + npackets = kmem_zalloc(sizeof(uint64_t) * nthreads, KM_SLEEP); + l = kmem_zalloc(sizeof(lwp_t *) * nthreads, KM_SLEEP); + for (unsigned i = 0; i < nthreads; i++) { const int flags = KTHREAD_MUSTJOIN | KTHREAD_MPSAFE; error = kthread_create(PRI_NONE, flags, NULL, - worker, &npackets[i], &l[i], "npfperf"); + worker, (void *)(uintptr_t)i, &l[i], "npfperf"); KASSERT(error == 0); } Index: src/usr.sbin/npf/npftest/libnpftest/npf_test.h diff -u src/usr.sbin/npf/npftest/libnpftest/npf_test.h:1.9 src/usr.sbin/npf/npftest/libnpftest/npf_test.h:1.10 --- src/usr.sbin/npf/npftest/libnpftest/npf_test.h:1.9 Tue Sep 24 02:04:21 2013 +++ src/usr.sbin/npf/npftest/libnpftest/npf_test.h Tue Sep 24 02:44:20 2013 @@ -45,7 +45,7 @@ unsigned npf_test_getif(const char *); int npf_test_statetrack(const void *, size_t, unsigned, bool, int64_t *); -void npf_test_conc(unsigned); +void npf_test_conc(bool, unsigned); struct mbuf * mbuf_getwithdata(const void *, size_t); struct mbuf * mbuf_construct_ether(int);