Exemple #1
0
static void
list_update(list_t *list, lwp_info_t *lwp)
{
	id_info_t *id;

	if (list->l_head == NULL) {			/* first element */
		list->l_head = list->l_tail = id = Zalloc(sizeof (id_info_t));
		goto update;
	}

	for (id = list->l_head; id; id = id->id_next) {
		if ((list->l_type == LT_USERS) &&
		    (id->id_uid != lwp->li_info.pr_uid))
			continue;
		if ((list->l_type == LT_TASKS) &&
		    (id->id_taskid != lwp->li_info.pr_taskid))
			continue;
		if ((list->l_type == LT_PROJECTS) &&
		    (id->id_projid != lwp->li_info.pr_projid))
			continue;
		if ((list->l_type == LT_ZONES) &&
		    (id->id_zoneid != lwp->li_info.pr_zoneid))
			continue;
		id->id_nproc++;
		id->id_taskid	= lwp->li_info.pr_taskid;
		id->id_projid	= lwp->li_info.pr_projid;
		id->id_zoneid	= lwp->li_info.pr_zoneid;
		if (lwp->li_flags & LWP_REPRESENT) {
			id->id_size	+= lwp->li_info.pr_size;
			id->id_rssize	+= lwp->li_info.pr_rssize;
		}
		id->id_pctcpu	+= FRC2PCT(lwp->li_info.pr_lwp.pr_pctcpu);
		if (opts.o_outpmode & OPT_LWPS)
			id->id_time += TIME2SEC(lwp->li_info.pr_lwp.pr_time);
		else
			id->id_time += TIME2SEC(lwp->li_info.pr_time);
		id->id_pctmem	+= FRC2PCT(lwp->li_info.pr_pctmem);
		id->id_key	+= lwp->li_key;
		total_cpu	+= FRC2PCT(lwp->li_info.pr_lwp.pr_pctcpu);
		total_mem	+= FRC2PCT(lwp->li_info.pr_pctmem);
		return;
	}

	id = list->l_tail;
	id->id_next = Zalloc(sizeof (id_info_t));
	id->id_next->id_prev = list->l_tail;
	id->id_next->id_next = NULL;
	list->l_tail = id->id_next;
	id = list->l_tail;
update:
	id->id_uid	= lwp->li_info.pr_uid;
	id->id_projid	= lwp->li_info.pr_projid;
	id->id_taskid	= lwp->li_info.pr_taskid;
	id->id_zoneid	= lwp->li_info.pr_zoneid;
	id->id_nproc++;
	if (lwp->li_flags & LWP_REPRESENT) {
		id->id_size	= lwp->li_info.pr_size;
		id->id_rssize	= lwp->li_info.pr_rssize;
	}
	id->id_pctcpu	= FRC2PCT(lwp->li_info.pr_lwp.pr_pctcpu);
	if (opts.o_outpmode & OPT_LWPS)
		id->id_time = TIME2SEC(lwp->li_info.pr_lwp.pr_time);
	else
		id->id_time = TIME2SEC(lwp->li_info.pr_time);
	id->id_pctmem	= FRC2PCT(lwp->li_info.pr_pctmem);
	id->id_key	= lwp->li_key;
	total_cpu	+= id->id_pctcpu;
	total_mem	+= id->id_pctmem;
	list->l_count++;
}
Exemple #2
0
static ulong_t
get_time(void *lwp)
{
	return ((ulong_t)TIME2SEC(((lwp_info_t *)lwp)->li_info.pr_lwp.pr_time));
}
Exemple #3
0
/*
 * Calculate a process' statistics from its lwp statistics.
 */
