OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [test_suite0/] [src/] [perf/] [tctrl.c] - Rev 2

Compare with Previous | Blame | View Log

/*
 * Copyright (C) 2010 B Labs Ltd.
 *
 * l4_thread_control performance tests
 *
 * Author: Bahadir Balban
 */
 
#include <l4lib/macros.h>
#include L4LIB_INC_ARCH(syslib.h)
#include L4LIB_INC_ARCH(syscalls.h)
#include <l4lib/lib/thread.h>
#include <l4lib/perfmon.h>
#include <perf.h>
#include <tests.h>
#include <string.h>
 
struct perfmon_cycles tctrl_cycles;
 
#define PERFTEST_THREAD_CREATE 			50
 
void perf_measure_tctrl(void)
{
	struct task_ids ids[PERFTEST_THREAD_CREATE];
	struct task_ids selfids;
	l4_getid(&selfids);
 
	/*
	 * Initialize structures
	 */
	memset(&tctrl_cycles, 0, sizeof (struct perfmon_cycles));
	tctrl_cycles.min = ~0; /* Init as maximum possible */
 
	/*
	 * Thread create test
	 */
	for (int i = 0; i < PERFTEST_THREAD_CREATE; i++) {
		perfmon_reset_start_cyccnt();
		l4_thread_control(THREAD_CREATE | TC_SHARE_SPACE, &selfids);
		perfmon_record_cycles(&tctrl_cycles, "THREAD_CREATE");
 
		/* Copy ids of created task */
		memcpy(&ids[i], &selfids, sizeof(struct task_ids));
	}
 
	/*
	 * Calculate average
	 */
	tctrl_cycles.avg = tctrl_cycles.total / tctrl_cycles.ops;
 
	/*
	 * Print results
	 */
	printf("%s took %llu min, %llu max, %llu avg, in %llu ops.\n",
	       "THREAD_CREATE",
	       tctrl_cycles.min * USEC_MULTIPLIER,
	       tctrl_cycles.max * USEC_MULTIPLIER,
	       tctrl_cycles.avg * USEC_MULTIPLIER,
	       tctrl_cycles.ops);
 
	/*
	 * Thread destroy test
	 */
	for (int i = 0; i < PERFTEST_THREAD_CREATE; i++) {
		perfmon_reset_start_cyccnt();
		l4_thread_control(THREAD_DESTROY, &ids[i]);
		perfmon_record_cycles(&tctrl_cycles,"THREAD_DESTROY");
	}
 
	/*
	 * Calculate average
	 */
	tctrl_cycles.avg = tctrl_cycles.total / tctrl_cycles.ops;
 
	/*
	 * Print results
	 */
	printf("%s took %llu min, %llu max, %llu avg, in %llu ops.\n",
	       "THREAD_DESTROY",
	       tctrl_cycles.min * USEC_MULTIPLIER,
	       tctrl_cycles.max * USEC_MULTIPLIER,
	       tctrl_cycles.avg * USEC_MULTIPLIER,
	       tctrl_cycles.ops);
}
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.