From f8ea50244af1646f65753b9a92caaf54b5f435b4 Mon Sep 17 00:00:00 2001 From: rwatson Date: Sat, 5 Jun 2010 22:59:37 +0000 Subject: Although we currently don't compile in CPU-pinning support by default, add a -P to enable it if it were. MFC after: 1 week Sponsored by: Juniper Networks --- tools/tools/netrate/tcpp/README | 1 + tools/tools/netrate/tcpp/tcpp.c | 23 +++++++++++++++++------ tools/tools/netrate/tcpp/tcpp.h | 2 +- tools/tools/netrate/tcpp/tcpp_client.c | 24 +++++++++++++----------- tools/tools/netrate/tcpp/tcpp_server.c | 24 +++++++++++++----------- 5 files changed, 45 insertions(+), 29 deletions(-) (limited to 'tools') diff --git a/tools/tools/netrate/tcpp/README b/tools/tools/netrate/tcpp/README index f720db5..3287b38 100644 --- a/tools/tools/netrate/tcpp/README +++ b/tools/tools/netrate/tcpp/README @@ -39,6 +39,7 @@ The client has more to configure, with the following flags: -c Select client mode, and specific dest IP -C Print connections/second instead of GBps + -P Pin each worker to a CPU -M Number of sequential local IPs to use; req. -l -T Include CPU use summary in stats at end of run -b Data bytes per connection diff --git a/tools/tools/netrate/tcpp/tcpp.c b/tools/tools/netrate/tcpp/tcpp.c index ce59af3..ed76305 100644 --- a/tools/tools/netrate/tcpp/tcpp.c +++ b/tools/tools/netrate/tcpp/tcpp.c @@ -51,7 +51,7 @@ struct sockaddr_in remoteip; /* Base target address. */ struct sockaddr_in localipbase; /* Base local address, if -l. */ -int cflag, lflag, mflag, pflag, sflag, tflag, Cflag, Mflag, Tflag; +int cflag, lflag, mflag, pflag, sflag, tflag, Cflag, Mflag, Pflag, Tflag; uint64_t bflag; u_short rflag; @@ -61,24 +61,27 @@ usage(void) fprintf(stderr, "client: tcpp" " -c remoteIP" - " [-CT]" + " [-CPT]" " [-M localIPcount]" " [-l localIPbase]" + "\n\t" " [-b bytespertcp]" " [-m maxtcpsatonce]" - "\n" - "\t" " [-p procs]" " [-t tcpsperproc]" + "\n" + "\t" " [-r baseport]" "\n"); fprintf(stderr, "server: tcpp" " -s" - " [-T]" + " [-PT]" " [-l localIPbase]" " [-m maxtcpsatonce]" " [-p procs]" + "\n" + "\t" " [-r baseport]" "\n"); exit(EX_USAGE); @@ -109,7 +112,7 @@ main(int argc, char *argv[]) rflag = BASEPORT_DEFAULT; tflag = TCPS_DEFAULT; Mflag = 1; - while ((ch = getopt(argc, argv, "b:c:l:m:p:r:st:CM:T")) != -1) { + while ((ch = getopt(argc, argv, "b:c:l:m:p:r:st:CM:PT")) != -1) { switch (ch) { case 'b': ll = strtoll(optarg, &dummy, 10); @@ -173,6 +176,14 @@ main(int argc, char *argv[]) Mflag = ll; break; + case 'P': +#if defined(CPU_SETSIZE) && 0 + Pflag++; + break; +#else + errx(EX_USAGE, "-P current unsupported"); +#endif + case 'T': Tflag++; break; diff --git a/tools/tools/netrate/tcpp/tcpp.h b/tools/tools/netrate/tcpp/tcpp.h index 7f4c5eb..edabcfe 100644 --- a/tools/tools/netrate/tcpp/tcpp.h +++ b/tools/tools/netrate/tcpp/tcpp.h @@ -31,7 +31,7 @@ extern struct sockaddr_in localipbase, remoteip; extern int cflag, lflag, mflag, pflag, sflag, tflag; -extern int Cflag, Iflag, Mflag, Tflag; +extern int Cflag, Iflag, Mflag, Pflag, Tflag; extern uint64_t bflag; extern u_short rflag; diff --git a/tools/tools/netrate/tcpp/tcpp_client.c b/tools/tools/netrate/tcpp/tcpp_client.c index 6c3e800..f45dca0 100644 --- a/tools/tools/netrate/tcpp/tcpp_client.c +++ b/tools/tools/netrate/tcpp/tcpp_client.c @@ -224,17 +224,19 @@ tcpp_client_worker(int workernum) int ncpus; size_t len; - len = sizeof(ncpus); - if (sysctlbyname(SYSCTLNAME_CPUS, &ncpus, &len, NULL, 0) < 0) - err(-1, "sysctlbyname: %s", SYSCTLNAME_CPUS); - if (len != sizeof(ncpus)) - errx(-1, "sysctlbyname: %s: len %jd", SYSCTLNAME_CPUS, - (intmax_t)len); - - CPU_ZERO(&mask); - CPU_SET(workernum % ncpus, &mask); - if (sched_setaffinity(0, CPU_SETSIZE, &mask) < 0) - err(-1, "sched_setaffinity"); + if (Pflag) { + len = sizeof(ncpus); + if (sysctlbyname(SYSCTLNAME_CPUS, &ncpus, &len, NULL, 0) < 0) + err(-1, "sysctlbyname: %s", SYSCTLNAME_CPUS); + if (len != sizeof(ncpus)) + errx(-1, "sysctlbyname: %s: len %jd", SYSCTLNAME_CPUS, + (intmax_t)len); + + CPU_ZERO(&mask); + CPU_SET(workernum % ncpus, &mask); + if (sched_setaffinity(0, CPU_SETSIZE, &mask) < 0) + err(-1, "sched_setaffinity"); + } #endif setproctitle("tcpp_client %d", workernum); diff --git a/tools/tools/netrate/tcpp/tcpp_server.c b/tools/tools/netrate/tcpp/tcpp_server.c index 76f5e8d..95077b9 100644 --- a/tools/tools/netrate/tcpp/tcpp_server.c +++ b/tools/tools/netrate/tcpp/tcpp_server.c @@ -201,17 +201,19 @@ tcpp_server_worker(int workernum) int ncpus; ssize_t len; - len = sizeof(ncpus); - if (sysctlbyname(SYSCTLNAME_CPUS, &ncpus, &len, NULL, 0) < 0) - err(-1, "sysctlbyname: %s", SYSCTLNAME_CPUS); - if (len != sizeof(ncpus)) - errx(-1, "sysctlbyname: %s: len %jd", SYSCTLNAME_CPUS, - (intmax_t)len); - - CPU_ZERO(&mask); - CPU_SET(workernum % ncpus, &mask); - if (sched_setaffinity(0, CPU_SETSIZE, &mask) < 0) - err(-1, "sched_setaffinity"); + if (Pflag) { + len = sizeof(ncpus); + if (sysctlbyname(SYSCTLNAME_CPUS, &ncpus, &len, NULL, 0) < 0) + err(-1, "sysctlbyname: %s", SYSCTLNAME_CPUS); + if (len != sizeof(ncpus)) + errx(-1, "sysctlbyname: %s: len %jd", SYSCTLNAME_CPUS, + (intmax_t)len); + + CPU_ZERO(&mask); + CPU_SET(workernum % ncpus, &mask); + if (sched_setaffinity(0, CPU_SETSIZE, &mask) < 0) + err(-1, "sched_setaffinity"); + } #endif setproctitle("tcpp_server %d", workernum); -- cgit v1.1