static void
id_update(id_info_t *id, lwp_info_t *lwp, int l_type) {
	char usrname[LOGNAME_MAX+1];
	char projname[PROJNAME_MAX+1];

	/*
	 * When an id is processed first time in an update run its
	 * id_alive flag set to false.
	 * The next values are gauges, their old values from the previous
	 * calculation should be set to null.
	 * The names and timestamp must be set once.
	 */
	if (id->id_alive == B_FALSE) {
		id->id_hpsize = 0;
		id->id_size = 0;
		id->id_rssize = 0;
		id->id_pctmem = 0;
		id->id_timestamp = 0;
		id->id_time = 0;
		id->id_pctcpu = 0;
		id->id_nlwps = 0;
		id->id_nproc = 0;
		id->id_pid = (int)-1;
		id->id_taskid	= lwp->li_psinfo->pr_taskid;
		id->id_projid	= lwp->li_psinfo->pr_projid;
		id->id_psetid	= lwp->li_lwpsinfo->pr_bindpset;
		id->id_uid	= lwp->li_psinfo->pr_uid;
		if (l_type == LT_USERS) {
			getusrname(id->id_uid, usrname, LOGNAME_MAX+1);
			id->id_name = Realloc(id->id_name,
					strlen(usrname) + 1);
			(void) strcpy(id->id_name, usrname);
		} else if (l_type == LT_PROJECTS) {
			getprojname(id->id_projid, projname, PROJNAME_MAX);
			id->id_name = Realloc(id->id_name,
					strlen(projname) + 1);
			(void) strcpy(id->id_name, projname);
		} else {
			id->id_name = nullstr;
		}
		id->id_timestamp = get_timestamp();
		/* mark this id as changed in this update run */
		id->id_alive = B_TRUE;
	}

	if (lwp->li_psinfo->pr_nlwp > 0) {
	    id->id_nlwps++;
	}

	/*
	 * The next values are calculated only one time for each pid.
	 */
	if ((id->id_pid != lwp->li_psinfo->pr_pid) &&
		(lwp->rlwpid == lwp->li_lwpsinfo->pr_lwpid)) {
		id->id_nproc++;
		id->id_hpsize	+= (lwp->li_hpsize/1024);
		id->id_size	+= lwp->li_psinfo->pr_size;
		id->id_rssize	+= lwp->li_psinfo->pr_rssize;
		id->id_pctmem	+= FRC2PCT(lwp->li_psinfo->pr_pctmem);
		id->id_pid	= lwp->li_psinfo->pr_pid;
		if (l_type == LT_PROCESS)
			total_mem += FRC2PCT(lwp->li_psinfo->pr_pctmem);
	}

	id->id_pctcpu	+= FRC2PCT(lwp->li_lwpsinfo->pr_pctcpu);
	if (l_type == LT_PROCESS)
		total_cpu += FRC2PCT(lwp->li_lwpsinfo->pr_pctcpu);
	id->id_time	+= TIME2SEC(lwp->li_lwpsinfo->pr_time);
	id->id_usr	+= lwp->li_usr;
	id->id_sys	+= lwp->li_sys;
	id->id_ttime	+= lwp->li_ttime;
	id->id_tpftime	+= lwp->li_tpftime;
	id->id_dpftime	+= lwp->li_dpftime;
	id->id_kpftime	+= lwp->li_kpftime;
	id->id_lck	+= lwp->li_lck;
	id->id_slp	+= lwp->li_slp;
	id->id_lat	+= lwp->li_lat;
	id->id_stime	+= lwp->li_stime;
	id->id_minf	+= lwp->li_minf;
	id->id_majf	+= lwp->li_majf;
	id->id_nswap	+= lwp->li_nswap;
	id->id_inblk	+= lwp->li_inblk;
	id->id_oublk	+= lwp->li_oublk;
	id->id_msnd	+= lwp->li_msnd;
	id->id_mrcv	+= lwp->li_mrcv;
	id->id_sigs	+= lwp->li_sigs;
	id->id_vctx	+= lwp->li_vctx;
	id->id_ictx	+= lwp->li_ictx;
	id->id_scl	+= lwp->li_scl;
	id->id_ioch	+= lwp->li_ioch;
}