Rework tcpp output so that it generates a comma-delimited list of values,
optionally with a header if "-h" is passed. Toast CPU time measurement in the server for now. Remove -C and -T, since we now always report both connections/sec and Gb/sec. MFC after: 1 week Sponsored by: Juniper Networks
This commit is contained in:
parent
a760c554f4
commit
a4945a1273
@ -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, Pflag, Tflag;
|
||||
int cflag, hflag, lflag, mflag, pflag, sflag, tflag, Mflag, Pflag;
|
||||
uint64_t bflag;
|
||||
u_short rflag;
|
||||
|
||||
@ -61,7 +61,8 @@ usage(void)
|
||||
|
||||
fprintf(stderr, "client: tcpp"
|
||||
" -c remoteIP"
|
||||
" [-CPT]"
|
||||
" [-h]"
|
||||
" [-P]"
|
||||
" [-M localIPcount]"
|
||||
" [-l localIPbase]"
|
||||
"\n\t"
|
||||
@ -76,7 +77,7 @@ usage(void)
|
||||
|
||||
fprintf(stderr, "server: tcpp"
|
||||
" -s"
|
||||
" [-PT]"
|
||||
" [-P]"
|
||||
" [-l localIPbase]"
|
||||
" [-m maxtcpsatonce]"
|
||||
" [-p procs]"
|
||||
@ -112,7 +113,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:PT")) != -1) {
|
||||
while ((ch = getopt(argc, argv, "b:c:hl:m:p:r:st:CM:PT")) != -1) {
|
||||
switch (ch) {
|
||||
case 'b':
|
||||
ll = strtoll(optarg, &dummy, 10);
|
||||
@ -127,6 +128,10 @@ main(int argc, char *argv[])
|
||||
err(-1, "inet_aton: %s", optarg);
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
hflag++;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
lflag++;
|
||||
if (inet_aton(optarg, &localipbase.sin_addr) != 1)
|
||||
@ -165,10 +170,6 @@ main(int argc, char *argv[])
|
||||
tflag = ll;
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
Cflag++;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
ll = strtoll(optarg, &dummy, 10);
|
||||
if (*dummy != '\0' || ll <= 1)
|
||||
@ -184,10 +185,6 @@ main(int argc, char *argv[])
|
||||
errx(EX_USAGE, "-P current unsupported");
|
||||
#endif
|
||||
|
||||
case 'T':
|
||||
Tflag++;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
@ -204,7 +201,7 @@ main(int argc, char *argv[])
|
||||
usage();
|
||||
|
||||
/* Several flags are valid only on the client, disallow if server. */
|
||||
if (sflag && (Cflag || Mflag > 1))
|
||||
if (sflag && (hflag || Mflag > 1))
|
||||
usage();
|
||||
|
||||
if (cflag)
|
||||
|
@ -30,8 +30,8 @@
|
||||
#define TCPP_H
|
||||
|
||||
extern struct sockaddr_in localipbase, remoteip;
|
||||
extern int cflag, lflag, mflag, pflag, sflag, tflag;
|
||||
extern int Cflag, Iflag, Mflag, Pflag, Tflag;
|
||||
extern int cflag, hflag, lflag, mflag, pflag, sflag, tflag;
|
||||
extern int Iflag, Mflag, Pflag;
|
||||
extern uint64_t bflag;
|
||||
extern u_short rflag;
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
/*-
|
||||
* Copyright (c) 2008-2009 Robert N. M. Watson
|
||||
* Copyright (c) 2010 Juniper Networks, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software was developed by Robert N. M. Watson under contract
|
||||
* to Juniper Networks, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -337,33 +341,37 @@ tcpp_client(void)
|
||||
if (failed)
|
||||
errx(-1, "Too many errors");
|
||||
|
||||
printf("%jd bytes transferred in %jd.%09jd seconds\n",
|
||||
(bflag * tflag * pflag), (intmax_t)ts_finish.tv_sec,
|
||||
if (hflag)
|
||||
printf("bytes,seconds,conn/s,Gb/s,user%%,nice%%,sys%%,"
|
||||
"intr%%,idle%%\n");
|
||||
|
||||
/*
|
||||
* Configuration parameters.
|
||||
*/
|
||||
printf("%jd,", bflag * tflag * pflag);
|
||||
printf("%jd.%09jd,", (intmax_t)ts_finish.tv_sec,
|
||||
(intmax_t)(ts_finish.tv_nsec));
|
||||
|
||||
if (Tflag)
|
||||
printf("%d procs ", pflag);
|
||||
if (Cflag) {
|
||||
printf("%f cps%s", (double)(pflag * tflag)/
|
||||
(ts_finish.tv_sec + ts_finish.tv_nsec * 1e-9),
|
||||
Tflag ? " " : "\n");
|
||||
} else {
|
||||
printf("%f Gbps%s", (double)(bflag * tflag * pflag * 8) /
|
||||
(ts_finish.tv_sec + ts_finish.tv_nsec * 1e-9) * 1e-9,
|
||||
Tflag ? " " : "\n");
|
||||
}
|
||||
if (Tflag) {
|
||||
ticks = 0;
|
||||
for (i = 0; i < CPUSTATES; i++) {
|
||||
cp_time_finish[i] -= cp_time_start[i];
|
||||
ticks += cp_time_finish[i];
|
||||
}
|
||||
printf("user%% %lu nice%% %lu sys%% %lu intr%% %lu "
|
||||
"idle%% %lu\n",
|
||||
(100 * cp_time_finish[CP_USER]) / ticks,
|
||||
(100 * cp_time_finish[CP_NICE]) / ticks,
|
||||
(100 * cp_time_finish[CP_SYS]) / ticks,
|
||||
(100 * cp_time_finish[CP_INTR]) / ticks,
|
||||
(100 * cp_time_finish[CP_IDLE]) / ticks);
|
||||
/*
|
||||
* Effective transmit rates.
|
||||
*/
|
||||
printf("%f,", (double)(pflag * tflag)/
|
||||
(ts_finish.tv_sec + ts_finish.tv_nsec * 1e-9));
|
||||
printf("%f,", (double)(bflag * tflag * pflag * 8) /
|
||||
(ts_finish.tv_sec + ts_finish.tv_nsec * 1e-9) * 1e-9);
|
||||
|
||||
/*
|
||||
* CPU time (est).
|
||||
*/
|
||||
ticks = 0;
|
||||
for (i = 0; i < CPUSTATES; i++) {
|
||||
cp_time_finish[i] -= cp_time_start[i];
|
||||
ticks += cp_time_finish[i];
|
||||
}
|
||||
printf("%0.02f,", (float)(100 * cp_time_finish[CP_USER]) / ticks);
|
||||
printf("%0.02f,", (float)(100 * cp_time_finish[CP_NICE]) / ticks);
|
||||
printf("%0.02f,", (float)(100 * cp_time_finish[CP_SYS]) / ticks);
|
||||
printf("%0.02f,", (float)(100 * cp_time_finish[CP_INTR]) / ticks);
|
||||
printf("%0.02f", (float)(100 * cp_time_finish[CP_IDLE]) / ticks);
|
||||
printf("\n");
|
||||
}
|
||||
|
@ -277,8 +277,10 @@ tcpp_server_worker(int workernum)
|
||||
void
|
||||
tcpp_server(void)
|
||||
{
|
||||
#if 0
|
||||
long cp_time_last[CPUSTATES], cp_time_now[CPUSTATES], ticks;
|
||||
size_t size;
|
||||
#endif
|
||||
pid_t pid;
|
||||
int i;
|
||||
|
||||
@ -307,7 +309,7 @@ tcpp_server(void)
|
||||
pid_list[i] = pid;
|
||||
}
|
||||
|
||||
if (Tflag) {
|
||||
#if 0
|
||||
size = sizeof(cp_time_last);
|
||||
if (sysctlbyname(SYSCTLNAME_CPTIME, &cp_time_last, &size,
|
||||
NULL, 0) < 0)
|
||||
@ -334,7 +336,7 @@ tcpp_server(void)
|
||||
(100 * cp_time_last[CP_IDLE]) / ticks);
|
||||
bcopy(cp_time_now, cp_time_last, sizeof(cp_time_last));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GC workers.
|
||||
|
Loading…
Reference in New Issue
Block a user