Esempio n. 1
0
File: stats.c Progetto: FPiriz/uperf
void
update_aggr_stat(uperf_shm_t *shm)
{
	int i;

	AGG_STAT(shm)->size = 0;
	AGG_STAT(shm)->count = 0;
	for (i = 0; i < shm->no_strands; i++) {
		newstats_t *ns = STRAND_STAT(shm_get_strand(shm, i));
		AGG_STAT(shm)->size += ns->size;
		AGG_STAT(shm)->count += ns->count;
	}
}
Esempio n. 2
0
static int
spawn_strands_group(uperf_shm_t *shm, group_t *gp, int id)
{
	int j;
	int rc;
	strand_t *s;

	for (j = 0; j < gp->nthreads; j++) {
		s = shm_get_strand(shm, id + j);
		s->worklist = group_clone(gp);
		s->shmptr = shm;
		s->role = MASTER;
		(void) group_assign_stat(shm, s->worklist, id + j);

		if (STRAND_IS_PROCESS(gp)) {
			s->strand_flag |= STRAND_TYPE_PROCESS;
			rc = fork();
			if (rc == 0) {
				(void) strand_run(s);
				exit(0);
			} else if (rc > 0) {
				s->pid = rc;
			} else {
				perror("fork");
				uperf_error("fork failed");
				return (1);
			}
		} else {
			s->strand_flag |= STRAND_TYPE_THREAD;
			rc = pthread_create(&(s->tid), NULL,
					&strand_run,
					(void *) s);
			if (rc) {
				perror("pthread_create");
				uperf_error("pthread_create failed");
				return (1);
			}
		}
	}
	return (0);
}