Пример #1
0
int
os_preop_switch2pqosmbm(cmd_t *cmd, boolean_t *smpl)
{
	page_t *cur = page_current_get();
	win_type_t type = PAGE_WIN_TYPE(cur);
	int ret = 0;

	if ((type == WIN_TYPE_PQOS_CMT_MONIPROC) || (type == WIN_TYPE_PQOS_CMT_MONILWP)) {

		if (perf_profiling_smpl(B_FALSE) != 0)
			return -1;

		if (disp_flag2_wait() != DISP_FLAG_PROFILING_DATA_READY)
			return -1;

		CMD_PQOS_MBM(cmd)->pid = DYN_PQOS_CMT_PROC(cur)->pid;
		CMD_PQOS_MBM(cmd)->lwpid = DYN_PQOS_CMT_PROC(cur)->lwpid;
		CMD_PQOS_MBM(cmd)->flags = PERF_PQOS_FLAG_TOTAL_BW | PERF_PQOS_FLAG_LOCAL_BW;

		perf_pqos_cmt_stop(CMD_PQOS_MBM(cmd)->pid, CMD_PQOS_MBM(cmd)->lwpid);

		ret = perf_pqos_proc_setup(CMD_PQOS_MBM(cmd)->pid,
			CMD_PQOS_MBM(cmd)->lwpid, CMD_PQOS_MBM(cmd)->flags);
	}

	return (ret);
}
Пример #2
0
int
os_preop_switch2pqoscmt(cmd_t *cmd, boolean_t *smpl)
{
	page_t *cur = page_current_get();
	win_type_t type = PAGE_WIN_TYPE(cur);
	int ret = 0;

	switch (type) {
	case WIN_TYPE_MONIPROC:
		CMD_PQOS_CMT(cmd)->pid = DYN_MONI_PROC(cur)->pid;
		CMD_PQOS_CMT(cmd)->lwpid = 0;
		CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC;
		break;

	case WIN_TYPE_RAW_NUM:
	case WIN_TYPE_TOPNPROC:
		CMD_PQOS_CMT(cmd)->pid = 0;
		CMD_PQOS_CMT(cmd)->lwpid = 0;
		CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC;
		break;

	case WIN_TYPE_MONILWP:
		CMD_PQOS_CMT(cmd)->pid = DYN_MONI_LWP(cur)->pid;
		CMD_PQOS_CMT(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid;
		CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC;
		break;

	case WIN_TYPE_PQOS_MBM_MONIPROC:
	case WIN_TYPE_PQOS_MBM_MONILWP:
		CMD_PQOS_CMT(cmd)->pid = DYN_PQOS_MBM_PROC(cur)->pid;
		CMD_PQOS_CMT(cmd)->lwpid = DYN_PQOS_MBM_PROC(cur)->lwpid;
		CMD_PQOS_CMT(cmd)->flags = PERF_PQOS_FLAG_LLC;
		break;

	default:
		return (-1);
	}

	perf_pqos_cmt_stop(CMD_PQOS_CMT(cmd)->pid, CMD_PQOS_CMT(cmd)->lwpid);

	if (perf_profiling_smpl(B_FALSE) != 0)
		return -1;

	if (disp_flag2_wait() != DISP_FLAG_PROFILING_DATA_READY)
		return -1;

	if (CMD_PQOS_CMT(cmd)->pid == 0) {
		ret = perf_pqos_active_proc_setup(CMD_PQOS_CMT(cmd)->flags, B_FALSE);
	} else {
		ret = perf_pqos_proc_setup(CMD_PQOS_CMT(cmd)->pid,
			CMD_PQOS_CMT(cmd)->lwpid, CMD_PQOS_CMT(cmd)->flags);
	}

	return (ret);
}
Пример #3
0
static void
sortkey_set(int cmd_id, page_t *page)
{
	win_type_t win_type = PAGE_WIN_TYPE(page);
	int *arr = NULL;

	if (win_type == WIN_TYPE_RAW_NUM) {
		arr = s_rawnum_sortkey;
	} else {
		arr = s_topnproc_sortkey;
	}

	if ((cmd_id >= CMD_1_ID) && (cmd_id <= CMD_5_ID) && (arr != NULL)) {
		g_sortkey = arr[cmd_id - CMD_1_ID];
	}
}
Пример #4
0
static int
callchain_id_get(void)
{
	page_t *cur = page_current_get();

	if (cur == NULL) {
		return (CMD_INVALID_ID);
	}

	switch (PAGE_WIN_TYPE(cur)) {
	case WIN_TYPE_MONIPROC:
	case WIN_TYPE_MONILWP:
		return (CMD_CALLCHAIN_ID);

	case WIN_TYPE_LAT_PROC:
	case WIN_TYPE_LAT_LWP:
		return (CMD_LLCALLCHAIN_ID);

	default:
		return (CMD_INVALID_ID);
	}
}
Пример #5
0
int
os_op_switch2ll(cmd_t *cmd, boolean_t smpl)
{
	page_t *cur = page_current_get();
	int type = PAGE_WIN_TYPE(cur);

	switch (type) {
	case WIN_TYPE_MONIPROC:
		CMD_LAT(cmd)->pid = DYN_MONI_PROC(cur)->pid;
		CMD_LAT(cmd)->lwpid = 0;
		break;
		
	case WIN_TYPE_MONILWP:
		CMD_LAT(cmd)->pid = DYN_MONI_LWP(cur)->pid;
		CMD_LAT(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid;
		break;

	default:
		return (-1);
	}

	return (op_page_next(cmd, smpl));
}
Пример #6
0
int
os_preop_switch2accdst(cmd_t *cmd, boolean_t *smpl)
{
	page_t *cur = page_current_get();
	win_type_t type = PAGE_WIN_TYPE(cur);

	switch (type) {
	case WIN_TYPE_LAT_PROC:
		CMD_ACCDST(cmd)->pid = DYN_LAT(cur)->pid;
		CMD_ACCDST(cmd)->lwpid = 0;
		break;
		
	case WIN_TYPE_LAT_LWP:
		CMD_ACCDST(cmd)->pid = DYN_LAT(cur)->pid;
		CMD_ACCDST(cmd)->lwpid = DYN_LAT(cur)->lwpid;
		break;

	default:
		return (-1);
	}
	
	return (0);
}
Пример #7
0
/*
 * The common entry to process all commands.
 */
void
cmd_execute(cmd_t *cmd, boolean_t *badcmd)
{
	cmd_id_t cmd_id;
	win_type_t type;
	page_t *cur;
	switch_t *s;
	boolean_t b = B_TRUE, smpl = B_FALSE;

	if ((cmd_id = CMD_ID(cmd)) == CMD_INVALID_ID) {
		goto L_EXIT;
	}

	b = B_FALSE;

	if ((cur = page_current_get()) == NULL) {
		/* It's the first window. */
		type = WIN_TYPE_RAW_NUM;
	} else {
		type = PAGE_WIN_TYPE(cur);
	}

	s = &s_switch[type][cmd_id];
	if (s->preop != NULL) {
		(void) s->preop(cmd, &smpl);
	}

	if (s->op != NULL) {
		(void) s->op(cmd, smpl);
	}

L_EXIT:
	if (badcmd != NULL) {
		*badcmd = b;
	}
}
Пример #8
0
int
os_preop_switch2callchain(cmd_t *cmd, boolean_t *smpl)
{
	page_t *cur = page_current_get();
	win_type_t type = PAGE_WIN_TYPE(cur);

	switch (type) {
	case WIN_TYPE_MONIPROC:
		CMD_CALLCHAIN(cmd)->pid = DYN_MONI_PROC(cur)->pid;
		CMD_CALLCHAIN(cmd)->lwpid = 0;
		break;
		
	case WIN_TYPE_MONILWP:
		CMD_CALLCHAIN(cmd)->pid = DYN_MONI_LWP(cur)->pid;
		CMD_CALLCHAIN(cmd)->lwpid = DYN_MONI_LWP(cur)->lwpid;
		break;

	default:
		return (-1);
	}	

	*smpl = B_TRUE;
	return (perf_profiling_partpause(COUNT_RMA));
}