Ticket #15509: TeamTests.cpp

File TeamTests.cpp, 1.3 KB (added by X512, 4 months ago)

Context switch benchmark between 2 teams.

Line 
1#include <OS.h>
2#include <image.h>
3#include <stdio.h>
4#include <stdlib.h>
5
6enum {
7 second = 1000000,
8 stepCnt = 10000000
9};
10
11
12int main(int argc, char** argv)
13{
14 switch (argc) {
15 case 1: {
16 sem_id reqSem = create_sem(0, "test req sem");
17 sem_id replSem = create_sem(0, "test repl sem");
18 char reqSemStr[32];
19 char replSemStr[32];
20 sprintf(reqSemStr, "%" B_PRId32, reqSem);
21 sprintf(replSemStr, "%" B_PRId32, replSem);
22 const char *childArgv[] = {
23 argv[0],
24 reqSemStr,
25 replSemStr,
26 };
27 team_id childTeam = load_image(3, childArgv, (const char**)environ);
28 resume_thread(childTeam);
29 bigtime_t t1 = system_time();
30 for (int i = 0; i < stepCnt; i++) {
31 release_sem(reqSem);
32 while (acquire_sem(replSem) == B_INTERRUPTED) {}
33 }
34 bigtime_t t2 = system_time();
35 printf("round trip: %f\n", double(stepCnt)/((t2 - t1)/double(second)));
36 printf("context switches: %f\n", 2*double(stepCnt)/((t2 - t1)/double(second)));
37 status_t res;
38 wait_for_thread(childTeam, &res);
39 delete_sem(reqSem); reqSem = -1;
40 delete_sem(replSem); replSem = -1;
41 return 0;
42 }
43 case 3: {
44 sem_id reqSem = atoi(argv[1]);
45 sem_id replSem = atoi(argv[2]);
46 for (uint32 i = 0; i < stepCnt; i++) {
47 while (acquire_sem(reqSem) == B_INTERRUPTED) {}
48 release_sem(replSem);
49 }
50 return 0;
51 }
52 default:
53 return 1;
54 }
55}