]>
git.saurik.com Git - apple/xnu.git/blob - tools/tests/libMicro/apple/lmbench_write.c
2 * Copyright (c) 2006 Apple Inc. All Rights Reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
31 #pragma ident "@(#)write.c 1.3 05/08/04 Apple Inc."
35 #define _XOPEN_SOURCE 500
43 #include "../libmicro.h"
50 #define DEFF "/dev/null"
54 static char *optf
= DEFF
;
55 static long long opts
= DEFS
;
61 lm_tsdsize
= sizeof (tsd_t
);
63 (void) sprintf(lm_optstr
, "cdf:s:");
65 (void) sprintf(lm_usage
,
66 " [-f file-to-write (default %s)]\n"
67 " [-s buffer-size (default %d)]\n"
68 " [-c ] (make sure buffer is in cache)\n"
72 "notes: measures lmbench_write()\n",
75 (void) sprintf(lm_header
, "%8s", "size");
83 benchmark_optswitch(int opt
, char *optarg
)
97 opts
= sizetoll(optarg
);
106 benchmark_initbatch(void *tsd
)
108 tsd_t
*ts
= (tsd_t
*)tsd
;
111 if (ts
->ts_buf
== NULL
) {
112 ts
->ts_buf
= malloc(opts
);
113 ts
->ts_fd
= open(optf
, O_WRONLY
);
117 (void) directio(ts
->ts_fd
, DIRECTIO_ON
);
120 * bring buf into cache if specified.
124 for (i
= 0; i
< opts
; i
++)
128 (void) lseek(ts
->ts_fd
, 0, SEEK_SET
);
134 benchmark(void *tsd
, result_t
*res
)
136 tsd_t
*ts
= (tsd_t
*)tsd
;
140 * The libmicro test uses a for loop as below:
141 * for (i = 0; i < lm_optB; i++) {
143 * we can probably get away with using lm_optB
144 * in the while loop below
149 while (i
++ < lm_optB
) {
150 if (write(ts
->ts_fd
, ts
->ts_buf
, opts
) != opts
) {
162 static char result
[256];
164 (void) sprintf(result
, "%8lld", opts
);