Exemplo n.º 1
0
void
print_netstat()
{
	int 		i;
	uint64_t	op, ip, ob, ib;
	double		t;

	(void) printf("\nNetstat statistics for this run\n");

#ifdef HAVE_LIBKSTAT
	if (state_changed == 1) {
		(void) printf(WARNSTR);
	}
#endif /* HAVE_LIBKSTAT */

	(void) uperf_line();
	(void) printf("%-5s  %10s  %10s  %11s  %11s\n",
	    "Nic", "opkts/s", "ipkts/s", "obits/s", "ibits/s");
	for (i = 0; i < no_nics; i++) {
		op = nics[i].s[1].tx_pkts - nics[i].s[0].tx_pkts;
		ip = nics[i].s[1].rx_pkts - nics[i].s[0].rx_pkts;
		ib = nics[i].s[1].rx_bytes - nics[i].s[0].rx_bytes;
		ob = nics[i].s[1].tx_bytes - nics[i].s[0].tx_bytes;
		t =  (nics[i].s[1].stamp -  nics[i].s[0].stamp)/1.0e+9;
		if (ip == 0 && op == 0)
			continue;
		(void) printf("%-5s  %10.0f  %10.0f  ",
		    nics[i].interface, op/t, ip/t);
		PRINT_NUMb(ob*8/t, 11);
		printf(" ");
		PRINT_NUMb(ib*8/t, 11);
		printf("\n");
	}
	(void) uperf_line();
}
Exemplo n.º 2
0
static int
master_poll(uperf_shm_t *shm)
{
	int no_txn;
	int error;
	int curr_txn = 0;
	barrier_t *curr_bar;
	double time_to_print;
	newstats_t prev_ns;

	bzero(&prev_ns, sizeof (prev_ns));

	no_txn = workorder_max_txn(shm->workorder);
	shm->current_time = GETHRTIME();
	time_to_print = shm->current_time;

	/*
	 * The main event loop. It runs roughly at options.interval
	 * frequency.
	 * We come out of the loop if any of the following is true
	 * 1. If slaves send anything (they should not in normal circumstances)
	 * 2. All Transactions except the last one are complete
	 * 3. Error
	 */
	while (curr_txn < no_txn) {
		curr_bar = &shm->bar[curr_txn];
		if (shm->global_error > 0) {
			break;
		}
		error = poll_slaves();
		if (error != 0) {	/* msg arrived */
			/* Read slave msg and process it */
			(void) printf("\n*** Slave aborted! ***\n");
			shm->global_error++;
			break;
		}
		shm->current_time = GETHRTIME();
		shm_process_callouts(shm);

		if (BARRIER_REACHED(curr_bar)) { /* goto Next Txn */
			if (ENABLED_STATS(options)) {
				if (curr_txn != 0) {
					print_progress(shm, prev_ns);
					(void) printf("\n");
				}
				update_aggr_stat(shm);
				(void) memcpy(&prev_ns, AGG_STAT(shm),
				    sizeof (prev_ns));
				prev_ns.end_time = GETHRTIME();
				(void) snprintf(prev_ns.name,
						sizeof (prev_ns.name),
						"Txn%d", curr_txn + 1);
			}
			/*
			 * Ask slaves to begin curr_txn Ok to ignore
			 * return value as number of transactions
			 * per group may not be the same
			 */
			(void) send_command_to_slaves(UPERF_CMD_NEXT_TXN,
			    curr_txn);
			/* release barrier so master can also begin curr_txn */
			shm->txn_begin = GETHRTIME();
			unlock_barrier(curr_bar);
			curr_txn++;
		}

		shm->current_time = GETHRTIME();
		if (ENABLED_STATS(options) &&
		    (time_to_print <= shm->current_time)) {
			print_progress(shm, prev_ns);
			time_to_print = shm->current_time
			    + options.interval * 1.0e+6;
		}
	}
	while (shm->global_error == 0 && shm->finished == 0) {
		shm_process_callouts(shm);
		print_progress(shm, prev_ns);
		(void) poll(NULL, 0, 100);
	}
	if (ENABLED_STATS(options)) {
		(void) printf("\n");
		uperf_line();
	}
	if (shm->global_error > 0) {
		master_prepare_to_exit(shm);
		return (1);
	}
	if (ENABLED_ERROR_STATS(options))  {
		return (send_command_to_slaves(UPERF_CMD_SEND_STATS, 0));
	} else {
		return (0);
	}
}