]> git.saurik.com Git - apple/xnu.git/blame - tools/tests/libMicro/libmicro.h
xnu-3248.60.10.tar.gz
[apple/xnu.git] / tools / tests / libMicro / libmicro.h
CommitLineData
b0d623f7
A
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22
23/*
24 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 */
27
28#ifndef LIBMICRO_H
29#define LIBMICRO_H
30
31#include <pthread.h>
32
33#define LIBMICRO_VERSION "0.4.0"
34
35#define STRSIZE 1024
36
6d2010ae
A
37#define STREQ(a,b) (strcmp(a,b) == 0)
38
b0d623f7
A
39typedef struct {
40 long long re_count;
41 long long re_errors;
42 long long re_t0;
43 long long re_t1;
44} result_t;
45
46typedef struct {
47 double sum;
48 long long count;
49} histo_t;
50
51#define HISTOSIZE 32
52#define DATASIZE 100000
53
54/*
55 * stats we compute on data sets
56 */
57
58typedef struct stats {
59 double st_min;
60 double st_max;
61 double st_mean;
62 double st_median;
63 double st_stddev;
64 double st_stderr;
65 double st_99confidence;
66 double st_skew;
67 double st_kurtosis;
68 double st_timecorr; /* correlation with respect to time */
69} stats_t;
70
71/*
72 * Barrier stuff
73 */
74
75typedef struct {
76 int ba_hwm; /* barrier setpoint */
77 int ba_flag; /* benchmark while true */
78 long long ba_deadline; /* when to stop */
79 int ba_phase; /* number of time used */
80 int ba_waiters; /* how many are waiting */
81
82#ifdef USE_SEMOP
83 int ba_semid;
84#else
85 pthread_mutex_t ba_lock;
86 pthread_cond_t ba_cv;
87#endif
88
89 long long ba_count; /* how many ops */
90 long long ba_errors; /* how many errors */
91
92 int ba_quant; /* how many quant errors */
93 int ba_batches; /* how many samples */
94
95 double ba_starttime; /* test time start */
96 double ba_endtime; /* test time end */
97
98#ifdef NEVER
99 double ba_tmin; /* min time taken */
100 double ba_tmax; /* max time taken */
101 double ba_ctmax; /* max after outliers */
102 double ba_mean; /* average value */
103 double ba_median; /* median value */
104 double ba_rawmedian; /* raw median value */
105 double ba_stddev; /* standard deviation */
106 double ba_stderr; /* standard error */
107 double ba_skew; /* skew */
108 double ba_kurtosis; /* kurtosis */
109#endif
110 stats_t ba_raw; /* raw stats */
111 stats_t ba_corrected; /* corrected stats */
112
113 int ba_outliers; /* outlier count */
114
115 long long ba_t0; /* first thread/proc */
116 long long ba_t1; /* time of last thread */
117 long long ba_count0;
118 long long ba_errors0;
119
120 int ba_datasize; /* possible #items data */
121 double ba_data[1]; /* start of data ararry */
122} barrier_t;
123
124
125/*
126 * Barrier interfaces
127 */
128
129barrier_t *barrier_create(int hwm, int datasize);
130int barrier_destroy(barrier_t *bar);
131int barrier_queue(barrier_t *bar, result_t *res);
132
133
134/*
135 * Functions that can be provided by the user
136 */
137
138int benchmark(void *tsd, result_t *res);
139int benchmark_init();
140int benchmark_fini();
141int benchmark_initrun();
142int benchmark_finirun();
143int benchmark_initworker();
144int benchmark_finiworker();
145int benchmark_initbatch(void *tsd);
146int benchmark_finibatch(void *tsd);
147int benchmark_optswitch(int opt, char *optarg);
148char *benchmark_result();
149
150
151/*
152 * Globals exported to the user
153 */
154
155extern int lm_argc;
156extern char **lm_argv;
157
158extern int lm_optB;
159extern int lm_optD;
160extern int lm_optH;
161extern char *lm_optN;
162extern int lm_optP;
163extern int lm_optS;
164extern int lm_optT;
165
166extern int lm_defB;
167extern int lm_defD;
168extern int lm_defH;
169extern char *lm_defN;
170extern int lm_defP;
171extern int lm_defS;
172extern int lm_defT;
173extern int lm_nsecs_per_op;
174
175extern char *lm_procpath;
176extern char lm_procname[STRSIZE];
177extern char lm_usage[STRSIZE];
178extern char lm_optstr[STRSIZE];
179extern char lm_header[STRSIZE];
180extern size_t lm_tsdsize;
181
182
183/*
184 * Utility functions
185 */
186
187int getpindex();
188int gettindex();
189void *gettsd(int p, int t);
190#if defined(__APPLE__)
191int gettsdindex(void *arg);
192#endif /* __APPLE__ */
193long long getusecs();
194long long getnsecs();
195int setfdlimit(int limit);
196long long sizetoll();
197int sizetoint();
198int fit_line(double *, double *, int, double *, double *);
199long long get_nsecs_resolution();
200
201
202/* Apple Mods Here */
203
204
205
206#ifdef NO_PORTMAPPER
207#define TCP_SELECT -31233
208#define TCP_XACT -31234
209#define TCP_CONTROL -31235
210#define TCP_DATA -31236
211#define TCP_CONNECT -31237
212#define UDP_XACT -31238
213#define UDP_DATA -31239
214#else
215#define TCP_SELECT (u_long)404038 /* XXX - unregistered */
216#define TCP_XACT (u_long)404039 /* XXX - unregistered */
217#define TCP_CONTROL (u_long)404040 /* XXX - unregistered */
218#define TCP_DATA (u_long)404041 /* XXX - unregistered */
219#define TCP_CONNECT (u_long)404042 /* XXX - unregistered */
220#define UDP_XACT (u_long)404032 /* XXX - unregistered */
221#define UDP_DATA (u_long)404033 /* XXX - unregistered */
222#define VERS (u_long)1
223#endif
224
225/*
226* socket send/recv buffer optimizations
227*/
228#define SOCKOPT_READ 0x0001
229#define SOCKOPT_WRITE 0x0002
230#define SOCKOPT_RDWR 0x0003
231#define SOCKOPT_PID 0x0004
232#define SOCKOPT_REUSE 0x0008
233#define SOCKOPT_NONE 0
234
235#ifndef SOCKBUF
236#define SOCKBUF (1024*1024)
237#endif
238
239#ifndef XFERSIZE
240#define XFERSIZE (64*1024) /* all bandwidth I/O should use this */
241#endif
242
243typedef unsigned long iter_t;
244
245int tcp_server(int prog, int rdwr);
246int tcp_done(int prog);
247int tcp_accept(int sock, int rdwr);
248int tcp_connect(char *host, int prog, int rdwr);
249void sock_optimize(int sock, int rdwr);
250int sockport(int s);
251
252/* end Apple Mods */
253
254
255#endif /* LIBMICRO_H */