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

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [test_suite0/] [src/] [perf/] [tctrl.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * Copyright (C) 2010 B Labs Ltd.
3
 *
4
 * l4_thread_control performance tests
5
 *
6
 * Author: Bahadir Balban
7
 */
8
 
9
#include <l4lib/macros.h>
10
#include L4LIB_INC_ARCH(syslib.h)
11
#include L4LIB_INC_ARCH(syscalls.h)
12
#include <l4lib/lib/thread.h>
13
#include <l4lib/perfmon.h>
14
#include <perf.h>
15
#include <tests.h>
16
#include <string.h>
17
 
18
struct perfmon_cycles tctrl_cycles;
19
 
20
#define PERFTEST_THREAD_CREATE                  50
21
 
22
void perf_measure_tctrl(void)
23
{
24
        struct task_ids ids[PERFTEST_THREAD_CREATE];
25
        struct task_ids selfids;
26
        l4_getid(&selfids);
27
 
28
        /*
29
         * Initialize structures
30
         */
31
        memset(&tctrl_cycles, 0, sizeof (struct perfmon_cycles));
32
        tctrl_cycles.min = ~0; /* Init as maximum possible */
33
 
34
        /*
35
         * Thread create test
36
         */
37
        for (int i = 0; i < PERFTEST_THREAD_CREATE; i++) {
38
                perfmon_reset_start_cyccnt();
39
                l4_thread_control(THREAD_CREATE | TC_SHARE_SPACE, &selfids);
40
                perfmon_record_cycles(&tctrl_cycles, "THREAD_CREATE");
41
 
42
                /* Copy ids of created task */
43
                memcpy(&ids[i], &selfids, sizeof(struct task_ids));
44
        }
45
 
46
        /*
47
         * Calculate average
48
         */
49
        tctrl_cycles.avg = tctrl_cycles.total / tctrl_cycles.ops;
50
 
51
        /*
52
         * Print results
53
         */
54
        printf("%s took %llu min, %llu max, %llu avg, in %llu ops.\n",
55
               "THREAD_CREATE",
56
               tctrl_cycles.min * USEC_MULTIPLIER,
57
               tctrl_cycles.max * USEC_MULTIPLIER,
58
               tctrl_cycles.avg * USEC_MULTIPLIER,
59
               tctrl_cycles.ops);
60
 
61
        /*
62
         * Thread destroy test
63
         */
64
        for (int i = 0; i < PERFTEST_THREAD_CREATE; i++) {
65
                perfmon_reset_start_cyccnt();
66
                l4_thread_control(THREAD_DESTROY, &ids[i]);
67
                perfmon_record_cycles(&tctrl_cycles,"THREAD_DESTROY");
68
        }
69
 
70
        /*
71
         * Calculate average
72
         */
73
        tctrl_cycles.avg = tctrl_cycles.total / tctrl_cycles.ops;
74
 
75
        /*
76
         * Print results
77
         */
78
        printf("%s took %llu min, %llu max, %llu avg, in %llu ops.\n",
79
               "THREAD_DESTROY",
80
               tctrl_cycles.min * USEC_MULTIPLIER,
81
               tctrl_cycles.max * USEC_MULTIPLIER,
82
               tctrl_cycles.avg * USEC_MULTIPLIER,
83
               tctrl_cycles.ops);
84
}
85
 

powered by: WebSVN 2.1.0

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